Ubuntu 16.04下安裝Oracle資料庫的ODBC驅動
在 16.04下要連線遠端的 資料庫,有多種方式,本文介紹透過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; *
* *
* 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驅動程式:
進入官網 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的連線失敗。
改正配置引數後問題解決。
注意:使用者DSN配置,優先於全域性系統DSN配置。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-2668511/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢資料庫odbc的安裝教程資料庫
- win10系統odbc驅動怎麼安裝_win10系統odbc驅動如何安裝Win10
- Ubuntu 16.04下安裝資料庫Oracle客戶端Ubuntu資料庫Oracle客戶端
- 「Oracle」Oracle 資料庫安裝Oracle資料庫
- Ubuntu安裝MySQL資料庫UbuntuMySql資料庫
- Ubuntu 16.04 安裝Nvidia驅動Ubuntu
- oracle rac資料庫的安裝Oracle資料庫
- [20181224]使用odbc連線oracle資料庫.txtOracle資料庫
- Oracle 資料庫打包安裝Oracle資料庫
- Ubuntu Nvidia driver驅動安裝及解除安裝Ubuntu
- Zabbix5.0 配置 ODBC 監控 Oracle 資料庫Oracle資料庫
- vgant 安裝oracle資料庫racOracle資料庫
- 在Docker中安裝PostgreSQL的ODBC驅動並新增Python測試程式碼DockerSQLPython
- 在Docker中安裝GaussDB的ODBC驅動並新增Python測試程式碼DockerPython
- Oracle 12c資料庫安裝Oracle資料庫
- Ubuntu 20.04.5安裝Solarflare網路卡Openonload驅動Ubuntu
- Ubuntu安裝完驅動後進不去介面Ubuntu
- oracle & mysql 驅動程式安裝配置OracleMySql
- Ubuntu18.04安裝/解除安裝NVIDIA顯示卡驅動Ubuntu
- ubuntu下安裝oracleUbuntuOracle
- ubuntu16.04安裝megaraid-9460-16i驅動(raid卡驅動)UbuntuAI
- 【YashanDB知識庫】ODBC驅動類問題定位方法
- Ubuntu安裝MySQL如何設定資料庫密碼UbuntuMySql資料庫密碼
- 靜默安裝Oracle11g資料庫Oracle資料庫
- 靜默安裝Oracle資料庫11gOracle資料庫
- 使用RPM安裝ORACLE-21c資料庫Oracle資料庫
- 使用RPM安裝ORACLE-19c資料庫Oracle資料庫
- oracle 11g 單例項資料庫的安裝Oracle單例資料庫
- Mybatis資料庫驅動MyBatis資料庫
- Oracle透過ODBC連線SQL Server資料庫後ORA-12514OracleSQLServer資料庫
- 成為MySQL DBA後,再看ORACLE資料庫(一、安裝與啟動)MySqlOracle資料庫
- Linux下ODBC安裝配置Linux
- Oracle 11G資料庫單例項安裝Oracle資料庫單例
- CentOS7 安裝Oracle12c資料庫CentOSOracle資料庫
- Maven Central上所有Oracle JDBC資料庫驅動程式 - Kuassi MensahMavenOracleJDBC資料庫
- 【問題覆盤】在Ubuntu 20.04下安裝OFED驅動Ubuntu
- 在Ubuntu 20.04中安裝Nvidia V100 GPU驅動UbuntuGPU
- ORACLE---Aix7.1 安裝Oracle11.2.0.4版本資料庫OracleAI資料庫