从我们可以看到你正在使用的unixODBC和我相信“DSI”的错误是什么Vertica的自称为ODBC错误文本与在[]从左至右,仿佛各个组件的路径条目格式(见Example diagnostic messages )。
我认为这条消息应该是“No SQLGetPrivateprofileString could be found”。 SQLGetPrivateProfileString是由ODBC驱动程序管理器提供的用于读取odbc.ini文件中的条目的API。我相信它应在libodbcinst.so共享对象中找到然而,一些分布(例如,Ubuntu的/ Debian的)从共享对象条符号所以难以验证这一点。
在您的DSN中,驱动程序是文件“/opt/vertica/lib/libverticaodbc_unixodbc.so”。虽然它是更常见的名字在odbc.ini司机,并添加到ODBCINST.INI文件DSN你看起来确定的条目。例如:
/etc/odbcinst.ini:
[Easysoft ODBC-SQL Server SSL]
Driver=/usr/local/easysoft/sqlserver/lib/libessqlsrv.so
Setup=/usr/local/easysoft/sqlserver/lib/libessqlsrvS.so
Threading=0
FileUsage=1
DontDLClose=1
/etc/odbc.ini:
[SQLSERVER_SAMPLE_SSL]
Driver=Easysoft ODBC-SQL Server SSL
Description=Easysoft SQL Server ODBC driver
.
.
看到在上面的例子做这种方式,可以指定与像线程的驱动程序(和在网络上快速搜索建议Vertica的可使用线程= 1,这是如果限制较少相关的附加选项使用线程化程序)和DontDLClose。但是,正如我所说的,事情应该像现在一样运作。
现在下一点取决于你的平台,我没有注意到,如果你指定一个。您需要检查ODBC驱动程序的共享对象并查看它所依赖的内容。在Linux上,您可以这样做:
$ ldd /usr/local/easysoft/sqlserver/lib/libessqlsrv.so
linux-gate.so.1 => (0xb76ff000)
libodbcinst.so.1 => /usr/lib/libodbcinst.so.1 (0xb75fe000)
libesextra_r.so => /usr/local/easysoft/lib/libesextra_r.so (0xb75fb000)
libessupp_r.so => /usr/local/easysoft/lib/libessupp_r.so (0xb75de000)
libeslicshr_r.so => /usr/local/easysoft/lib/libeslicshr_r.so (0xb75cd000)
libestdscrypt.so => /usr/local/easysoft/lib/libestdscrypt.so (0xb75c8000)
libm.so.6 => /lib/libm.so.6 (0xb75a2000)
libc.so.6 => /lib/libc.so.6 (0xb7445000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb743b000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7421000)
/lib/ld-linux.so.2 (0xb7700000)
libdl.so.2 => /lib/libdl.so.2 (0xb741d000)
它显示此ODBC驱动程序取决于libodbcinst.so.1并且动态链接程序找到它。我认为您的Vertica驱动程序在这方面应该看起来很相似,但Vertica驱动程序有可能在首次加载时动态加载此共享对象本身。无论哪种方式,它看起来像Vertica的驱动程序无法找到象征SQLGetPrivateProfileString这是libodbcinst.so所以一定要确保一)你有libodbcinst.so B)您的动态链接器知道它(如何做到这一点取决于您的平台 - 在Linux看到它的/etc/ld.so.conf和LD_LIBRARY_PATH和ld.so的手册页)C)运行LDD(或同等学历),使没有缺失的依赖关系。
vertica.ini文件可能是驱动程序存储驱动程序特定配置的地方 - 有些驱动程序会这样做。如果此文件的格式是这样的ODBC那些上面它也可以使用SQLGetPrivateProfileString这个文件,你可以告诉ODBC API要使用的文件。
除此之外,我没有更多的想法,除了接触vertica。
您运行的是哪些版本的数据库驱动程序和Vertica?另外,我通常不会在我的ODBC连接中指定区域设置。你确定你需要它吗?这听起来像是一个比用户错误更多的本地化错误,但我可能是错的。 – bpanulla 2012-03-21 16:50:53
我删除它无济于事。我现在正在使用vertica_5.1.1_odbc_i386_linux vertica驱动程序。我追溯了isql语句,但它一直在搜索vertica.ini文件。有没有这样的文件?我真的好像找到它 – 2012-03-21 20:23:47