1. ホーム
  2. Database

unixODBC:データソース名が見つからない、デフォルトドライバが指定されていないに関する質問

2022-02-12 07:25:23
昨日もpostgresqlのMirroring Controller機能のテストに苦労しています。

まず、環境です。

OS platform: RHEL6 x86_64
unixODBC version: 2.3.1

unixODBC を使用して postgresql データベースに接続するとエラーが報告される。

SQLDriverConnect]を実行中に、ドライバから以下の診断結果が報告されました。

IM002:1:140733193388032:[unixODBC][Driver Manager] データソース名が見つからず、デフォルトドライバも指定されていません。

接続に失敗しました

非常にわかりにくく、インターネットで調べてから理解するのに時間がかかりました。
最初にエラーメッセージで検索します。
http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html

ODBCデータベース接続文字列が見つからないか、デフォルトのODBCドライバがインストールされていないとしてエラーを特定しました。

エラー発生時の私のodbc.iniの設定は以下の通りです。

[DB3]
Description = SymfowareServer
Driver = SymfoV12
Database = postgres
Servername = {primary,standby}
UserName = postgres
Password = postgres
Port = {26500,26501}
TargetServer = primary
SSLMode = verify-full
SSLServerCertCN=Common
ReadOnly = 0

[DB4]
Description = SymfowareServer
Driver = SymfoV12
Database = postgres
Servername = {standby,primary}
UserName = postgres
Password = postgres
Port = {26501,26500}
TargetServer = prefer_standby
SSLMode = verify-full
SSLServerCertCN=Common
ReadOnly = 0

odbcinst.iniの設定は以下の通りです。

[SymfoV12]
Description = ODBC for Symfoware Open V12.1.1
#Driver = /opt/symfoclient64/odbc/lib/psqlodbcw.so
# Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /opt/symfoclient64/odbc/lib/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
Threading = 2


unixODBCには、リンクをテストするためのコマンドが付属しています。

isql -v DB3

実行すると、プロンプトが表示されます。

[IM002][unixODBC][Driver Manager] データソース名が見つからず、デフォルトドライバも指定されていません。

[ISQL]ERROR: SQLConnect できませんでした。

まず、postgresqlのドライバpsqlodbcがインストールされているかどうかを確認したところ...。

インストールされてないなんて!!!!

そこで、psqlodbcをインストールします。この時点の最新バージョンはpsqlodbc-09.05.0400です。

#tar zxvf psqlodbc-09.05.0400.tar.gz
#cd psqlodbc-09.05.0400
#. /configure --with-unixodbc --with-libpq=/usr/local/pgsql  
#make 
#make install

インストールに成功し、デフォルトのドライバが /usr/local/lib/psqlodbcw.so の下に配置されました。
インストール後、テストを続けますが、まだエラーが出ます!!!。
引き続き、Baiduで、以下を参照してください。

http://china.ygw.blog.163.com/blog/static/687197462013418101335419/

半日ほど探して、ようやく問題が判明しました。環境変数が正しく設定されておらず、設定ファイルが見つからないことが判明しました。以前は正しく設定されていたのですが、unixODBCのディレクトリ名を変更したため、設定ファイルが見つからなくなってしまったのです。odbcinst -j コマンドを実行することで、現在の設定情報の状態を確認し、該当する設定情報のパスが正しいかどうか確認することができます。

私の設定は以下の通りです。

unixODBC 2.3.1
DRIVERS ............ : /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES... : /usr/local/etc/ODBCDataSources
USER DATA SOURCES... : /root/.odbc.ini
SQLULEN Size ....... : 8
SQLLEN Size ........ : 8
SQLSETPOSIROW Size.: 8

ODBCINIとODBCSYSINI環境変数を設定し直すだけです。
ODBCINIにはodbc.iniのファイルパスのフルネーム、ODBCSYSINIには設定ファイルのパスが設定されていますが、私の設定は以下の通りですので参考にしてください。

export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc

isqlで再度テスト。

isql -v DB3

<イグ

すべてOKです。

取得元:https://www.cnblogs.com/flying-tiger/p/5950600.html