最近接手了一個項目,服務器端數據庫是oracle 11g 64位。因爲主要工做不是開發,也不想在本身的電腦上安裝龐大的oracle數據庫,所以尋思着只經過數據庫管理工具鏈接數據庫進行一些經常使用的查詢操做。php
服務器:windows server 2008 64位html
服務器oracle版本:oracle 11g R2 64位,字符集是ZHS16GBK。 sql
本機:windows 7 64位數據庫
一、Instant Client 12.1.0.2.0 32位和64位windows
Instant Client 是Oracle 公司推出的精簡版客戶端,官網下載地址。服務器
最新版本是12.1.0.2.0,本文分別下載了32位和64位的Basic版本。Basic版本包含了運行 OCI、OCCI 和 JDBC-OCI 應用程序所需的全部文件。網絡
至於爲何會分別下載32位和64位的Basic版本的Instant Client,後面會詳細介紹。oracle
二、Navicat Premium 11.1.10 64位函數
Navicat Premium 是一套數據庫管理工具,能夠以單一程序同時鏈接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 數據庫,很是方便。工具
官方網址是:http://www.navicat.com.cn/products/navicat-premium。
因爲本機是64位操做系統,所以下載最新的11.1.10 64位版本。
三、PL\SQL Developer 10.0.5.1710
PL/SQL Developer是一個集成開發環境,專門面向Oracle數據庫存儲程序單元的開發。PL/SQL Developer側重於易用性、代碼品質和生產力,充分發揮Oracle應用程序開發過程當中的主要優點。官方網站是http://www.allroundautomations.com/plsqldev.html,本文下載的版本是10.0.5.1710,官方還提供了簡體中文語言包。
給個人感受是Navicat Premium更方便,同時數據庫;PL\SQL Developer更專業,oracle的開發管理更強大。所以選擇兩個軟件都安裝。
一、解壓Instant Client
將32位和64位的Instant Client分別解壓並重命名,本機解壓及重命名路徑以下:
32位:D:\Databases\Oracle\instantclient_12_1_x32
64位:D:\Databases\Oracle\instantclient_12_1_x64
二、配置Navicat Premium的OCI
其實Navicat Premium默認自帶了instantclient_10_2,可是其是base lite版本的(Basic Lite: Basic 的精簡版本,其中僅帶有英文錯誤消息和 Unicode、ASCII 以及西歐字符集支持),不支持中文字符集,而本文中的服務器端oracle剛好是中文字符集,instantclient_10_2不適合,所以須要下載base版本。
將Navicat Premium中的OCI library設置爲D:\Databases\Oracle\instantclient_12_1_x64\oci.dll,而後重啓生效。
三、在Navicat Premium配置數據庫鏈接
Navicat Premium中oracle有兩種鏈接類型:Basic和TNS。
Basic
在 Basic 模式中,經過 Oracle Call Interface (OCI) 鏈接 Oracle。OCI 是一個應用程序界面,讓程序開發人員使用第三代語言原有進程或函數呼叫來訪問 Oracle 數據庫及控制所有 SQL 語句運行的階段。OCI 是一個標準數據庫訪問的庫和動態連接庫形式檢索函數。
Basic模式須要輸入主機名或IP地址、端口及服務名或SID。
TNS
在 TNS 模式中,須要使用在 tnsnames.ora 文件中的別名項目經過 Oracle Call Interface (OCI) 鏈接 Oracle 服務器。
TNS模式只須要選擇網絡服務名,可是以前須要新建tnsnames.ora,並配置數據庫服務。
推薦使用更簡潔Basic模式,能夠省去複雜的tnsnames配置。本文采用的就是Basic模式。
在下圖「新建鏈接」界面,輸入鏈接名、鏈接類型、主機名或IP地址、端口、服務名或SID、用戶名及密碼,點擊肯定便可鏈接數據庫。
四、配置PL\SQL Developer的OCI
「首選項-Oracle-鏈接」界面中,配置Oracle主目錄名和OCI庫。
Oracle主目錄名:D:\Databases\Oracle\instantclient_12_1_x32
OCI庫:D:\Databases\Oracle\instantclient_12_1_x32\oci.dll
五、在PL\SQL Developer配置數據庫鏈接
PL\SQL Developer中一樣能夠用Basic和TNS鏈接模式來進行配置。
二者的主要區別在於數據庫輸入項,Basic模式須要輸入「主機名或IP/服務名」格式的數據鏈接字符串,TNS模式則能夠在下拉框中選擇配置好的數據庫。
跟Navicat同樣,推薦使用更簡潔Basic模式,同時設置PL\SQL Developer保留登陸歷史,會方便不少。
六、解決PL\SQL Developer查詢中文表出現問號亂碼問題
在PL\SQL Developer中,查詢包含中文字符的表,中文會變成一段段問號,主要緣由是server與client的字符集不相同。
執行如下SQL語句查看服務器數據庫字符集:
SELECT * FROM v$nls_parameters
結果以下:
主要參數爲:
NLS_LAGUAGE:SIMPLIFIED CHINESE
NLS_TERRITORY : CHINA
NLS_CHARACTERSET : ZHS16GBK
所以在本機中咱們須要配置如下環境,保證服務器和本機字符集的一致。
變量名:NLS_LANG
變量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
再次查詢中文表,咱們會發現中文又正常了。
至此,使用客戶端Navicat Premium和PL\SQL Developer經過Instant client鏈接服務器oralce數據庫的安裝配置過程已經完結了,最後以一張圖來歸納整個安裝配置過程。
事實上,安裝配置過程並無想象的那麼輕鬆,可是咱們要抱着「沒事兒不惹事兒,事兒來了也不怕事兒」態度挨個解決遇到的問題。主要吐槽的問題有如下幾個:
該問題是直接使用Navicat自帶的instantclient_10_2形成的。
自帶的採用的是Basic Lite版本的instantclient。
Basic Lite: Basic 的精簡版本,其中僅帶有英文錯誤消息和 Unicode、ASCII 以及西歐字符集支持
Basic: 運行 OCI、OCCI 和 JDBC-OCI 應用程序所需的全部文件,包含中文字符集。
解決辦法就是換個Basic版本的instantclient。
能夠點擊http://wiki.navicat.com/wiki/index.php/Instant_client_required查看官方的解決辦法。
可是正式查看了官方的解決辦法,使得我繞了好大的彎彎才正常鏈接上數據庫。
注意紅色部分:
提醒咱們Navicat 版本 10 或如下,Navicat 只支持 32-bit instant client。
而我忽略的第一句話,理解成了Navicat 只支持 32-bit instant client,下載了32-bit instant client,可是Navicat 版本 11,注意咱們用的Navicat 版本 11,Navicat 版本 11 64位版本不支持32-bit instant client,只支持64-bit instant client,而網上的文章大部分都是Navicat 版本 10使用32-bit instant client鏈接數據庫,所以我一直懷疑本身解壓錯了,反覆的試錯,浪費了很多時間才醒悟過來。