2010年4月9日金曜日

メインフレームLinuxでDB2(3) - DBADM権限の付与

前々回では、x86 linuxにDB2クライアントをインストールしました。zfedora(feodra11/s390x)上のDB2インスタンス(db2inst1)に接続する際には、インスタンスオーナーのユーザーIDとパスワードを使用したわけですが、今回はインスタンスオーナーではないユーザに"SAMPLE"データベースへDBADM権限を与えて、そのユーザーのIDとパスワードでデータベースに接続してみます。DBADM権限は、インスタンス内のあるデータベースに対するアクセス権で、インスタンスオーナーのSYSADM権限よりは限定された権限です。 DB2における特権・権限については、ここにまとめられています。

1. DBADM権限を与えるユーザーをzfedora上に作成する。
必要に応じてユーザーを作成します。今回はzfedora上にtestdbユーザーを作成しました。適宜パスワードも設定しておきます。
-bash-4.0# adduser testdb
-bash-4.0# passwd testdb
Changing password for user testdb.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2. testdbユーザーにDBADM権限を与える。
インスタンスオーナー(db2inst1)でzfedoraにログインし、SQLのGRANT文でtestdbユーザーにDBADM権限を与えます。
[db2inst1@zfedora ~]$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUXZ64 9.7.1
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

[db2inst1@zfedora ~]$ db2 "GRANT DBADM ON DATABASE TO USER testdb"
DB20000I  The SQL command completed successfully.
3. x86 Linuxからzfedora上の"sample"データベースに接続する。
"testdb"ユーザーで"SAMPLE"データベースに接続します。
[hercules@ce01 ~]$ db2 connect to sample user testdb using YYYYYYYY

   データベース接続情報

 データベース・サーバー                                   = DB2/LINUXZ64 9.7.1
 SQL 許可 ID                                              = TESTDB
 ローカル・データベース別名                               = SAMPLE
4. "SAMPLE"データベース内のdepartmentテーブルにSELECTを発行してみる。
[hercules@ce01 ~]$ db2 "SELECT COUNT(*) FROM department"
SQL0204N  "TESTDB.DEPARTMENT" は未定義の名前です。  SQLSTATE=42704
「"TESTDB.department"は未定義です」というエラーが表示されました。"TESTDB"が暗黙のスキーマ名として指定されているようです。"department"の代わりに、"DB2INST1.department"としてみると、SELECTの結果が戻されるようになりました。
[hercules@ce01 ~]$ db2 "SELECT COUNT(*) FROM DB2INST1.department" 

1
-----------
         14

  1 レコードが選択されました。
カレントスキーマを"DB2INST1"に変更します。
[hercules@ce01 ~]$ db2 "SET CURRENT SCHEMA='DB2INST1'"
DB20000I  SQL コマンドが正常に完了しました。
今度は、スキーマ名を指定しなくても"DB2INST1"スキーマのdepartmentテーブルに対するSELECTの結果が戻されました。
[hercules@ce01 ~]$ db2 "SELECT COUNT(*) FROM department"

1
-----------
         14

  1 レコードが選択されました。
今回は、インスタンスオーナー以外のユーザーにDBADM権限を与え、そのユーザーで"SAMPLE"データベースへの接続とSQLの発行を行ってみました。

2010年4月6日火曜日

メインフレームLinuxでDB2(2) - クライアントのインストール (Windows GUI)





前回は32bit/x86 LinuxのコマンドラインでDB2クライアントのインストール手順をメモ書きしました。今回は、Windows上のGUIで使用可能なDB2クライアントのインストール手順をメモっておくことにします。例によって、DB2クライアントをインストールするWindowsマシンは、母艦Linuxと同じLAN上にあり、fedora11/s390xに対してルーティング設定が行われているものとします。

1. 事前準備
前回同様IBMのサイトから、"IBM Data Server Client (Windows 32-bit AMD and Intel x86)"をダウンロードして、Windowsマシン上に展開しておきます。

2. セットアップウィザードの起動
展開後にできているCLIENTディレクトリから、image\setup.exeを実行します。"DB2 セットアップ・ランチパッド"の"ようこそ"画面が表示されたら、左側のペインから"製品のインストール"を選択し、表示された画面で"新規インストール"ボタンをクリックします。 "IBM Data Server Client バージョン 9.7のDB2セットアップ・ウィザードへようこそ"の画面(下図)が表示されたら、"次へ"をクリックします。

3. ウィザードに従ってインストール
ライセンス規約に同意し、以降デフォルト設定でインストールを完了します。
  • 「インストール・タイプ」:標準(デフォルト)
  • 「インストール、応答ファイルの作成、またはその両方の選択」:このコンピューターにData Server Clientをインストールし、設定を応答ファイルに保管する(デフォルト)
  • 「インストール・フォルダーの選択」:"C:\Program Files\IBM\SQLLIB" (デフォルト)
  • 「DB2オブジェクトのためにオペレーティング・システム・セキュリティーを使用可能にする」:デフォルト設定のまま変更なし
  • 「ファイルのコピーの開始およぶ応答ファイルの作成」:デフォルト設定のまま変更なし
  • 「追加の製品のインストール」:しない(デフォルト)
4.「DB2ファースト・ステップ」
クライアントのインストールが完了すると以下のように「プロファイルの作成」を促されます。

「プロファイルを作成する」をクリックすると、Webブラウザで「DB2ファースト・ステップ」が表示されますが、クライアント製品のセットアップの仕方がわからなかった(^^;)ので、今回はそのままブラウザの画面を閉じて、Windowsの「スタートメニュー」から「構成アシスタント」を起動することにします。

5. 構成アシスタントの起動
スタートメニューから、「IBM DB2」 -> 「DB2COPY1(デフォルト) 」 -> 「セットアップ・ツール」とメニューをたどり、「構成アシスタント」を起動します。 「ここでデータベースを追加しますか?」のメッセージが表示されますので、「はい」をクリックすると、「データベースの追加ウィザード」が起動します。

6. ウィザードのメニューに従ってデータベースを構成する
今回は以下のように構成しました。
  • 「接続のセットアップ方法を選択する」では、「データベースへの接続を手動で構成する」を選択。
  • 「通信プロトコルを選択する」では、「TCP/IP」を選択。 
  • 「TCP/IP通信パラメータを指定する」では、以下の図のように設定。

  • 「接続するデータベース名を指定する」では、データベース名に"sample"を指定。別名には、データベース名と同じものが自動的に入力されます。
  • 「このデータベースをデータ・ソースとして登録する」は、デフォルト設定のまま変更なし。
  • 「ノード・オプションを指定する」では、以下の図のように設定。

7. "SAMPLE"データベースへテスト接続する
「データベース'SAMPLE'の構成が正常に追加されました。」のメッセージが表示されたら、「テスト接続」をクリックすると、い科のようにユーザーIDとパスワードを要求されます。 正しく指定して、「テスト接続」をクリックし、「CLI接続は正常にテストされました。」と表示されれば、正しく構成されています。


8. コントロール・センターの起動
スタートメニューから、「IBM DB2」 -> 「DB2COPY1(デフォルト)」 ->「汎用管理ツール」とたどり、コントロール・センターを起動します。「コントロール・センターの表示方法」をたずねられたら、とりあえず「詳細」にしておくとよいと思います。

9. コントロール・センターをちょっとだけ触ってみる
コントロールセンターが表示されたら、左側のペインから「すべてのデータベース」->"SAMPLE"をクリックします。 データベースに接続する際のユーザーIDとパスワードを要求されます。「表」をクリックして、少し待つとテーブルの一覧を右側上段のペインで確認することができました。 

コントロール・センターからは他にもSQLを発行したりするなど、様々なことができるようです。

2010年4月2日金曜日

メインフレームLinuxでDB2(1) - クライアントのインストール (Linuxコマンドライン)

しばらく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サーバーに別のマシンから接続するための設定を行いました。