データプロバイダの準備
ホストOS側で「System.Data.Odbc」の実行環境を準備します。「IBM Data Server Client」および「unixODBC」の設定を行います。
IBM Data Server Clientのインストールについて
DB2 Express-Cと同様、いくつかのインストール方法が用意されています。IBM DB2 Database for Linux, UNIX, and Windows インフォメーション・センター内の「IBM データ・サーバー・クライアントのインストール (Linux および UNIX)」等を参考にして下さい。
Ubuntu(8.10、9.04)Desktop上で、「db2setup」コマンドを使用したインストールを行う場合、中身が何もないセットアップ画面が表示され、インストールを続行できない不具合が発生する場合があります。対処方法は次のとおりです。
- db2setupコマンド実行前に「視覚効果」を「効果なし」に変更
メニューバーから[システム]-[設定]-[外観の設定]を選択し、[視覚効果]タブ内の「効果なし」を選択する。
筆者の環境では上記対処後、db2setupコマンドを実行した場合、セットアップ画面内の文字が化けて表示されたので、「LANG=C」も設定して実行しました。また上記の対処はインストール時の一時的な対処で構いません。
$ sudo LANG=C ./db2setup
リモート・インスタンスの登録
ゲストOS上のDB2インスタンス情報をノードとしてカタログ(登録)する必要があります。IBM Data Server Clientのインストール課程で作成されるユーザー(db2inst1)でカタログ操作を行います。書式は次のとおりです。
db2 catalog tcpip node ノード名 remote [サーバー名|サーバーアドレス] server インスタンスのポート番号
$ su - db2inst1 $ db2 catalog tcpip node u904sv remote 192.168.1.5 server 50000
リモート・データベースの登録
ゲストOS上のDB2データベース情報をカタログ(登録)する必要があります。書式は次のとおりです。
db2 catalog database データベース名 at node 上記で登録したノード名
$ su - db2inst1 $ db2 catalog database testdata at node u904sv
db2コマンドを使用した接続確認が可能です。書式は次のとおりです。
db2 connect to 上記で登録したデータベース名 user ユーザー名 using パスワード
$ su - db2inst1 $ db2 connect to testdata user sta using password データベース接続情報 データベース・サーバー = DB2/LINUX 9.5.2 SQL 許可 ID = STA ローカル・データベース別名 = TESTDATA
db2cli.iniの設定
ODBCドライバが参照するデータベース情報を「/home/db2inst1/sqllib/cfg/db2cli.ini」に設定します。
... [TestData_DB2] dbalias=testdata CurrentSchema=EXAMPLE_SCM ...
unixODBC
unixODBCを導入すると、「libodbc.so.1」(ODBCドライバマネジャ)が「/usr/lib」にインストールされます。「System.Data.Odbc」はこのライブラリを通してODBCデータソースにアクセスすることになります。
「System.Data.Odbc」ではP/Invokeを使用して、ODBCドライバマネジャを呼び出している訳ですが、「/path/to/mono/etc/mono/config」(本稿では「/opt/mono/2.4/etc/mono/config」)で定義しているインポートライブラリの設定を修正する必要があります。
... <dllmap dll="i:odbc32.dll" target="libodbc.so.1" os="!windows"/> ...
また、DB2 CLI/ODBCドライバの定義を、DBアクセスを実行するユーザーの「~/.odbc.ini」(本稿では「/home/sta/.odbc.ini」)に設定します。
[TestData_DB2] Description = For DB2 Database TestData Driver = /home/db2inst1/sqllib/lib/libdb2.so
unixODBCに含まれるisqlコマンドを使用した接続確認が可能です。書式は次のとおりです。
isql データソース名 ユーザー名 パスワード
$ isql TestData_DB2 sta password +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from products +------------+--------------------------+----------+-----------------------------+ | PRODUCTID | PRODUCTNAME | PRICE | PRODUCTDESCRIPTION | +------------+--------------------------+----------+-----------------------------+ | 0 | DB2 | | DB2 Express-C 9.5.2 | | 1 | Clamp | 12.48 | Workbench clamp | | 50 | Flat Head Screwdriver | 3.17 | Flat head | | 75 | Tire Bar | | Tool for changing tires. | | 3000 | 3mm Bracket | 0.52 | | +------------+--------------------------+----------+-----------------------------+ SQLRowCount returns -1 5 rows fetched SQL> quit