しばらくDB2の勉強もかねてメモ書きしていこうと思うので、タイトルを変えてみました。
前回までで、fedora11/s390x上でDB2が動作するようになりました。今回はDB2サーバーが動作するfedora11/s390xとは別のマシンからDB2データベースに接続してSQLを発行できるような環境を作りたいと思います。
fedora11/s390xを動作させている環境では、母艦Linuxと同じLAN上にx86のCentOS (v5.4, 32bit)がいますので、そこにDB2クライアントをインストールすることにします。
1. クライアントパッケージのダウンロード
まず、"IBM DataServer Client"パッケージを
IBMのサイトの"Additional Functionality and Powerful Tools"の"DB2 Client"からダウンロード(要登録)して、クライアントマシン上に置き、tarで展開します。
[root@ce01 ~]# tar zxf ibm_data_server_client_linuxia32_v97.tar.gz
展開すると"client"ディレクトリができています。その中にある、"db2_install"をrootユーザーで以下のように実行します。
[root@ce01 client]# ./db2_install -p client -c /root/client/nlpack -L JP
製品のインストール用のデフォルト・ディレクトリー - /opt/ibm/db2/V9.7
***********************************************************
別のディレクトリーを選択してインストールしますか [yes/no] ?
no
DB2 インストールを初期化しています。
実行されるタスクの合計数: 32
実行される全タスクの合計見積もり時間: 729
タスク #1 を開始します。
説明: ご使用条件受諾のチェック
見積もり時間 1 秒
タスク #1 が終了しました。
タスク #2 を開始します。
説明: root 特権を使用したインストールのための基本クライアント・サポート
見積もり時間 3 秒
タスク #2 が終了しました。
...
タスク #32 を開始します。
説明: グローバル・プロファイル・レジストリーの更新
見積もり時間 3 秒
タスク #32 が終了しました。
正常に実行が完了しました。
詳しくは、「/tmp/db2_install.log.14083」にある DB2
インストール・ログを参照してください。
2. クライアント・インスタンスの作成
インストールが完了したら、クライアント・インスタンスを作成します(データベースサーバーを動作させない場合でもインスタンスの作成が必要)。 クライアント・インスタンスのインスタンス・オーナー・ユーザーは、heruclesユーザーとしています。ユーザー名は8文字以下にする必要があるようです。
[root@ce01 ~]# /opt/ibm/db2/V9.7/instance/db2icrt -s client hercules
3. /etc/hostsの編集とルーティングの設定
次に、クライアントマシンの/etc/hostsにzfedora(192.168.200.3)を登録して、ルーティング設定も行っておきます(10.1.2.3は母艦LinuxのIPアドレス)。
[root@ce01 ~]# grep zfedora /etc/hosts
192.168.200.3 zfedora
[root@ce01 ~]# route add -host 192.168.200.3 gw 10.1.2.3
pingなどして、クライアントマシンとfedora11/s390xとが通信できることを確認したら、herculesユーザーでクライアントマシンにログインします。ホームディレクトリに、"sqllib"ディレクトリができています。
[hercules@ce01 ~]$ ls -ltr
合計 4
drwxrwsr-t 14 hercules hercules 4096 3月 31 21:15 sqllib
4. データベースノードのカタログ
DB2サーバー(データベースノード)をカタログします。"node"の後ろのノード名("db2serv1")は適当につけました。 "50000"は、DB2サーバー上で動作しているdb2inst1インスタンスが接続を待つポート番号です。ポート番号は、DB2サーバー上で"db2 get dbm cfg"を実行し、"TCP/IP Service name"で表示されるサービス名をキーにして、/etc/servicesを調べるとわかると思います。
[hercules@ce01 ~]$ db2 catalog tcpip node db2serv1 remote zfedora server 50000
DB20000I CATALOG TCPIP NODE コマンドが正常に完了しました。
DB21056W ディレクトリーの変更は、ディレクトリー・キャッシュがリフレッシュされるまで反映されません。
"db2 list node directory"コマンドでカタログされているノードを確認できます。
[hercules@ce01 ~]$ db2 list node directory
ノード・ディレクトリー
ディレクトリー中の項目数 = 1
ノード 1 項目:
ノード名 = DB2SERV1
コメント =
ディレクトリー項目タイプ = LOCAL
プロトコル = TCPIP
ホスト名 = zfedora
サービス名 = 50000
4. "SAMPLE"データベースのカタログ
ノードの次は、データベースをカタログします。 今回は、以前に作成した"SAMPLE"データベースをカタログすることにします。 "at node"の後ろには、ノードのカタログ時に指定したノード名(今回の例では"db2serv1")を指定します。
[hercules@ce01 ~]$ db2 catalog database sample at node db2serv1
DB20000I CATALOG DATABASE コマンドが正常に完了しました。
DB21056W ディレクトリーの変更は、ディレクトリー・キャッシュがリフレッシュされるまで反映されません。
"db2 list db directory"コマンドでカタログされているデータベースを確認できます。
[hercules@ce01 ~]$ db2 list db directory
システム・データベース・ディレクトリー
ディレクトリー中の項目数 = 1
データベース 1 項目:
データベース別名 = SAMPLE
データベース名 = SAMPLE
ノード名 = DB2SERV1
データベース・リリース・レベル = d.00
コメント =
ディレクトリー項目タイプ = リモート
カタログ・データベース・パーティション番号 = -1
代替サーバー・ホスト名 =
代替サーバーのポート番号 =
5. "SAMPLE"データベースに接続する
データベースに接続してみます。 "user"は"db2inst1"ユーザー(インスタンスオーナー), "using"にはDB2サーバーのインストール時に指定した、"db2inst1"ユーザーのパスワードを指定します。
[hercules@ce01 ~]$ db2 connect to sample user db2inst1 using XXXXXXXX
データベース接続情報
データベース・サーバー = DB2/LINUXZ64 9.7.1
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = SAMPLE
6. SQLの発行
SQLも発行してみます。
[hercules@ce01 ~]$ db2 "select id,name,dept from staff"
ID NAME DEPT
------ --------- ------
10 Sanders 20
20 Pernal 20
30 Marenghi 38
40 O'Brien 38
50 Hanes 15
60 Quigley 38
70 Rothman 15
80 James 20
90 Koonitz 42
100 Plotz 42
110 Ngan 15
120 Naughton 38
130 Yamaguchi 42
140 Fraye 51
150 Williams 51
160 Molinare 10
170 Kermisch 15
180 Abrahams 38
190 Sneider 20
200 Scoutten 42
210 Lu 10
220 Smith 51
230 Lundquist 51
240 Daniels 10
250 Wheeler 51
260 Jones 10
270 Lea 66
280 Wilson 66
290 Quill 84
300 Davis 84
310 Graham 66
320 Gonzales 66
330 Burke 66
340 Edwards 84
350 Gafney 84
35 レコードが選択されました。
接続を解除するには、"db2 terminate"を発行します。
[hercules@ce01 ~]$ db2 terminate
DB20000I TERMINATE コマンドが正常に完了しました。
今回は、fedora11/s390x上で動作するDB2サーバーに別のマシンから接続するための設定を行いました。