還是昨天測試postgresql的有關Mirroring Controller的功能時出的問題(真TM是個坑)。
首先說下環境:
操作系統平台:RHEL6 x86_64
unixODBC版本:2.3.1
在使用unixODBC連接postgresql數據庫的時候報錯:
The driver reported the following diagnostics whilst running [SQLDriverConnect]
IM002:1:140733193388032:[unixODBC][Driver Manager]Data source name not found, and no default driver specified
Failed to connect
非常費解,查看網上的資料,弄了好一會才搞清楚。
首先根據錯誤消息搜索:
http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html
查明錯誤原因是ODBC數據庫連接字符串沒找到或者ODBC默認的驅動沒有裝。
發生錯誤時我的odbc.ini配置如下
[DB3]
Description = SymfowareServer
Driver = SymfoV12
Database = postgres
Servername = {primary,standby}
UserName = postgres
Password = postgres
Port = {26500,26501}
TargetServer = primary
SSLMode = verify-full
SSLServerCertCN=Common
ReadOnly = 0
[DB4]
Description = SymfowareServer
Driver = SymfoV12
Database = postgres
Servername = {standby,primary}
UserName = postgres
Password = postgres
Port = {26501,26500}
TargetServer = prefer_standby
SSLMode = verify-full
SSLServerCertCN=Common
ReadOnly = 0
odbcinst.ini配置如下:
[SymfoV12]
Description = ODBC for Symfoware Open V12.1.1
#Driver = /opt/symfoclient64/odbc/lib/psqlodbcw.so
# Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /opt/symfoclient64/odbc/lib/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
Threading = 2
unixODBC自帶測試鏈接的命令
isql -v DB3
運行后,提示:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
我先檢查了下postgresql的驅動psqlodbc有沒有安裝...
居然沒有安裝!!!
於是安裝上psqlodbc,此時最新的版本是psqlodbc-09.05.0400
#tar zxvf psqlodbc-09.05.0400.tar.gz
#cd psqlodbc-09.05.0400
#./configure --with-unixodbc --with-libpq=/usr/local/pgsql
#make
#make install
安裝成功,默認驅動放在/usr/local/lib/psqlodbcw.so下。
安裝完以后,繼續測試,居然還報錯!!!!
繼續百度,參考下文:
http://china.ygw.blog.163.com/blog/static/687197462013418101335419/
找了半天,終於發現問題,原來是環境變量未正確配置,系統找不到配置文件。本來之前是正確的,后來我修改了unixODBC的目錄名稱,導致找不到了,通過執行odbcinst -j命令可以查看當前配置信息情況,以確認相關配置信息的路徑是否正確。
我的配置如下:
unixODBC 2.3.1
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
重新配置ODBCINI及ODBCSYSINI兩個環境變量即可。
其中,ODBCINI設置為odbc.ini的文件路徑全名,ODBCSYSINI配置為配置文件路徑,參照我的配置內容如下:
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
再次使用isql測試:
isql -v DB3
一切OK。