64bit SQL ServerのSSISからPostgreSQLに接続

Pocket

SQL Server で他のMySQL や PostgreSQL など他のデータベースからデータを取得したい場合ありますよね

今回は SQL Server と PostgreSQL サーバーのデータのやり取りで発生した不具合についての備忘録

PostgreSQL Server とのデータのやり取りに SSIS を使っています

今までは32bit のサーバーで行っていたのですが、64bit になってから上手く動かない

ちなみに、SSIS で PostgreSQL からデータを取得する場合は、ADO.NET 接続で ODBC を経由して行います。

で、64bit サーバーに  http://www.geocities.jp/inocchichichi/psqlodbc/indexj.html の 64bit 版 ODBC ドライバを入れた。

システム DSN に接続先の PostgreSQL サーバーの DSN を hogeDB64bit として作成。

ADO.NET の ODBC 接続先に 先ほど作った DSN の hogeDB が表示されない。

ということで、32bit の odbc ドライバを http://www.postgresql.org/ftp/odbc/versions/msi/ からダウンロードしてきてインストール。

c:\windows\SysWOW64\odbcad32.exe を叩いて、システム DSN に hogeDB32bit として作成。

おぉ、ADO.NET の ODBC 接続先に hogeDB32bit が表示されました。

PostgreSQL のプロセスも確認していると SSIS から 検証の SELECT も実行されているようだし、上手くいったと思い、デバッグ実行!

むむぅ、エラーメッセージが表示される。

[DataReader ソース [1]] エラー : System.Data.Odbc.OdbcException: ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。
場所 Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManager90.AcquireConnection(Object pTransaction)
場所 Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter.AcquireConnections(Object transaction)
場所 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostAcquireConnections(IDTSManagedComponentWrapper90 wrapper, Object transaction)

と表示される。。。

どうやら、デバッグ実行すると上手くいかない。

で、32bit、64bit の DSN をどちらも hogeDB に変更したら上手くいきました!

どうやら、SSIS で作っているときは32bit で動作し、実際にプロジェクトを実行するときは64bitになっているぽい。

まぁ、どちらにしろ上手くいってよかったよかった。Oracle や MySQL などに ODBC 接続する場合も同様なことが起こる気がしますね。。。

でも、ソリューションエクスプローラーでパッケージのプロパティーを開き、
構成プロパティ->デバッグ->デバッグオプション->Run64BitRuntime を
False にすれば面倒なことしなくても動いたかもしれないなぁ・・・

コメントを残す