[lab [lab 3 333]]]] oracleoracle からのデータベース …3 1. はじめに...

35
[Lab [Lab [Lab [Lab 3] Oracle Oracle Oracle Oracle からのデータベース からのデータベース からのデータベース からのデータベース 移行 移行 移行 移行

Upload: others

Post on 27-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

[Lab [Lab [Lab [Lab 3333]]]]

OracleOracleOracleOracle からのデータベースからのデータベースからのデータベースからのデータベース

移行移行移行移行

2

Contents

CONTENTS .......................................................................................................... 2

1. はじめにはじめにはじめにはじめに ........................................................................................................ 3

2. データベース作成データベース作成データベース作成データベース作成 .......................................................................................... 3

2.1 Oracle 互換機能の有効化 ......................................................................... 3

2.2 データベースパスのディレクトリー作成 ................................................. 4

2.3 データベース LABDB を作成 ...................................................................... 6

2.4 作成したデータベースの確認 ................................................................... 7

3. IBM DATA MOVEMENT TOOL で作成されたで作成されたで作成されたで作成された DDL ...................................... 9

3.1 コマンドや構成ファイル .......................................................................... 9

3.2 オブジェクト作成のスクリプト ............................................................. 11

3.3 データ投入のためのスクリプト ............................................................. 11

3.4 PL/SQLのロジックを含むオブジェクトを作成するスクリプト ............ 12

3.5 その他のファイル................................................................................... 12

4. オブジェクト作成オブジェクト作成オブジェクト作成オブジェクト作成 ........................................................................................ 14

4.1 IBM Data Movement Toolによるオブジェクト作成............................... 14

4.2 スクリプトによるオブジェクト作成 ...................................................... 18

5. データ移行データ移行データ移行データ移行 ................................................................................................... 25

5.1 データの LOAD ......................................................................................... 25

5.2 整合性チェック ...................................................................................... 26

5.3 統計情報の収集 ...................................................................................... 28

6.6.6.6. CLPPLUSCLPPLUSCLPPLUSCLPPLUS ..................................................................................................... 29

6.1 CLPPlusの開始 ...................................................................................... 29

6.2 CLPPlusを使用した SQLの実行 ........................................................... 30

3

1. はじめにはじめにはじめにはじめに

このハンズオンでは、Oracle データベースのオブジェクトを、DB2V9.7 のデータベースに作

成し、データ移行を行います。

本ハンズオンは以下のタスクを含みます。

� Oracle から移行するデータベースを作成する

� IBM Data Movement Tool で抽出した DDL ファイルを確認する

� 物理設計に沿って DDL ファイルを編集する

� IBM Data Movement Tool で、Interactive deployment を実行する

� スクリプトで DB オブジェクトを作成する

なお、この章のハンズオンは、db2inst1 で OSOSOSOS ににににログインしてください。rrrrootootootoot ユーザーなどユーザーなどユーザーなどユーザーなど

でログインしている場合は、一度ログオフし、再度入りなおしてください。でログインしている場合は、一度ログオフし、再度入りなおしてください。でログインしている場合は、一度ログオフし、再度入りなおしてください。でログインしている場合は、一度ログオフし、再度入りなおしてください。

_仮想マシンに以下のユーザーでログイン (コンソールでの su – ではなく、VMware 上の

OS 画面にて、root からログオフし、db2inst1 でログインし直します。)

User:User:User:User: db2db2db2db2inst1inst1inst1inst1

Password:Password:Password:Password: db2inst1db2inst1db2inst1db2inst1

2. データベース作成データベース作成データベース作成データベース作成

この章では、DB2 のデータベースに、Oracle から移行したオブジェクトを作成します。

� インスタンス名:db2inst1 データベース名:LABDB

� DB2V9.7 の Oracle 互換機能 (DB2_COMPATIBILITY_VECTOR) を使用

� データベースは自動ストレージ機能を使用

2.1 OracleOracleOracleOracle 互換機能の有効化互換機能の有効化互換機能の有効化互換機能の有効化

_1.以下の 2 つのレジストリー変数を設定して、Oracle 互換機能を有効にします。

� DB2_COMPATIBILITY_VECTOR

4

� DB2_DEFERRED_PREPARE_SEMANTICS

上記のレジストリー変数を以下の手順で設定してください。

a. 現在の設定値を db2set コマンドで確認 既に設定されている場合は、この設定手順

は必要ありません。次項に進んでください。

$db2set

b. db2set コマンドでレジストリー変数を設定

$db2set DB2_COMPATIBILITY_VECTOR=ORA

$db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

c. 変更後の設定値を db2set コマンドで取得

$db2set

d. 設定を有効にするために、DB2 インスタンスを再起動

$db2stop force

$db2start

実行例

2.22.22.22.2 データベースパスのディレクトリーデータベースパスのディレクトリーデータベースパスのディレクトリーデータベースパスのディレクトリー作成作成作成作成

データベースのストレージは、データベースが作成される前に、作成してある必要がありま

す。この環境では既にディレクトリーを作成してありますので、ディレクトリーが存在するか

どうか確認してください。

_2.データベースのディレクトリー確認

_データベース・ディレクトリー:/db2system

_表スペースディレクトリー

db2inst1@DB2V97onSLES10:/workshop/lab3> db2set DB2COMM=TCPIP db2inst1@DB2V97onSLES10:/workshop/lab3> db2set DB2_COMPATIBILITY_VECTOR=ORA db2inst1@DB2V97onSLES10:/workshop/lab3> db2set DB2_DEFERRED_PREPARE_SEMANTICS =YES db2inst1@DB2V97onSLES10:/workshop/lab3> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES DB2_COMPATIBILITY_VECTOR=ORA DB2COMM=TCPIP db2inst1@DB2V97onSLES10:/workshop/lab3> db2stop force

SQL1064N DB2STOP の処理が正常に終了しました。 db2inst1@DB2V97onSLES10:/workshop/lab3> db2start

09/05/2009 06:50:04 0 0 SQL1063N DB2START の処理が正常に終了しました。

SQL1063N DB2START の処理が正常に終了しました。

5

/db2data1

/db2data2

/db2data3

/db2data4

_ディレクトリーの確認

$cd /

$ls –l | grep db2

確認例

db2inst1@DB2V97onSLES10:/ > ls -l | grep db2 drwxr-xr-x 3 db2inst1 root 72 Sep 8 23:52 db2 drwxr-xr-x 2 db2inst1 root 48 Sep 9 05:31 db2data1 drwxr-xr-x 2 db2inst1 root 48 Sep 9 05:31 db2data2 drwxr-xr-x 2 db2inst1 root 48 Sep 9 05:31 db2data3 drwxr-xr-x 2 db2inst1 root 48 Sep 9 05:31 db2data4 drwxr-xr-x 2 db2inst1 root 48 Sep 9 05:31 db2system drwxr-xr-x 12 db2inst1 root 344 Sep 8 23:57 workshop

6

2.32.32.32.3 データベースデータベースデータベースデータベース LABDBLABDBLABDBLABDB を作成を作成を作成を作成

IBM Optim Data Studio Administrator を使用して GUI でデータベースを作成することが

出来ます。または、CLP を使用して SQL ステートメントやスクリプトを実行することでデ

ータベースを作成することも出来ます。

_3.前ステップで作成したディレクトリーに“LABDB”という名前のデータベースを作成し

ます。DB 作成にあたっては、デフォルトのページサイズ 32 KB と自動ストレージ機能を

使用します。

データベースの作成のステートメントは以下になります。

CREATE DB LABDB AUTOMATIC STORAGE YES

ON /db2data1,

/db2data2,

/db2data3,

/db2data4

DBPATH ON /db2

PAGESIZE 32 K;

上記のステートメントは、/workshop/lab3 ディレクトリーに”01.CreateDatabase.clp”とい

う名前のスクリプトが用意してあります。スクリプトを以下のように、db2 –tvf コマンドで

実行することが出来ます。

_/workshop/lab3 ディレクトリーに移動

$cd /workshop/lab3

_データベース作成スクリプトの内容を確認

$cat 01.CreateDatabase.clp

_データベース作成スクリプトを実行

$db2 –tvf 01.CreateDatabase.clp

db2inst1@DB2V97onSLES10:~> cd /workshop/lab3 db2inst1@DB2V97onSLES10:/workshop/lab3> cat 01.CreateDatabase.clp CREATE DB LABDB AUTOMATIC STORAGE YES ON /db2data1, /db2data2, /db2data3, /db2data4 DBPATH ON /db2 PAGESIZE 32 K; db2inst1@DB2V97onSLES10:/workshop/lab3> db2 -tvf 01.CreateDatabase.clp CREATE DB LABDB AUTOMATIC STORAGE YES ON /db2data1, /db2data2, /db2data3, /db2data4 DBPATH ON /db2 PAGESIZE 32 K

DB20000I CREATE DATABASE コマンドが正常に完了しました。

7

2.42.42.42.4 作成したデータベースの確認作成したデータベースの確認作成したデータベースの確認作成したデータベースの確認

データベース作成が成功したことを、いくつかの方法で確認することが出来ます。

<データベースへの接続>

データベースへの接続はインスタンスオーナーで接続します。

_4. LABDB へ接続し、DUAL 表から SYSDATE を SELECT する

$db2 connect to labdb

$db2 select sysdate from dual

$db2 connect reset

実行例

<ローカル・データベース・ディレクトリーの確認>

ローカル・データベース・ディレクトリーは、データベース名、エイリアス、データベース・

パスなどの情報のエントリーです。このエントリーは、アプリケーションから接続するとき

に指定するエントリーになります。データベース・ディレクトリーの内容を表示するために

は、以下のコマンドを実行します。

$db2 list db directory

_5. ローカル・データベース・ディレクトリーを確認し、以下を記入してください

データベース別名 ________________________________________________________________________

データベース・ディレクトリー___________________________________________________________________

ディレクトリー項目タイプ_________________________________________________________________________

db2inst1@DB2V97onSLES10:/workshop/lab3> db2 connect to labdb

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0

SQL 許可 ID = DB2INST1

ローカル・データベース別名 = LABDB db2inst1@DB2V97onSLES10:/workshop/lab3> db2 select sysdate from dual 1 ------------------- 2009-09-09-05.40.41

1 レコードが選択されました。 db2inst1@DB2V97onSLES10:/workshop/lab3> db2 connect reset

DB20000I SQL コマンドが正常に完了しました。

8

実行例

<データベース構成パラメーターの確認>

DB2V9.7 では Oracle 互換機能に関連した 3 つのデータベース構成パラメーターが提

供されています。構成パラメーターは、NUMBER,VARCHAR2,DATE の新しいデータタイ

プを制御します。

_6. 作成した LABDB で Oracle 互換の構成パラメーターを確認

データベース構成パラメーターの現在の設定を確認するためには、以下のコマンドを実

行します。

$db2 get db cfg for LABDB

実行例

db2inst1@DB2V97onSLES10:/workshop/lab3> db2 list db directory

システム・データベース・ディレクトリー

ディレクトリー中の項目数 = 1

データベース 1 項目:

データベース別名 = LABDB

データベース名 = LABDB

ローカル・データベース・ディレクトリー = /db2

データベース・リリース・レベル = d.00

コメント =

ディレクトリー項目タイプ = 間接

カタログ・データベース・パーティション番号 = 0

代替サーバー・ホスト名 =

代替サーバーのポート番号 =

db2inst1@DB2V97onSLES10:/workshop/lab3> db2 get db cfg for LABDB

データベースのデータベース構成 LABDB

データベース構成リリース・レベル = 0x0d00

データベース・リリース・レベル = 0x0d00

データベース・テリトリー = JP

データベース・コード・ページ = 1208

データベース・コード・セット = UTF-8

データベース国/地域コード = 81

データベース照合順序 = IDENTITY

代替照合シーケンス (ALT_COLLATE)

NUMBER データ・タイプの互換性データ・タイプの互換性データ・タイプの互換性データ・タイプの互換性 = ON

VARCHAR2 データ・タイプのデータ・タイプのデータ・タイプのデータ・タイプの互換性互換性互換性互換性 = ON

データ・タイプデータ・タイプデータ・タイプデータ・タイプ DATE のののの TIMESTAMP(0) への互換性への互換性への互換性への互換性 = ON

・・・

9

3. IBM Data Movement Tool で作成されたで作成されたで作成されたで作成された DDL

IBM Data Movement Tool では、Oracle データベースへ接続し、移行先の DB2デー

タベースへオブジェクトやデータを移行するためにの DDL ファイルやスクリプトを作

成することが出来ます。このハンズオンの目的は、IBM Data Movement Tool で作成

された DDL ファイルやスクリプトを理解してもらうことです。

IBM Data Movement Tool で作成された DDL ファイルは、/workshop/ddl 配下に配置

してあります。/workshop/ddl には以下のサブディレクトリーがあります。

� ddl_and_data

このディレクトリは、IBM Data Movement Tool で ”DDL and Data Movement” オプシ

ョンを指定した場合に生成される全てファイル DDL とデータのファイルが配置されて

います。

� ddl_only

このディレクトリには、“DDL”オプションのみを指定した場合に生成されるファイルが

あります。

� data_only

このディレクトリには、“Data”オプションのみを指定した場合に生成されるファイルが

あります。

Note:Note:Note:Note: IBM Data Movement Tool は UNIX/Linux、Windows でスクリプトファイルを作

成することが出来ます。スクリプトは、プラットフォームによって異なる拡張子になりま

す。(例 UNIX/Linuxでは db2gen.sh というファイルに対し、Windows では

db2gen.cmd というファイルが作成される。)IBM Data Movement Tool では自動的に

プラットフォームを検知します。今回のハンズオンでは、UNIX/Linuxプラットフォーム

にしています。

3.1 コマンドコマンドコマンドコマンドやややや構成ファイル構成ファイル構成ファイル構成ファイル

以下の表は、DDL/Data の抽出を GUI、またはコマンドラインから実行した場合に、作成さ

れるコマンドのファイルの一覧になります。コマンドファイルを使用することで、タスクをコマ

ンドラインから実行することが出来ます。例えば、”unload”コマンドファイルは、インプットフ

ァイルでリストされた表からデータを抽出します。このコマンドは GUI が使用できない環境

では、役に立ちます。

10

ファイル名ファイル名ファイル名ファイル名 説明説明説明説明

geninput <SID>.tables で使用される表のリストを作成するコマンドファイ

ルです。

<SID>.tables このファイルは、DDL や Data を抽出した場合や、geninput コ

マンドを手動で実行したときに、作成されます。このファイルは

オブジェクト作成やデータ移行のために使用される表名のリス

トファイルになります。移行が必要ない表があるような場合は、

手動でこのファイルを修正し、除外することが出来ます。“SID”

は Oracle のシステム ID です。SID は通常データベース名と同

様の場合が多いです。

unload このスクリプトは、データベースオブジェクト(表、ビュー、シー

ケンスなど)をデプロイするためのスクリプトを生成します。この

スクリプトは、各表からデータをファイルに抽出する際にも使用

されます。

rowcount <SID>.tables ファイルでリストされている表の行数をカウントし

ます。作成した表データの整合性を確認するために使用するこ

とが出来ます。

db2ddl.sh ターゲット DB に DDL ファイルを実行するスクリプトです。この

ファイルは、DDL の抽出を選択した場合に作成されます。

db2load.sh ターゲット DB にデータを投入するスクリプトです。

db2checkRemoval.sh や rowcount、RUNSTATS などの処理を

含みます。このファイルは Data の抽出を選択した場合に作成

されます。”DDL and Data” を選択した場合、db2gen.sh を実行

する場合と同じになります。

db2gen.sh このスクリプトは、ターゲット DB に DDL を実行し、データを投

入します。

db2checkRemoval.sh Set integrity pending (整合性チェック待ち)状態を解消しま

す。このスクリプトは、set integrity pending 状態の表への set

integrity ステートメントを作成し、実行します。

db2dropobjects.sh このコマンドファイルは、データベース・オブジェクトを削除しま

す。削除するオブジェクトは、表やシーケンス、表スペース、バ

ッファプールを含みます。

IBMExtract.properties IBM Data Movement Tool の設定や接続情報が格納されたプ

ロパティファイルです。このファイルは、DDL または Data(もしく

は両方)の抽出操作をすると作成されます。

11

<DDL ディレクトリーを確認>

_7. db2tables.sql ファイルにはいくつの表が含まれていますか?_______________________________

_8. orcl.tables ファイルにはいくつの表が含まれていますか?__________________________________

3.2 オブジェクト作成のスクリプトオブジェクト作成のスクリプトオブジェクト作成のスクリプトオブジェクト作成のスクリプト

以下の表は、データベースオブジェクトを作成するための DDL ファイルの一覧になりま

す。もし以下の表を使用して手動でオブジェクトを作成する場合には、オブジェクト間の

依存関係に注意して実行してください。これらのスクリプトは、db2ddl.sh というシェルスク

リプトにも含まれています。db2ddl.sh を実行することで、一度に作成することが出来ま

す。

また、DDL をデータベース設計にあわせて修正することが出来ます。

ファイル名ファイル名ファイル名ファイル名 説明説明説明説明

db2tsbp.sql バッファプールと表スペース作成のための DDL

db2udf.sql ユーザー定義関数を作成するための DDL

db2tables.sql 表作成のための DDL

db2default.sql 列のデフォルト値を定義するための DDL

db2sequences.sql シーケンスオブジェクトを作成するための DDL

db2synonyms.db2 シノニム(DB2 ではエイリアスという)を作成するための DDL

db2check.sql 制約チェックのための DDL

db2cons.sql ユニーク制約(プライマリー・キー制約やユニークインデックス

の定義を含む)のための DDL

db2fkeys.sql 外部キー制約のための SQL

3.3 データ投入のためのスクリプトデータ投入のためのスクリプトデータ投入のためのスクリプトデータ投入のためのスクリプト

IBM Data Movement Tool は、データ移行のためのデータファイルを作成します。通常、移

行先のデータベースと、移行元のデータベースは別サーバーにあることが多いです。その

ため、移行先のデータベースで、これらのスクリプトを実行し、データを移行する必要があ

ります。高速ネットワークで移行元と移行先のサーバーを接続することが出来る場合は、

IBM Data Movement Tool を使用して、ファイル経由ではなく、直接接続して移行すること

12

が出来ます。この方法は、移行元のディスクに十分な一時領域が確保できない場合に有

用です。

ファイル名ファイル名ファイル名ファイル名 説明説明説明説明

db2load.sql LOAD のための DDL です。このスクリプトとデータは、移行先

のサーバーにある必要があります。

db2loadterminate.db このコマンドファイルは、Load Pending 状態を解消するために

使用します。LOAD処理が途中で中断されたような場合には、

ターゲットの表は Load Pending 状態になります。その状態を

解消するためにこのスクリプトを使用してください。

3.4 PL/SQL のロジックを含むオブジェクトを作成のロジックを含むオブジェクトを作成のロジックを含むオブジェクトを作成のロジックを含むオブジェクトを作成

するスクリプトするスクリプトするスクリプトするスクリプト

以下の表は、プロシージャーや、パッケージ、トリガー、ビューなどのオブジェク

トを作成する DDL のリストになります。

ファイル名ファイル名ファイル名ファイル名 説明説明説明説明

db2plsql_function.db2 PL/SQL 関数を有効にする DDL

db2plsql_package.db2 PL/SQL パッケージを有効にする DDL

db2plsql_package_body.db2 PL/SQL パッケージ本体を有効にする DDL

db2plsql_procedure.db2 PL/SQL プロシージャーを有効にする DDL

db2plsql_trigger.db2 トリガーを有効にする DDL

db2plsql_type.db2 データ・タイプを有効にする DDL

db2plsql_type_body.db2 データ・タイプ本体を有効にする DDL

db2plsql_views.db2 ビューを有効にする DDL

3.5 その他のファイルその他のファイルその他のファイルその他のファイル

オブジェクト作成やデータ移行を実行するスクリプトに加えて、IBM Data Movement Tool

は、ユーティリティーを実行するためのスクリプトも適用しています。

13

ファイル名ファイル名ファイル名ファイル名 説明説明説明説明

db2tabcount.sql 表の行数をカウントするスクリプトです。表のリストは、DDL の

抽出の段階で決まります。<SID>.tables の表のリストを参照

しているわけではありません。

db2tabstatus.sql 制約の状況を調べるスクリプトです。

db2checkpending.sql SET INTEGRITY を実行するスクリプトです。対象の表は抽出

の段階で決まり、表のリストファイルから選んでいるわけでは

ありません。

db2droptables.db2 表を削除するスクリプトです。対象の表は抽出の段階で決ま

り、表のリストファイルから選んでいるわけではありません。

db2fkdrop.sql 外部キー制約を削除するスクリプトです。もしデータ投入前に

このスクリを実行した場合、データの投入順序を考慮する必要

がなくなります。外部キー制約は、データ投入後に、

db2fkeys.sql や db2checkpending.sql で再定義することが出来

ます。

db2objprivs.db2 オブジェクトの特権を与えるスクリプトです。

db2roleprivs.db2 ロールを付与するスクリプトです。

db2runstats.sql RUNSTATS ステートメントを含んだステートメントです。

RUNSTATS は DDL 作成とデータ移行後に行うことをお勧めし

ます。

14

4. オブジェクト作成オブジェクト作成オブジェクト作成オブジェクト作成

4.1 IBM Data Movement Tool によるオブジェによるオブジェによるオブジェによるオブジェ

クトクトクトクト作成作成作成作成

このハンズオンでは、IBM Data Movement Tool の GUI インターフェースで、オブジェクトを

作成します。

_1. IBM Data Movement Tool を開始する

a. セッションを開始し、/workshop/IBMDataMovementToolのディレクトリーに移動する

b. start スクリプトを開始する

$ cd /workshop/IBMDataMovementTool

$ ./IBMDataMovementTool.sh

※Data Movement Tool が GUI で起動しない場合には、一度ログオフし、db2inst1 で

OS にログインしなおしてください。

_2. 以下の情報を使用して DB2 に接続する

IBM Data Movement Tool は、データベースに接続する情報を表示します。このハンズオ

ンでは、Oracle データベースは導入されていないので、DB2 のデータベースのみがありま

す。

パラメーターパラメーターパラメーターパラメーター 設定値設定値設定値設定値

Server Name Localhost

Port Number 60000

Database Name LABDB

db2inst1@DB2V97onSLES10:/workshop> cd IBMDataMovementTool/ db2inst1@DB2V97onSLES10:/workshop/IBMDataMovementTool> ls IBMDataMovementTool.cmd IBMDataMovementTool.jar IBMDataMovementTool.sh db2inst1@DB2V97onSLES10:/workshop/IBMDataMovementTool> ./IBMDataMovementTool.sh [2009-09-14 02.16.59.745] INPUT Directory = . [2009-09-14 02.16.59.749] Configuration file loaded: 'jdbcdriver.properties' [2009-09-14 02.16.59.752] appJar : '/workshop/IBMDataMovementTool/IBMDataMovementTool.jar'

15

User ID db2inst1

Password db2inst1

JDBC Drivers /opt/ibm/db2/V9.7_FP1/java/db2jcc.jar:/opt/ibm/db2/V9.7_FP1/java/db

2jcc_license_cu.jar

以下のように DB2 の接続情報を記入し、DB2 に接続してください。

*ここでは、decflt_roundingの設定が、RUOUND_HALF_UP ではないという Warningが出

力されていますが、このハンズオンのシナリオを進めていくうえで、問題はありません。

decflt_roundingは 10 進浮動小数点 (DECFLOAT) の丸めモードを指定するデータベース

構成パラメーターです。DB2 のデフォルトでは、ROUND_HALF_EVEN(最も近い値に丸め込

み、等距離の場合は、結果の数字が偶数になるように丸める)の設定になっていますが、

今回のハンズオンで移行してきた Oracle の設定は、ROUND_HALF_UP(最も近い値に丸

め込み、等距離の場合は、1 に切り上げる)になっています。

_3. Interactive Deploy の GUI を使用してバッファプールを作成する

a. 「Interactive Deploy」タブを選択し、左上のフォルダのアイコンを選択してください。

16

b. Select output directoryウィンドウが開いたら、/workshop/lab3/ddl を選択してください。

以下のように、オブジェクトのツリーが表示されます。オブジェクトの前に表示されているア

イコンは、まだオブジェクトが作成されていないことを示します。

17

c.BP32 のバッファプールを作成します。BP32 を選択し、右クリックで「Deploy Selected

objects in DB2」を選択します。

デプロイ結果は、下のペインにも表示されています。以下のように BP32 のデプロイに成

功したことが確認できます。

一度に複数のオブジェクトを選択することも可能です。残りの全てのバッファプールを複数

選択し、同じように、右クリックで「Deploy Selected objects in DB2」を選択します。以下の

ように、デプロイが終了したことが確認できます。

_4. Interactive Deploy の GUI を使用して、先ほどのバッファプールのデプロイと同じよう

に、全ての表スペースをデプロイしてください。

以下の SQL を実行することで、作成された表スペースについて確認できます。

SELECT

18

substr(TBSP_NAME,1,15) TBSP,

TBSP_TYPE,

TBSP_PAGE_SIZE

FROM table(MON_GET_TABLESPACE ('',-1));

上記の SQL は、/workshop/lab3 配下の 02.check_tbsp.sql スクリプトでも実行できます。

この SQL またはスクリプトを実行することで、LABDB に作成された表スペースについて確

認してください。

4.2 スクリプトによるオブジェクトスクリプトによるオブジェクトスクリプトによるオブジェクトスクリプトによるオブジェクト作成作成作成作成

このセクションでは、IBM Data Movement Tool が作成したスクリプトを使用してオブジェク

トを作成します。いくつかのオブジェクトは依存関係があるため、データベース・オブジェク

トをスクリプトで作成するためには、以下の手順で実行してください。

1. バッファプール、表スペースを作成

2. ユーザー定義関数を作成

db2inst1@DB2V97onSLES10:/workshop/lab3> db2 -tvf 02.check_tbsp.sql CONNECT TO LABDB

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0

SQL 許可 ID = DB2INST1

ローカル・データベース別名 = LABDB SELECT substr(TBSP_NAME,1,15) TBSP, TBSP_TYPE, TBSP_PAGE_SIZE FROM table(MON_GET_TABLESPACE ('',-1)) TBSP TBSP_TYPE TBSP_PAGE_SIZE --------------- ---------- -------------------- SYSCATSPACE DMS 32768 TEMPSPACE1 SMS 32768 USERSPACE1 DMS 32768 SYSTOOLSPACE DMS 32768 TS32 DMS 32768 TS8 DMS 8192 TSSTMP32 SMS 32768 TSU8 SMS 8192 TSUTMP32 SMS 32768

9 レコードが選択されました。

19

3. 表を作成

4. 表のカラムにデフォルトの属性を定義

5. シーケンスの作成

6. シノニムの定義

7. プライマリーキー制約とユニーク索引の追加

8. チェック制約

9. 外部キー制約の追加

バッファプールと表スペースは、前章のハンズオンで作成しました。今回はユーザー定義

関数(UDF)はないため、表作成に入ります。

なお、このハンズオンで使用するスクリプトは、/workshop/lab3/ddl 配下にあります。

_1. 表作成

db2tables.sql を以下のように実行してください。

$db2 –tvf db2tables.sql

実行後、7 つの表が作成に成功し、WAREHOUSES の表が以下のようなエラーで失敗しま

す。

上記のメッセージから、VARCHAR2 のカラム長が長すぎるため、エラーになっていることが

分かります。もし実際のデータが 32677 バイトよりも短い場合には、表定義を変更するこ

とも出来ます。加えて DB2V9.7 では、LOB インライン格納の新機能が提供されています。

このインライン機能により、LOB データもバッファプールを使用することが出来るようになる

ため、LOB データへのアクセスのパフォーマンスが向上されています。このハンズオンで

は、WAREHOUSES 表の VARCHAR2 列をインライン格納の CLOB に変更します。

db2tables.sql を編集するか、もしくは新しく DDL ファイルを作成してください。

CREATE TABLE "SALES"."WAREHOUSES" ( "WAREHOUSE_ID" NUMBER(5) NOT NULL , "LOCATION_ID" NUMBER(5) NOT NULL , "LOCATION_SEQ" NUMBER(5) NOT NULL , "SEQUENCE1" NUMBER(22) NOT NULL , "SEQUENCE2" NUMBER(22) , "WH_DESCRIPTION1" VARCHAR2(4000) , "WH_DESCRIPTION2" VARCHAR2(4000) , "WH_DESCRIPTION3" VARCHAR2(4000) , "WH_DESCRIPTION4" VARCHAR2(4000) , "WH_DESCRIPTION5" VARCHAR2(4000) , "WH_DESCRIPTION6" VARCHAR2(4000) , "WH_DESCRIPTION7" VARCHAR2(4000) , "WH_DESCRIPTION8" VARCHAR2(4000) , "WH_DESCRIPTION9" VARCHAR2(4000) )

DB21034E コマンドが、有効なコマンド行プロセッサー・コマ

ンドでないため、 SQL

ステートメントとして処理されました。 SQL

処理中に、そのコマンドが返されました。

SQL0670N 表の行の長さが "32677"

バイトの制限を超えています。 (表スペースは ""。) SQLSTATE=54010

20

WAREHOUSES 表の DDL(変更前)

修正した WAREHOUSES 表の DDL

修正後の warehouse.clp は/workshop/lab3/ddl_modified にあります。

warehouse.clp の実行の前に、LABDB に接続してください。

実行例

_2. 表のカラムにデフォルトの属性を定義

--#SET :TABLE:SALES:WAREHOUSES CREATE TABLE "SALES"."WAREHOUSES" ( "WAREHOUSE_ID" NUMBER(5) NOT NULL , "LOCATION_ID" NUMBER(5) NOT NULL , "LOCATION_SEQ" NUMBER(5) NOT NULL , "SEQUENCE1" NUMBER(22) NOT NULL , "SEQUENCE2" NUMBER(22) , "WH_DESCRIPTION1" VARCHAR2(4000) , "WH_DESCRIPTION2" VARCHAR2(4000) , "WH_DESCRIPTION3" VARCHAR2(4000) , "WH_DESCRIPTION4" VARCHAR2(4000) , "WH_DESCRIPTION5" VARCHAR2(4000) , "WH_DESCRIPTION6" VARCHAR2(4000) , "WH_DESCRIPTION7" VARCHAR2(4000) , "WH_DESCRIPTION8" VARCHAR2(4000) , "WH_DESCRIPTION9" VARCHAR2(4000) );

--#SET :TABLE:SALES:WAREHOUSES CREATE TABLE "SALES"."WAREHOUSES" ( "WAREHOUSE_ID" NUMBER(5) NOT NULL , "LOCATION_ID" NUMBER(5) NOT NULL , "LOCATION_SEQ" NUMBER(5) NOT NULL , "SEQUENCE1" NUMBER(22) NOT NULL , "SEQUENCE2" NUMBER(22) , "WH_DESCRIPTION1" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION2" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION3" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION4" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION5" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION6" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION7" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION8" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION9" CLOB(4000) INLINE LENGTH 3000 ) ;

db2inst1@DB2V97onSLES10:/workshop/lab3/ddl_modified> db2 -tvf warehouse.clp CREATE TABLE "SALES"."WAREHOUSES" ( "WAREHOUSE_ID" NUMBER(5) NOT NULL , "LOCATION_ID" NUMBER(5) NOT NULL , "LOCATION_SEQ" NUMBER(5) NOT NULL , "SEQUENCE1" NUMBER(22) NOT NULL , "SEQUENCE2" NUMBER(22) , "WH_DESCRIPTION1" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION2" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION3" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION4" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION5" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION6" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION7" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION8" CLOB(4000) INLINE LENGTH 3000 , "WH_DESCRIPTION9" CLOB(4000) INLINE LENGTH 3000 )

DB20000I SQL コマンドが正常に完了しました。

21

db2default.sql スクリプトを使用して属性を定義します。このスクリプトは ACCOUNTS 表と

EMPLOYEES 表の 3 列に属性を定義します

$db2 –tvf db2default.sql

以下の SQL を実行することで、設定されたかどうか確認することが出来ます。

/workshop/lab3 ディレクトリに 03.check_defaults.sql スクリプトでも実行する

ことが出来ます。

SELECT SUBSTR(TABNAME,1,15) TABLE,

SUBSTR(COLNAME,1,20) COLUMN,

DEFAULT

FROM SYSCAT.COLUMNS

WHERE TABSCHEMA='SALES' AND

LENGTH(DEFAULT)>0

/workshop/lab3 配下にある 03.check_defaults.sql のスクリプトに上記の

SQL がありますので、必要に応じてご利用ください。

確認例

_3. シーケンスの作成

シーケンスの作成は、db2sequences.sql を実行します。

$db2 –tvf db2sequences.sql

db2inst1@DB2V97onSLES10:/workshop/lab3/ddl> db2 -tvf db2default.sql CONNECT TO LABDB

(省略) ALTER TABLE "SALES"."ACCOUNTS" ALTER COLUMN "CLOSED_DATE" SET WITH DEFAULT SYSDATE

DB20000I SQL コマンドが正常に完了しました。 ALTER TABLE "SALES"."EMPLOYEES" ALTER COLUMN "CREATE_DATE" SET WITH DEFAULT SYSDATE

DB20000I SQL コマンドが正常に完了しました。 TERMINATE

DB20000I TERMINATE コマンドが正常に完了しました。

db2inst1@DB2V97onSLES10:/workshop/lab3> db2 -tvf 03.check_defaults.sql CONNECT TO LABDB

(省略) SELECT SUBSTR(TABNAME,1,15) TABLE, SUBSTR(COLNAME,1,20) COLUMN, DEFAULT FROM SYSCAT.COLUMNS WHERE TABSCHEMA='SALES' AND LENGTH(DEFAULT)>0 TABLE COLUMN DEFAULT --------------- -------------------- --------------------------------------------ACCOUNTS CREATE_DATE "SYSIBM"."TIMESTAMP"(CURRENT TIMESTAMP) ACCOUNTS CLOSED_DATE "SYSIBM"."TIMESTAMP"(CURRENT TIMESTAMP) EMPLOYEES CREATE_DATE "SYSIBM"."TIMESTAMP"(CURRENT TIMESTAMP)

3 レコードが選択されました。

22

ここでは、表定義の別の確認方法を紹介します。DB2 の DB から DDL を抽出する

db2look ユーティリティです。db2look の出力結果から、シーケンスが作成されたかど

うか確認してください。db2look は以下のコマンドで実行することが出来ます。

$db2look –d LABDB –e –o db2look.e.log

デフォルトでは、db2look は標準出力で結果を表示するため、上記のように-o オプショ

ンで出力先のファイルを指定するか、もしくはファイルにリダイレクトすることをお勧めしま

す。

実行例

db2inst1@DB2V97onSLES10:/workshop/lab3/ddl> db2 -tvf db2sequences.sql CONNECT TO LABDB

(省略) CREATE SEQUENCE "SALES"."EMPLOYEE_SEQUENCE" MINVALUE 2 MAXVALUE 2147483647 INCREMENT BY 1 CACHE 20 NOCYCLE NOORDER

DB20000I SQL コマンドが正常に完了しました。 TERMINATE

DB20000I TERMINATE コマンドが正常に完了しました。

db2inst1@DB2V97onSLES10:/workshop/lab3/ddl> db2look -d LABDB -e -o db2look.e.log

-- ユーザー ID が指定されていません。db2look は環境変数 USER の使用を試行します

-- USER は以下のとおりです: DB2INST1

-- 表の DDL の作成

-- 出力がファイルに送信されます: db2look.e.log

-- パッケージを自動的にバインドしています ...

-- バインドは正常に終了しました

-- パッケージを自動的にバインドしています ...

-- バインドは正常に終了しました db2inst1@DB2V97onSLES10:/workshop/lab3/ddl> head -100 db2look.e.log

-- この CLP ファイルの作成に使用した DB2LOOK のバージョン: "9.7"

-- タイム・スタンプ: 2009 年 09 月 14 日 05 時 48 分 32 秒

(省略) CONNECT TO LABDB; ---------------------------------

-- シーケンスの DDL ステートメント --------------------------------- CREATE SEQUENCE "SALES "."EMPLOYEE_SEQUENCE" AS DECIMAL(27, 0) MINVALUE 2 MAXVALUE 2147483647 START WITH 2 INCREMENT BY 1 CACHE 20 NO CYCLE NO ORDER; ------------------------------------------------

-- 表の DDL ステートメント "SALES "."WAREHOUSES" ------------------------------------------------ CREATE TABLE "SALES "."WAREHOUSES" ( "WAREHOUSE_ID" DECIMAL(5,0) NOT NULL ,

23

_4. シノニムの定義

db2synonymus.db2 を使用して、シノニムを作成します。

$db2 -tvf db2synonyms.db2

IBM Data Movement Tool は、全てのスキーマのシノニムを抽出するため、もし移行

先で定義する必要のないシノニムは db2synonyms.db2 から削除してから実行してくだ

さい。

シノニムの作成の確認は、先ほどの db2look でも確認することが出来ます。db2look

の出力結果から CREATE ALIAS ステートメントを確認してください。

(注: db2look で確認すると、CREATE SYNONYM ステートメント で作成したオブジェク

トの定義は、CREATE ALIAS ステートメントとして抽出されます。)

_5. プライマリーキー制約とユニーク索引の追加

以下のように、db2cons.sql のスクリプトを実行してください。

$db2 -tvf db2cons.sql

追加処理が正常に完了したかどうか、db2look を取得し確認してください。

_6. チェック制約

以下のように、db2check.sql のスクリプトを実行してください。

$db2 -tvf db2check.sql

チェック制約の定義 db2look の以下の出力結果から分かります。

出力例

Note:Note:Note:Note: ここで SQL3600N エラーが出力される場合がありますが、無視して良いメッセージ

です。

_7. 外部キー制約の追加

以下のように、db2fkeys.sql スクリプトを実行する。

$db2 -tvf db2fkeys.sql

-- 表のチェック制約の DDL ステートメント "SALES "."EMPLOYEES" ALTER TABLE "SALES "."EMPLOYEES" ADD CONSTRAINT "CK1_EMPLOYEES" CHECK (BAND IN ('1', '2', '3', '4', '5')) ENFORCED ENABLE QUERY OPTIMIZATION;

24

Note:Note:Note:Note: オブジェクトをスクリプトで一度に作成する場合、db2ddl.sh スクリプトを使用するこ

とも出来ます。今回のハンズオンのようにオブジェクトごとにスクリプトを実行する場合は、

次の段階に行く前に、それぞれのエラーを修正することが可能です。

そしてもし、データ移行とオブジェクトの作成を一緒に実行したい場合は、db2gen.sh を使

用してください。db2ddl.sh と db2gen.sh はほぼ同じスクリプトです。違いとしては、

db2gen.sh はデータの投入スクリプトも含まれていることです。

25

5. データ移行データ移行データ移行データ移行

この章では、Oracle から抽出したデータを DB2 に移行します。

5.15.15.15.1 デーデーデーデータのタのタのタの LOADLOADLOADLOAD

IBM Data Movement Tool が抽出したデータの LOAD のスクリプト、db2load.sql を使用し

ます。

LOAD コマンドは以下の 3 つのファイルを使用します。

� データファイル

� ダンプファイル(デフォルトではコメントアウトされている)

� メッセージファイル

これらのファイルは、絶対パスで指定されています。その他、別のディレクトリーに移動し

たような場合には、パスを変更する必要があります。

db2load.sql の内容

_1. 以下の通り、db2load.sql スクリプトを実行してください。今回のハンズオンでは、パス

を変更する必要はありません。

$db2 -tvf db2load.sql

7 つの表にデータを LOAD します。CUSTOMER 表は 0件になっています。

db2inst1@DB2V97onSLES10:/workshop/lab3/data> cat db2load.sql CONNECT TO LABDB; --#SET :LOAD:SALES:ACCOUNTS LOAD FROM "/workshop/ddl/data_only/data/sales_accounts.txt" OF DEL MODIFIED BY CODEPAGE=1208 COLDEL~ ANYORDER USEDEFAULTS CHARDEL"" DELPRIORITYCHAR NOROWWARNINGS --DUMPFILE="/workshop/ddl/data_only/dump/sales_accounts.txt" METHOD P (1,2,3,4,5,6,7,8) MESSAGES "/workshop/ddl/data_only/msg/sales_accounts.txt" REPLACE INTO "SALES"."ACCOUNTS" ( "ACCT_ID", "DEPT_CODE", "ACCT_DESC", "MAX_EMPLOYEES", "CURRENT_EMPLOYEES", "NUM_PROJECTS", "CREATE_DATE", "CLOSED_DATE" )

26

5.25.25.25.2 整合性チェック整合性チェック整合性チェック整合性チェック

参照制約やチェック制約などを持つ表に、データを LOAD した場合、LOAD コマンド実行

後、表は SET INTEGRITY PENDING状態となり、アクセスすることが出来ません。データ

の LOAD完了後、該当表に対して、SET INTEGRITY コマンドを実行する必要があります。

IBM Data Movement Tool は、db2checkpending.sql という、SET INTEGRITY コマンドを全

表に実行するスクリプトを作成します。db2checkRemoval.sh も提供されています。

db2checkRemoval.sh は、SET INTEGIRITY PENDING状態の表に対し、SET INTEGRITY

コマンドを実行します。

_2. EMPLOYEE 表にアクセスし、アクセスできないことを確かめます。

$db2 connect to LABDB

$db2 “select count(*) from SALES.EMPLOYEES”

$db2 ? SQL****N

SELECT ステートメントが返した SQL エラーコードは何でしたか?______________

実行例

db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 connect to labdb

(省略) db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 "select count(*) from sales.employees" 1 -----------

SQL0668N 理由コード "1" のため、表 "SALES.EMPLOYEES"

に対する操作は許可されません。 SQLSTATE=57016

このコマンドは、OS プロンプトから db2ic としても実行できます。 db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 ? SQL0668N

SQL0668N 理由コード "<reason-code>" のため、表 "<table-name>"

に対する操作は許可されません。

説明:

表 "<table-name>" へのアクセスは制限されています。原因は、次の理由コード

"<reason-code>" に基づいています。 1

表は、SET INTEGRITY ペンディング・アクセスなし状態です。表の整

合性が強制されておらず、表の内容が無効である可能性があります。

従属表が SET INTEGRITY ペンディング・アクセスなし状態である場

合は、SET INTEGRITY ペンディング・アクセスなし状態でない親表ま

たは基礎表に対する操作も、このエラーを受け取る可能性がありま

す。

(省略)

27

_3.db2checkRemoval.sh の実行

./db2checkRemoval.sh

シェルの実行が完了したら、再度 SELECT ステートメントを実行してください。

$db2 “select count(*) from SALES.EMPLOYEES”

実行例

_4.各表の件数確認

db2tabcount.sql スクリプトを使用して、LOAD した表のレコード件数を確認します。

$db2 –tvf db2tabcount.sql

以下の表に、件数を書き込んでください。

表名表名表名表名 件数件数件数件数

ACOUNTS

CUSTOMER

WAREHOUSES

DEPARTMENTS

EMPLOYEES

EMP_DETAILS

OFFICE

db2inst1@DB2V97onSLES10:/workshop/lab3/data> ./db2checkRemoval.sh

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0

SQL 許可 ID = DB2INST1

ローカル・データベース別名 = LABDB SET INTEGRITY FOR SALES.DEPARTMENTS,SALES.ACCOUNTS,SALES.OFFICES,SALES.EMPLOYEES,SALES.EMP_DETAILS IMMEDIATE CHECKED

DB20000I SQL コマンドが正常に完了しました。 db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 "select count(*) from sales.employees" 1 ----------- 42

1 レコードが選択されました。

28

5.3 統計情報の収集統計情報の収集統計情報の収集統計情報の収集

統計情報とは、表のレコード件数や、索引の情報などの情報です。DB2 はアクセス・プラン

を決定する際に、統計情報をもとに判断します。より良いアクセス・プランを選択させるた

めに、統計情報を Update しておくことは重要なことです。

統計情報の収集をするためには、RUNTSATS コマンドを実行します。Data Movement Too

lは、RUNSTATS を実行するための、db2runstas.sql を用意しています。

$db2 –tvf db2runstats.sql

実行例

RUNTSATS のタイムスタンプは、SYSCAT.TABLES カタログビューに格納されます。

以下の SQL を実行し、SYSCAT.TABLES の stats_time列の値を取得してください。

db2 connect to labdb db2 "select substr(tabname,1,20) tabname,stats_time from syscat.tables where tabschema='SALES'"

実行例

db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 -tvf db2runstats.sql CONNECT TO LABDB

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0

SQL 許可 ID = DB2INST1

ローカル・データベース別名 = LABDB RUNSTATS ON TABLE "SALES"."ACCOUNTS" ON ALL COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND DETAILED INDEXES ALL ALLOW WRITE ACCESS

DB20000I RUNSTATS コマンドが正常に完了しました。

(省略) TERMINATE

DB20000I TERMINATE コマンドが正常に完了しました。

db2inst1@DB2V97onSLES10:/workshop/lab3/data> db2 "select substr(tabname,1,20) tabname,stats_time from syscat.tables where tabschema='SALES'" TABNAME STATS_TIME -------------------- -------------------------- WAREHOUSES 2009-09-14-10.04.03.349199 DEPARTMENTS 2009-09-14-10.04.03.384440 CUSTOMERS 2009-09-14-10.04.03.329179 ACCOUNTS 2009-09-14-10.04.03.193782 OFFICES 2009-09-14-10.04.03.364467 EMPLOYEES 2009-09-14-10.04.03.406776 EMP_DETAILS 2009-09-14-10.04.03.434095

7 レコードが選択されました。

29

6.6.6.6. CLPPlusCLPPlusCLPPlusCLPPlus

CLPPlusは DB2V9.7で提供されているコマンド行インタフェースです。

Oracleの SQL*Plusと互換性のあるフィーチャーを提供しています。ここで

は CLPPlusを使用したデータベースへの接続、SQLの実行を行います

6.1 CLPPlus の開始の開始の開始の開始

CLPPlus のセッションは、以下のパラメーターを使用します。

� User:db2inst1

� Password:db2inst1

� Host:localhost

� Port:60000

� Database name:labdb

CLPPlus の開始方法は様々あります。Oracle の SQL*Plus での「sqlplus

userid/password@ host[:port][/service_name]」と似た形式で接続することが出来ます。以

下は対話式での SQL の実行例になります。

まず DB 接続時に開始する方法で行います。

_1.ターミナルウィンドウで以下のコマンドを実行します。

clpplus db2inst1/db2inst1@localhost:60000/labdb

実行例

db2inst1@DB2V97onSLES10:/workshop/lab3> clpplus db2inst1/db2inst1@localhost:60000/labdb

データベース接続情報

ホスト名 = localhost

データベース・サーバー = DB2/LINUX SQL09070

SQL 許可 ID = db2inst1

ローカル・データベース別名 = LABDB

ポート = 60000

CLPPlus: バージョン 1.0 Copyright (c) 2009, IBM CORPORATION. All rights reserved. SQL>

30

_2.CLPPlusセッションを切断するためには、quit または exit を入力します。

実行例

_3.以下のコマンドで CLPPlusセッションを開始することも出来ます。

cd /workshop/lab3

clpplus db2inst1/db2inst1@labdb

これは、/workshop/lab3/login.sql でホスト定義をしているため、ホスト名、ポート番号、DB

名が省略されています。

login.sql の内容

6.2 CLPPlus を使用したを使用したを使用したを使用した SQL の実行の実行の実行の実行

CLPPlus で SQL ステートメントのスクリプトを実行することが出来ます。

以下の例は、CLPPlus コマンドや SQL ステートメントを実行している例になります。これは、

/workshop/lab3 に 01.check_tables.clp というファイルがあります。

SET PAGESIZE コマンドは、1 ページに収まる表示行の数を設定します。また SET

LINESIZE コマンドは、行の幅を制限します。

01.check_tables.clp の内容

_4.ファイルの内容をバッファーに取り出し、実行するために、START コマンドを実行してく

ださい。

SQL> exit db2inst1@DB2V97onSLES10:/workshop/lab3>

SET PAGESIZE 9999 SET LINESIZE 1000 SET ECHO ON SELECT substr(tb.tabname,1,20) table_name, tb.stats_time, int(tb.card) card, tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo WHERE tb.tabschema='SALES' and tb.tabname=tbinfo.tabname ORDER BY table_name;

define labdb=localhost:60000/labdb

31

cd /workshop/lab3

clpplus db2inst1/db2inst1@labdb

SQL> start /workshop/lab3/01.check_tables.clp

実行例

CLPPlus は、インメモリー領域の SQLバッファーに、直近で実行された SQL ステートメント

や、PL/SQL のブロックを保持しています。LIST コマンドを使用することで、SQLバッファー

内にある情報を取得することが出来ます。

_5 以下のように LIST コマンドを実行します。

実行例

_6.CHANGE コマンドを使用することで、バッファーの内容を変更することが出来ます。

以下のように、ORDER BY を指定して、CHANGE コマンドを実行してください。

change /ORDER BY table_name/ORDER BY card

SQL> start /workshop/lab3/01.check_tables.clp SQL> SELECT substr(tb.tabname,1,20) table_name, tb.stats_time, int(tb.card) card, tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo WHERE tb.tabschema='SALES' and tb.tabname=tbinfo.tabname ORDER BY table_name; TABLE_NAME STATS_TIME CARD DATA_KB INDEX_KB ----------------- -------------------------- ----------- ----------- -------- ACCOUNTS 2009-09-14 10:04:03 8 512 512 CUSTOMERS 2009-09-14 10:04:03 0 512 512 DEPARTMENTS 2009-09-14 10:04:03 8 512 512 EMPLOYEES 2009-09-14 10:04:03 42 512 512 EMP_DETAILS 2009-09-14 10:04:03 8 512 512 OFFICES 2009-09-14 10:04:03 2 512 512 WAREHOUSES 2009-09-14 10:04:03 3 2048 2048

7 個の行が取り出されました。

SQL> LIST 1 SELECT 2 substr(tb.tabname,1,20) table_name, 3 tb.stats_time, int(tb.card) card, 4 tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb 5 FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo 6 WHERE tb.tabschema='SALES' and 7 tb.tabname=tbinfo.tabname 8* ORDER BY table_name

32

LIST

RUN

実行例

_7.CLPPlus の出力結果は、SPOOL コマンドを使用することでファイルに出力させること

が出来ます。以下のコマンドを実行してください。

SPOOL table_size

show SPOOL

host ls -l

SPOOL コマンドを実行することで、CLPPlus 出力をエコーし、ファイルにログを記録します。

HOST コマンドは、CLPPlus インタフェースで OS コマンドを実行します。ここでは SPOOL

によって出力された table_size.lst ファイルがあることを確認しています。

SQL> change /ORDER BY table_name/ORDER BY card 8* ORDER BY card SQL> list 1 SELECT 2 substr(tb.tabname,1,20) table_name, 3 tb.stats_time, int(tb.card) card, 4 tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb 5 FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo 6 WHERE tb.tabschema='SALES' and 7 tb.tabname=tbinfo.tabname 8* ORDER BY card SQL> run 1 SELECT 2 substr(tb.tabname,1,20) table_name, 3 tb.stats_time, int(tb.card) card, 4 tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb 5 FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo 6 WHERE tb.tabschema='SALES' and 7 tb.tabname=tbinfo.tabname 8* ORDER BY card TABLE_NAME STATS_TIME CARD DATA_KB INDEX_KB ----------------- ------------------- ----------- ------------ --------------CUSTOMERS 2009-09-14 10:04:03 0 512 512 OFFICES 2009-09-14 10:04:03 2 512 512 WAREHOUSES 2009-09-14 10:04:03 3 2048 2048 DEPARTMENTS 2009-09-14 10:04:03 8 512 512 ACCOUNTS 2009-09-14 10:04:03 8 512 512 EMP_DETAILS 2009-09-14 10:04:03 8 512 512 EMPLOYEES 2009-09-14 10:04:03 42 512 512

7 個の行が取り出されました。

33

実行例

_8.SQLバッファーの内容を保存する。

CLPPlus の便利な機能の一つとして、SQLバッファーをファイルに保存し、再利用が出来

る点があります。以下の通り、SAVE コマンドを実行し、SQLバッファーの内容をファイルに

保存します。

SAVE new_table_size.clp

host ls –l

host cat new_table_size.clp

実行例

SQL> spool table_size SQL> show spool spool ON SQL> host ls -l

合計 31 -rw-r--r-- 1 db2inst1 staff 129 2009-09-08 23:52 01.CreateDatabase.clp -rw-r--r-- 1 db2inst1 staff 332 2009-09-14 10:39 01.check_tables.clp -rw-r--r-- 1 db2inst1 staff 133 2009-06-08 10:44 02.check_tbsp.sql -rw-r--r-- 1 db2inst1 staff 178 2009-08-22 21:45 03.check_defaults.sql -rw-r--r-- 1 db2inst1 staff 0 2009-09-14 10:15 clpplus.log drwxr-xr-x 7 db2inst1 staff 600 2009-09-09 06:26 data -rw-r--r-- 1 db2inst1 staff 0 2009-09-09 05:33 db2set -rw-r--r-- 1 db2inst1 staff 0 2009-09-09 05:33 db2start -rw-r--r-- 1 db2inst1 staff 0 2009-09-09 05:33 db2stop drwxr-xr-x 3 db2inst1 staff 1336 2009-09-14 06:03 ddl drwxr-xr-x 2 db2inst1 staff 1224 2009-09-08 23:50 ddl_modified -rw-r--r-- 1 db2inst1 staff 73 2009-09-14 10:28 login.sql -rw-r--r-- 1 db2inst1 staff 145 2009-09-14 10:57 table_size.lst -rw-r--r-- 1 db2inst1 staff 700 2009-09-14 05:19 warehouse.clp

SQL> SAVE new_table_size.clp

DB250000I: コマンドは正常に完了しました。 SQL> host ls -l

(省略) drwxr-xr-x 3 db2inst1 staff 1336 2009-09-14 06:03 ddl drwxr-xr-x 2 db2inst1 staff 1224 2009-09-08 23:50 ddl_modified -rw-r--r-- 1 db2inst1 staff 73 2009-09-14 10:28 login.sql -rw-r--r-- 1 db2inst1 staff 277 2009-09-14 11:07 new_table_size.clp -rw-r--r-- 1 db2inst1 staff 1136 2009-09-14 11:07 table_size.lst -rw-r--r-- 1 db2inst1 staff 700 2009-09-14 05:19 warehouse.clp SQL> host cat new_table_size.clp SELECT substr(tb.tabname,1,20) table_name, tb.stats_time, int(tb.card) card, tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo WHERE tb.tabschema='SALES' and tb.tabname=tbinfo.tabname ORDER BY card /

34

_9.コマンドラインからスクリプトを実行させることが出来ます。CLPPlus ログイン時の“@”

以降に、スクリプト・ファイルを指定してください。

clpplus db2inst1/db2inst1@labdb @02.check_tables.batch.clp

実行例

以上です。

db2inst1@DB2V97onSLES10:/workshop/lab3> clpplus db2inst1/db2inst1@labdb @02.check_tables.batch.clp

データベース接続情報

ホスト名 = localhost

データベース・サーバー = DB2/LINUX SQL09070

SQL 許可 ID = db2inst1

ローカル・データベース別名 = LABDB

ポート = 60000 SQL> SELECT substr(tb.tabname,1,20) table_name, tb.stats_time, int(tb.card) card, tbinfo.data_object_p_size data_kb, tbinfo.index_object_l_size index_kb FROM syscat.tables tb, sysibmadm.admintabinfo tbinfo WHERE tb.tabschema='SALES' and tb.tabname=tbinfo.tabname ORDER BY table_name; TABLE_NAME STATS_TIME CARD DATA_KB INDEX_KB ----------------- ------------------- ----------- ---------- ----------- ACCOUNTS 2009-09-14 10:04:03 8 512 512 CUSTOMERS 2009-09-14 10:04:03 0 512 512 DEPARTMENTS 2009-09-14 10:04:03 8 512 512 EMPLOYEES 2009-09-14 10:04:03 42 512 512 EMP_DETAILS 2009-09-14 10:04:03 8 512 512 OFFICES 2009-09-14 10:04:03 2 512 512 WAREHOUSES 2009-09-14 10:04:03 3 2048 2048

7 個の行が取り出されました。 SQL> QUIT;

35

© Copyright IBM Corporation 2011 All Rights Reserved.

本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布され

るものです。

この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用

する環境に統合する使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べら

れていますが、他のところで同じまたは同様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使

用先は、自己の責任において行う必要があります。