標籤:
最近接手了一個項目,伺服器端資料庫是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 ZHS16GBK
該問題是直接使用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
在64位Win7中使用Navicat Premium 和PL\SQL Developer串連Oracle資料庫備忘