我通常通过 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 官方文档!