还是昨天测试postgresql的有关Mirroring Controller的功能时出的问题(真TM是个坑)。

首先说下环境:

  1. 操作系统平台:RHEL6 x86_64
  2. 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配置如下

  1. [DB3]
  2. Description = SymfowareServer
  3. Driver = SymfoV12
  4. Database = postgres
  5. Servername = {primary,standby}
  6. UserName = postgres
  7. Password = postgres
  8. Port = {26500,26501}
  9. TargetServer = primary
  10. SSLMode = verify-full
  11. SSLServerCertCN=Common
  12. ReadOnly = 0
  13. [DB4]
  14. Description = SymfowareServer
  15. Driver = SymfoV12
  16. Database = postgres
  17. Servername = {standby,primary}
  18. UserName = postgres
  19. Password = postgres
  20. Port = {26501,26500}
  21. TargetServer = prefer_standby
  22. SSLMode = verify-full
  23. SSLServerCertCN=Common
  24. ReadOnly = 0

odbcinst.ini配置如下:

  1. [SymfoV12]
  2. Description = ODBC for Symfoware Open V12.1.1
  3. #Driver = /opt/symfoclient64/odbc/lib/psqlodbcw.so
  4. # Setup = /usr/lib/libodbcpsqlS.so
  5. Driver64 = /opt/symfoclient64/odbc/lib/psqlodbcw.so
  6. Setup64 = /usr/lib64/libodbcpsqlS.so
  7. FileUsage = 1
  8. 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

  1. #tar zxvf psqlodbc-09.05.0400.tar.gz
  2. #cd psqlodbc-09.05.0400
  3. #./configure --with-unixodbc --with-libpq=/usr/local/pgsql
  4. #make
  5. #make install

安装成功,默认驱动放在/usr/local/lib/psqlodbcw.so下。
安装完以后,继续测试,居然还报错!!!!
继续百度,参考下文:

http://china.ygw.blog.163.com/blog/static/687197462013418101335419/

找了半天,终于发现问题,原来是环境变量未正确配置,系统找不到配置文件。本来之前是正确的,后来我修改了unixODBC的目录名称,导致找不到了,通过执行odbcinst -j命令可以查看当前配置信息情况,以确认相关配置信息的路径是否正确。

我的配置如下:

  1. unixODBC 2.3.1
  2. DRIVERS............: /usr/local/etc/odbcinst.ini
  3. SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
  4. FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
  5. USER DATA SOURCES..: /root/.odbc.ini
  6. SQLULEN Size.......: 8
  7. SQLLEN Size........: 8
  8. SQLSETPOSIROW Size.: 8

重新配置ODBCINI及ODBCSYSINI两个环境变量即可。
其中,ODBCINI设置为odbc.ini的文件路径全名,ODBCSYSINI配置为配置文件路径,参照我的配置内容如下:

  1. export ODBCINI=/usr/local/etc/odbc.ini
  2. export ODBCSYSINI=/usr/local/etc

再次使用isql测试:

isql -v DB3

579102-20161012105248468-841387592.png

一切OK。

转载于:https://www.cnblogs.com/flying-tiger/p/5950600.html

发表评论

邮箱地址不会被公开。 必填项已用*标注