共計 6749 個字符,預計需要花費 17 分鐘才能閱讀完成。
本篇內容介紹了“Ubuntu16.04 下怎么安裝 Oracle 數據庫的 ODBC 驅動”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在 Ubuntu 16.04 下要連接遠程的 Oracle 數據庫,有多種方式,本文介紹通過 ODBC 方式來實現客戶端遠程訪問 Oracle 數據庫。
1、要通過 ODBC 方式連接遠程數據庫,客戶端需要有 ODBC 管理程序,在 Linux 系統下,可以用以下命令檢查 ODBC 的環境和配置:
(1)檢查系統是否安裝 ODBC 管理程序:
csyy@server02:~$ dpkg -l | grep odbc
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=======================-============-============-=========================
ii libodbc1:amd64 2.3.7 amd64 ODBC library for Unix
ii msodbcsql17 17.4.2.1-1 amd64 ODBC Driver for Microsoft(R) SQL Server(R)
ii odbcinst 2.3.7 amd64 Helper program for accessing odbc ini files
ii odbcinst1debian2:amd64 2.3.7 amd64 Support library for accessing odbc ini files
ii unixodbc 2.3.7 amd64 Basic ODBC tools
ii unixodbc-dev 2.3.7 amd64 ODBC libraries for UNIX (development files)
如果未找到 ODBC 管理程序,可用以下命令來安裝:
sudo apt-get install unixodbc
(2)檢查 ODBC 環境配置:
csyy@server02:~$ odbcinst
******************************************************************************
* unixODBC – odbcinst *
******************************************************************************
* Purpose: *
* An ODBC Installer and Uninstaller. *
* Updates system files, and increases/decreases usage counts but *
* does not actually copy or remove any files. *
* Syntax: *
* odbcinst Action Object Options *
* Action: *
* -i install *
* -u uninstall *
* -q query *
* -j print config info *
* -c call SQLCreateDataSource *
* -m call SQLManageDataSources *
* –version version *
* Object: *
* -d driver *
* -s data source *
* Options: *
* -f file name of template.ini follows this (valid for -i) *
* -r get template.ini from stdin, not a template file *
* -n Driver or Data Source Name follows *
* -v turn verbose off (no info, warning or error msgs) *
* -l system dsn *
* -h user dsn *
* Returns: *
* 0 Success *
* !0 Failed *
* Please visit; *
* http://www.unixodbc.org *
* pharvey@codebydesign.com *
******************************************************************************
csyy@server02:~$ odbcinst -j
unixODBC 2.3.7
DRIVERS…………: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/csyy/.odbc.ini
SQLULEN Size…….: 8
SQLLEN Size……..: 8
SQLSETPOSIROW Size.: 8
從配置環境來看,ODBC 驅動的配置文件是 /etc/odbcinst.ini,系統 DSN 的配置文件是 /etc/odbc.ini,文件 DSN 的配置文件是 /etc/ODBCDataSources,而用戶 DSN 的配置文件則是 $HOME/.odbc.ini。
2、下載并安裝 oracle ODBC 驅動程序:
進入官網 https://www.oracle.com/database/technologies/instant-client/ linux-x86-64-downloads.html 下載如下所需的安裝包。
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
進行安裝
sudo alien -i oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
此處采用了 rpm 包來安裝 Oracle for ODBC 的驅動程序,也可通過 zip 包來安裝。
Oracle for ODBC 驅動程序的安裝目錄是 /usr/share/oracle/11.2/client64。
3、有關 Oracle 客戶端的安裝,可以參考:
http://blog.itpub.net/81227/viewspace-2668066/
4、配置 Oracle 11gR2 的 ODBC:
root@server02:~# cd /usr/share/oracle/11.2/client64
root@server02:/usr/share/oracle/11.2/client64# ./odbc_update_ini.sh /
odbc_update_ini.sh 參數說明:
參數 1:unixODBC 安裝路徑。
參數 2:驅動安裝的絕對路徑(可選)。默認為運行腳本的路徑。
參數 3:驅動名(可選),默認為 Oracle 11g ODBC driver。
參數 4:數據源名稱(可選)。
運行完成后,將在 /etc/odbcinst.ini 文件中添加有關 Oracle for ODBC 的驅動程序配置信息,名稱為 Oracle 11g ODBC driver;同時,也會添加一個 DSN 條目到 $HOME/.odbc.ini 和 /etc/odbc.ini, 名稱為:OracleODBC-11g。
root@server02:/usr/share/oracle/11.2/client64# cat /etc/odbcinst.ini
[Oracle 11g ODBC driver]
Description = Oracle ODBC driver for Oracle 11g
# Driver = /usr/share/oracle/11.2/client64/libsqora.so.11.1
Driver = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
Setup =
FileUsage =
CPTimeout =
CPReuse =
驅動程序的動態庫配置錯誤,不是在 /usr/share 目錄下,而是在 /usr/lib 目錄下。
root@server02:/usr/share/oracle/11.2/client64# cat /etc/odbc.ini
[OracleODBC-11g]
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CloseCursor = F
DisableDPM = F
DisableMTS = T
Driver = Oracle 11g ODBC driver #對應 /etc/odbcinst.ini 中的驅動配置名稱
DSN = OracleDSN
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
Lobs = T
Longs = T
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName = OracleDATA #對應 tnsnames.ora 中配置的本地服務名
SQLGetData extensions = F
Translation DLL =
Translation ption = 0
DisableRULEHint = T
UserID =
配置完 ODBC 配置文件后,可以通過 isql 連接 Oracle 數據庫。
命令:isql 數據源名稱 用戶名 密碼 [-v]
下面講述一下在實際安裝過程中遇到的幾個問題。
問題 1:關于驅動程序 libsqora.so.11.1 的路徑問題。
默認安裝配置后,配置文件中的文件是在 /usr/share/oracle/11.2/client64 路徑下,可實際檢查在此目錄中并未發現此文件。
Driver = /usr/share/oracle/11.2/client64/libsqora.so.11.1
通過 find 命令查找,在 /usr/lib/oracle/11.2/client64/lib 目錄中發現此文件,故修改配置如下。
Driver = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
問題 2:初次執行 isql 命令,報“ORA-12162”和“ORA-12545”錯誤。
root@server02:~# isql OracleODBC-11g OracleUser OraclePassword -v
[S1000][unixODBC][Oracle][ODBC][Ora]ORA-12162: TNS:net service name is incorrectly specified
[ISQL]ERROR: Could not SQLConnect
查 Oracle 文檔,解釋為 Oracle 連接字符串不正確。
ORA-12162: TNS:net service name is incorrectly specified
Cause: The connect descriptor corresponding to the net service name in TNSNAMES.ORA or in the directory server (Oracle Internet Directory) is incorrectly specified.
Action: If using local naming make sure there are no syntax errors in the corresponding connect descriptor in the TNSNAMES.ORA file. If using directory naming check the information provided through the administration used for directory naming.
ORA-12162: TNS:net 服務名稱指定不正確
原因:與 TNSNAMES.ORA 或 Oracle 目錄服務器中的網絡服務名稱對應的連接描述符指定不正確。
操作:如果使用本地命名,請確保 TNSNAMES.ORA 文件中相應的連接描述符中沒有語法錯誤。如果使用目錄命名,請檢查通過用于目錄命名的管理提供的信息。
再仔細檢查 Oracle TNS 配置,未發現有配置錯誤。
再次上網查找,有講是“詭異的故障背后的原因竟然是那樣的基礎:ORACLE_SID 沒有指定!”。
確認系統當前的 ORACLE_HOME 和 ORACLE_SID 環境變量:
root@server02:~# echo $ORACLE_HOME
/usr/lib/oracle/11.2/client64
root@server02:~# echo $ORACLE_SID
可見,此時只設置了 ORACLE_HOME 環境變量,但 ORACLE_SID 此時為空,這是該問題的真實原因嗎?
一般來說,Oracle 客戶端是不需要設置 ORACLE_SID 環境變量的。
那就先試試看吧。
root@server02:~# export ORACLE_SID=orcl
root@server02:~# isql OracleODBC-11g OracleUser OraclePassword -v
[S1000][unixODBC][Oracle][ODBC][Ora]ORA-12545: Connect failed because target host or object does not exist
[ISQL]ERROR: Could not SQLConnect
一個“ORA-12162”問題剛解決,又來一個“ORA-12545”錯誤
ORA-12545: Connect failed because target host or object does not exist
Cause: The address specified is not valid, or the program being connected to does not exist.
Action: Ensure the ADDRESS parameters have been entered correctly; the most likely incorrect parameter is the node name. Ensure that the executable for the server exists (perhaps oracle is missing.) If the protocol is TCP/IP, edit the TNSNAMES.ORA file to change the host name to a numeric IP address and try again.
ORA-12545:連接失敗,因為目標主機或對象不存在
原因:指定的地址無效,或者連接的程序不存在。
操作:確保地址參數輸入正確;最有可能不正確的參數是節點名。確保服務器的可執行文件存在(可能是“Oracle”丟失)。如果協議是 TCP/IP,則編輯 TNSNAMES.ORA 文件,將主機名更改為數字 IP 地址,然后重試。
問題再次回到連接字符串上,指明問題原因是未指定連接字符串或連接字符串中的目標主機或對象不存在。
再次回到 ODBC 的配置上,發現了問題的根源,是系統安裝后會存在多個 ODBC 的 DSN 配置文件:/etc/odbc.ini(全局配置)和~/.odbc.ini(用戶配置),同名的 DataSource 造成了配置混亂。在修改 ODBC 數據源的配置時,直接在全局配置文件中修改了配置參數,并引用了原有的 DSN 名稱,造成了在全局配置文件 (配置是正確的) 和用戶配置文件 (配置錯誤,未指定 ServiceName 參數) 中的配置沖突,而優先級又是用戶配置高于全局配置,導致了 ODBC 的連接失敗。
改正配置參數后問題解決。
“Ubuntu16.04 下怎么安裝 Oracle 數據庫的 ODBC 驅動”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!