无法在 Ubuntu 14.04 上建立 ODBC 连接

无法在 Ubuntu 14.04 上建立 ODBC 连接

我通常通过 CentOS 服务器访问 ODBC 连接,并且尝试在我的 Ubuntu Trusty 笔记本电脑上本地建立相同的连接。据我所知,我已经在两台机器上正确复制了所有内容,但就是无法正常工作。我曾在同一个网络上的一台旧笔记本电脑上运行过它,所以我认为我可以排除防火墙/路由/等问题。

当我尝试测试连接时,我得到:

me@T420:~/tmp$ iodbctest
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0709.0909

Enter ODBC connect string (? shows list): ?

DSN                              | Driver                                  
------------------------------------------------------------------------------
NZSQL_SERVER                    | NetezzaSQL                              

Enter ODBC connect string (? shows list): NZSQL_SERVER
1: SQLDriverConnect = ������ (33) SQLSTATE=
1: ODBC_Connect = ������ (33) SQLSTATE=

我的/etc/odbcinst.ini:

祝你有美好的一天。patrickmc@patrickmc-ThinkPad-T420:~/tmp$ cat /etc/odbcinst.ini

[ODBC Drivers]
NetezzaSQL = Installed

[NetezzaSQL]
Description = Netezza ODBC Driver
Driver = /usr/local/nz/lib64/libnzodbc.so
Setup = /usr/local/nz/lib64/libnzodbc.so
FileUsage = 1
APILevel = 1
ConnectFunctions = YYN
DriverODBCVer = 03.50
UnicodeTranslationOption = utf8
CharacterTranslationOption = all
PreFetch = 256
Socket = 8192
LogPath = /tmp
DebugLogging = false

[ODBC]
Trace = No

和我的 /etc/odbc.ini:

;
;  odbc.ini
;
[ODBC Data Sources]
NZSQL_SERVER = NetezzaSQL


[NZSQL_SERVER]
Driver                = /usr/local/nz/lib64/libnzodbc.so
Description           = NetezzaSQL ODBC
Servername            = db.mynetwork.net
Port                  = 5480
Database              = db_1
Username              = db_user
Password              = db_pass
ReadOnly              = false
ShowSystemTables      = true
LegacySQLTables       = false
LoginTimeout          = 0
QueryTimeout          = 0
DateFormat            = 1
NumericAsChar         = false
SQLBitOneZero         = false
StripCRLF             = false
securityLevel         = preferredUnSecured
caCertFile            =

答案1

在您的odbc.ini文件中,尝试更改此行:

Driver                = /usr/local/nz/lib64/libnzodbc.so

更改为:

Driver                = NetezzaSQL

看看是否有帮助。

更新:

我从未使用过iodbctest,但快速搜索表明您可能指定了错误的内容。以下是摘录自手册页:

$ iodbctest
OpenLink ODBC Demonstration program
This program shows an interactive SQL processor

Enter ODBC connect string (? shows list): ?

DSN                              | Driver
-----------------------------------------------------------------
ora9                             | OpenLink Generic ODBC Driver
mysql                            | OpenLink Generic ODBC Driver
mysqllite                        | OpenLink Lite for MySQL
myodbc                           | MyODBC Driver
pgsql                            | OpenLink Generic ODBC Driver
tds                              | OpenLink Generic ODBC Driver

Enter ODBC connect string (? shows list): DSN=ora9;PWD=tiger
Driver: 05.20.0316 OpenLink Generic ODBC Driver (oplodbc.so)

SQL>

看起来你需要指定连接字符串,而不仅仅是 DSN。

如果这不起作用,你应该尝试这些:

  • ls -l /usr/local/nz/lib64/libnzodbc.so检查司机

  • 确保您没有~/.odbc.ini文件或ODBCINI变量集

  • 尝试启用 DebugLogging ( odbcinst.ini) 和 Trace / TraceFile ( odbc.ini)

答案2

我的直觉是这两台机器之间存在库差异。

确保您只有一个 ODBC 驱动程序管理器(iODBC 就是您所描绘的;也可以安装 UnixODBC),至少在活动的 LD_LIBRARY_PATH 中。

如果这还不能解决问题,那么启用 ODBC 跟踪和/或驱动程序调试日志记录可能会带来更多信息。

目前看来,驱动程序返回的错误代码页与驱动程序管理器预期的代码页不同,因此您会看到几个“未知字符”字形。我们确实看到了错误编号 33,它对应于“服务器和/或端口属性为空”,尽管它们是在 DSN 中设置的,这表明可能存在其他环境问题($ODBCINI 是否设置?它是否指向 /etc/odbc.ini?)...

如果有疑问,可以看看Netezza 官方文档

相关内容