2012-03-19 92 views
9

您好我已经在Ubuntu 10.10 32位版本机器上为vertica配置了DSN设置。 设置都很好,我已经交叉检查它们。unixODBC在运行isql时给出错误[Vertica]

这里是我的odbc.ini文件:

[VerticaDSN] 
    Description = VerticaDSN ODBC driver 
    Driver = /opt/vertica/lib/libverticaodbc_unixodbc.so 
    Servername = myservername 
    Database = mydbname 
    Port = 5433 
    UserName = myuname 
    Password = ******* 
    Locale = en_US 

同样地,我有一个ODBCINST.INI文件。

当我运行命令:ISQL -v VerticaDSN我得到以下错误:

[S1000][unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists. 
[ISQL]ERROR: Could not SQLConnect. 

我已经试过一切,但我不能破译这个错误。

任何帮助将不胜感激。

+0

您运行的是哪些版本的数据库驱动程序和Vertica?另外,我通常不会在我的ODBC连接中指定区域设置。你确定你需要它吗?这听起来像是一个比用户错误更多的本地化错误,但我可能是错的。 – bpanulla 2012-03-21 16:50:53

+0

我删除它无济于事。我现在正在使用vertica_5.1.1_odbc_i386_linux vertica驱动程序。我追溯了isql语句,但它一直在搜索vertica.ini文件。有没有这样的文件?我真的好像找到它 – 2012-03-21 20:23:47

回答

14

您可能会缺少驱动程序配置部分。编辑或创建包含以下内容的文件/etc/vertica.ini:

[Driver] 
DriverManagerEncoding=UTF-16 
ODBCInstLib=/usr/lib64/libodbcinst.so 
ErrorMessagesPath=/opt/vertica/lib64 
LogLevel=4 
LogPath=/tmp 

更多信息,请Vertica的程序员指南中的“其他驱动程序设置的位置”中找到。

+0

是的,在我的情况下,这是确切的问题 – 2013-03-25 16:01:28

+0

谢谢!这是直截了当的。 – MohamedEzz 2013-05-08 23:07:13

1

从我们可以看到你正在使用的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。

2

在互联网上搜索这个问题我已经看到很多人已经能够与tsql连接,但不能与isql或osql(使用isql)连接。我有这个相同的问题,一直在研究和测试上周试图找出问题所在。事情是每个人都从ODBC的角度接近它,当我认为它是与Windows服务器或SQL服务器配置有关。我检查了Windows服务器上的日志,看到运行ODBC的计算机已经命中并尝试重复登录,但一直未能。在事件查看器中,有大量条目显示相同的事情,即客户端机器正在尝试登录到SQL Server,但被主机拒绝。这是我现在关注的角度,以及我认为问题在哪里。如果我得到这个解决方案,我会再次发布让每个人都知道我发现了什么问题。

谢谢,

+0

谢谢玛格丽特,它真的很感激 – 2012-09-05 17:40:47

相关问题