本篇內(nèi)容介紹了“Ubuntu16.04下怎么安裝Oracle數(shù)據(jù)庫(kù)的ODBC驅(qū)動(dòng)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)平邑,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
在Ubuntu 16.04下要連接遠(yuǎn)程的Oracle數(shù)據(jù)庫(kù),有多種方式,本文介紹通過(guò)ODBC方式來(lái)實(shí)現(xiàn)客戶端遠(yuǎn)程訪問(wèn)Oracle數(shù)據(jù)庫(kù)。
1、要通過(guò)ODBC方式連接遠(yuǎn)程數(shù)據(jù)庫(kù),客戶端需要有ODBC管理程序,在Linux系統(tǒng)下,可以用以下命令檢查ODBC的環(huán)境和配置:
(1)檢查系統(tǒng)是否安裝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管理程序,可用以下命令來(lái)安裝:
sudo apt-get install unixodbc
(2)檢查ODBC環(huán)境配置:
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
從配置環(huán)境來(lái)看,ODBC驅(qū)動(dòng)的配置文件是/etc/odbcinst.ini,系統(tǒng)DSN的配置文件是/etc/odbc.ini,文件DSN的配置文件是/etc/ODBCDataSources,而用戶DSN的配置文件則是$HOME/.odbc.ini。
2、下載并安裝oracle ODBC驅(qū)動(dòng)程序:
進(jìn)入官網(wǎng)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
進(jìn)行安裝
sudo alien -i oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
此處采用了rpm包來(lái)安裝Oracle for ODBC的驅(qū)動(dòng)程序,也可通過(guò)zip包來(lái)安裝。
Oracle for ODBC驅(qū)動(dòng)程序的安裝目錄是/usr/share/oracle/11.2/client64。
3、有關(guān)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參數(shù)說(shuō)明:
參數(shù)1:unixODBC安裝路徑。
參數(shù)2:驅(qū)動(dòng)安裝的絕對(duì)路徑(可選)。默認(rèn)為運(yùn)行腳本的路徑。
參數(shù)3:驅(qū)動(dòng)名(可選),默認(rèn)為Oracle 11g ODBC driver。
參數(shù)4:數(shù)據(jù)源名稱(可選)。
運(yùn)行完成后,將在/etc/odbcinst.ini文件中添加有關(guān)Oracle for ODBC的驅(qū)動(dòng)程序配置信息,名稱為Oracle 11g ODBC driver;同時(shí),也會(huì)添加一個(gè)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 =
驅(qū)動(dòng)程序的動(dòng)態(tài)庫(kù)配置錯(cuò)誤,不是在/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 #對(duì)應(yīng)/etc/odbcinst.ini中的驅(qū)動(dòng)配置名稱
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 #對(duì)應(yīng)tnsnames.ora中配置的本地服務(wù)名
SQLGetData extensions = F
Translation DLL =
Translation ption = 0
DisableRULEHint = T
UserID =
配置完ODBC配置文件后,可以通過(guò)isql連接Oracle數(shù)據(jù)庫(kù)。
命令:isql <數(shù)據(jù)源名稱> <用戶名> <密碼> [-v]
下面講述一下在實(shí)際安裝過(guò)程中遇到的幾個(gè)問(wèn)題。
問(wèn)題1:關(guān)于驅(qū)動(dòng)程序libsqora.so.11.1的路徑問(wèn)題。
默認(rèn)安裝配置后,配置文件中的文件是在/usr/share/oracle/11.2/client64路徑下,可實(shí)際檢查在此目錄中并未發(fā)現(xiàn)此文件。
Driver = /usr/share/oracle/11.2/client64/libsqora.so.11.1
通過(guò)find命令查找,在/usr/lib/oracle/11.2/client64/lib目錄中發(fā)現(xiàn)此文件,故修改配置如下。
Driver = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
問(wèn)題2:初次執(zhí)行isql命令,報(bào)“ORA-12162”和“ORA-12545”錯(cuò)誤。
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服務(wù)名稱指定不正確
原因:與TNSNAMES.ORA或Oracle目錄服務(wù)器中的網(wǎng)絡(luò)服務(wù)名稱對(duì)應(yīng)的連接描述符指定不正確。
操作:如果使用本地命名,請(qǐng)確保TNSNAMES.ORA文件中相應(yīng)的連接描述符中沒(méi)有語(yǔ)法錯(cuò)誤。如果使用目錄命名,請(qǐng)檢查通過(guò)用于目錄命名的管理提供的信息。
再仔細(xì)檢查Oracle TNS配置,未發(fā)現(xiàn)有配置錯(cuò)誤。
再次上網(wǎng)查找,有講是“詭異的故障背后的原因竟然是那樣的基礎(chǔ):ORACLE_SID沒(méi)有指定!”。
確認(rèn)系統(tǒng)當(dāng)前的ORACLE_HOME和ORACLE_SID環(huán)境變量:
root@server02:~# echo $ORACLE_HOME
/usr/lib/oracle/11.2/client64
root@server02:~# echo $ORACLE_SID
可見,此時(shí)只設(shè)置了ORACLE_HOME環(huán)境變量,但ORACLE_SID此時(shí)為空,這是該問(wèn)題的真實(shí)原因嗎?
一般來(lái)說(shuō),Oracle客戶端是不需要設(shè)置ORACLE_SID環(huán)境變量的。
那就先試試看吧。
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
一個(gè)“ORA-12162”問(wèn)題剛解決,又來(lái)一個(gè)“ORA-12545”錯(cuò)誤
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:連接失敗,因?yàn)槟繕?biāo)主機(jī)或?qū)ο蟛淮嬖?/p>
原因:指定的地址無(wú)效,或者連接的程序不存在。
操作:確保地址參數(shù)輸入正確;最有可能不正確的參數(shù)是節(jié)點(diǎn)名。確保服務(wù)器的可執(zhí)行文件存在(可能是“Oracle”丟失)。如果協(xié)議是TCP/IP,則編輯TNSNAMES.ORA文件,將主機(jī)名更改為數(shù)字IP地址,然后重試。
問(wèn)題再次回到連接字符串上,指明問(wèn)題原因是未指定連接字符串或連接字符串中的目標(biāo)主機(jī)或?qū)ο蟛淮嬖凇?/p>
再次回到ODBC的配置上,發(fā)現(xiàn)了問(wèn)題的根源,是系統(tǒng)安裝后會(huì)存在多個(gè)ODBC的DSN配置文件:/etc/odbc.ini(全局配置)和~/.odbc.ini(用戶配置),同名的DataSource造成了配置混亂。在修改ODBC數(shù)據(jù)源的配置時(shí),直接在全局配置文件中修改了配置參數(shù),并引用了原有的DSN名稱,造成了在全局配置文件(配置是正確的)和用戶配置文件(配置錯(cuò)誤,未指定ServiceName參數(shù))中的配置沖突,而優(yōu)先級(jí)又是用戶配置高于全局配置,導(dǎo)致了ODBC的連接失敗。
改正配置參數(shù)后問(wèn)題解決。
“Ubuntu16.04下怎么安裝Oracle數(shù)據(jù)庫(kù)的ODBC驅(qū)動(dòng)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!