在64位Win7中使用Navicat Premium 和PL\SQL Developer連接Oracle數據庫備忘
最近接手了一個項目,服務器端數據庫是oracle 11g 64位。由於主要工作不是開發,也不想在自己的電腦上安裝龐大的oracle數據庫,因此尋思着只通過數據庫管理工具連接數據庫進行一些常用的查詢操作。
運行環境
服務器:windows server 2008 64位
服務器oracle版本:oracle 11g R2 64位,字符集是ZHS16GBK。
本機:windows 7 64位
需要准備的軟件
1、Instant Client 12.1.0.2.0 32位和64位
Instant Client 是Oracle 公司推出的精簡版客戶端,官網下載地址。
最新版本是12.1.0.2.0,本文分別下載了32位和64位的Basic版本。Basic版本包含了運行 OCI、OCCI 和 JDBC-OCI 應用程序所需的所有文件。
至於為什么會分別下載32位和64位的Basic版本的Instant Client,后面會詳細介紹。
2、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位版本。
3、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的開發管理更強大。因此選擇兩個軟件都安裝。
安裝配置
1、解壓Instant Client
將32位和64位的Instant Client分別解壓並重命名,本機解壓及重命名路徑如下:
32位:D:\Databases\Oracle\instantclient_12_1_x32
64位:D:\Databases\Oracle\instantclient_12_1_x64
2、配置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,然后重啟生效。
3、在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、用戶名及密碼,點擊確定即可連接數據庫。
4、配置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
5、在PL\SQL Developer配置數據庫連接
PL\SQL Developer中同樣可以用Basic和TNS連接模式來進行配置。
兩者的主要區別在於數據庫輸入項,Basic模式需要輸入“主機名或IP/服務名”格式的數據連接字符串,TNS模式則可以在下拉框中選擇配置好的數據庫。
跟Navicat一樣,推薦使用更簡潔Basic模式,同時設置PL\SQL Developer保留登錄歷史,會方便很多。
6、解決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數據庫的安裝配置過程已經完結了,最后以一張圖來概括整個安裝配置過程。
吐槽
事實上,安裝配置過程並沒有想象的那么輕松,但是我們要抱着“沒事兒不惹事兒,事兒來了也不怕事兒”態度挨個解決遇到的問題。主要吐槽的問題有以下幾個:
問題1:Navicat報ORA-12737:Instant Client Light:unsupported server character set ZHS
16GBK
該問題是直接使用Navicat自帶的instantclient_10_2造成的。
自帶的采用的是Basic Lite版本的instantclient。
Basic Lite: Basic 的精簡版本,其中僅帶有英文錯誤消息和 Unicode、ASCII 以及西歐字符集支持
Basic: 運行 OCI、OCCI 和 JDBC-OCI 應用程序所需的所有文件,包含中文字符集。
解決辦法就是換個Basic版本的instantclient。
問題2:Navicat報Cannot load OCI DLL, 193
可以點擊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連接數據庫,因此我一直懷疑自己解壓錯了,反復的試錯,浪費了不少時間才醒悟過來。
參考文章
- http://jingyan.baidu.com/article/a3aad71aa9bfefb1fa00964d.html
- http://1249479040qq.iteye.com/blog/1991367
- http://www.cnblogs.com/xwdreamer/p/3649993.html
- http://www.educity.cn/wenda/583545.html
- http://blog.csdn.net/jbgtwang/article/details/7702897
- http://wiki.navicat.com/zh-chs/index.php/%E9%9C%80%E8%A6%81_Instant_client