odbcinst:SQLGetPrivateProfileString失败,无法找到组件名称

时间:2017-11-13 15:44:59

标签: odbc unixodbc

我可以使用unixodbc而不会对我的默认用户造成任何问题。但是当我切换到另一个用户时,我收到了一个错误。

[centos@ ~]$ odbcinst -q -s
[ODBC]
[Amazon Redshift DSN 32]

[centos@ ~]$ su ruser
Password:
[ruser@ centos]$ odbcinst -q -s
odbcinst: SQLGetPrivateProfileString failed with Unable to find component name.

在两个用户中都设置了环境变量:

AMAZONREDSHIFTODBCINI=/etc/amazon.redshiftodbc.ini
ODBCSYSINI=/usr/local/odbc
ODBCINI=/etc/odbc.ini
LD_LIBRARY_PATH=/usr/local/lib
LD_PRELOAD=/usr/local/lib/libodbcinst.so

Odbc配置如下:

[ruser@ centos]$ odbcinst -j
unixODBC 2.3.4
DRIVERS............: /usr/local/odbc /odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/odbc /odbc.ini
FILE DATA SOURCES..: /usr/local/odbc /ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

顺便说一下,我不明白为什么上面的路径中有空格。我不知道是否有办法改变它们。有什么想法可以解决这个问题?两个用户的整体odbc配置似乎相同。

1 个答案:

答案 0 :(得分:0)

我在Centos上发现了完全相同的问题,在这里我可以使用默认的centos用户进行连接,而不能使用任何其他用户。

我能够通过将工作用户(或系统)odbc.iniodbcinst.ini文件复制到另一个用户的主目录中来解决此问题(我将其重命名为分别为.odbc.ini.odbcinst.ini

〜/ .odbc.ini

[MSSQLTest]
Driver = ODBC Driver 17 for SQL Server
Server = tcp:<ip of server>

〜/ .odbcinst.ini

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1

最后,我只需要在~/.bashrc文件中设置以下environment variables,就可以建立连接。

export ODBCSYSINI="<full path to user folder, which would be the evaluated path of {echo ~}>"
export ODBCINSTINI=".odbcinst.ini"
export ODBCINI="<full path to user folder, which would be the evaluated path of {echo ~}>/.odbc.ini"

由于某种原因,我无法使用~来引用用户文件夹,因此我不得不在环境变量中手动指定完整的用户路径,因此需要完整的.bashrc文件很简单:

export ODBCSYSINI="/home/mitch"
export ODBCINSTINI=".odbcinst.ini"
export ODBCINI="/home/mitch/.odbc.ini"

通过此设置,我现在可以运行以下命令并成功连接:

$ isql -v MSSQLTest <sql server username> <sql server password>
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>