db2look を使用したデータベースの模造
あるデータベースと構造が類似した別のデータベースを作成できると便利な場合がよくあります。 例えば、新しいアプリケーションやリカバリー・プランを実動システムでテストするより、ほぼ同じ構造とデータを持つテスト・システムを作成して、代わりにそのテスト・システムでテストする方が理にかなっています。
こうすることにより、実動システムの方は、テストによってパフォーマンス低下の影響を受けたり、エラーがあるアプリケーションによって誤ってデータを破壊されたりする心配がなくなります。 また、問題 (無効な結果やパフォーマンスの問題など) を調査する際には、実動システムとまったく同じテスト・システムを使った方が問題をデバッグしやすい場合もあります。
db2look ツールを使用すると、あるデータベースのデータベース・オブジェクトを別のデータベースに複製するのに必要な DDL ステートメントを抽出することができます。 このツールはまた、あるデータベースから別のデータベースに統計情報を複製するのに必要な SQL ステートメントや、データベース構成、データベース・マネージャー構成、およびレジストリー変数の複製に必要なステートメントを生成することもできます。 これは重要なことです。 なぜなら、これにより、新しいデータベースに元のデータベースとまったく同じデータ集合が含まれていなくても、2 つのシステムで同じアクセス・プランが選択されるようにすることができるからです。 db2look コマンドは、 Db2® バージョン 10.5 以降のリリースで実行されているデータベースに対してのみ発行してください。
db2look ツールの詳細については、「Db2 コマンド・リファレンス」を参照してください。オプションのリストについては、何もパラメーターを指定せずにこのツールを実行すると表示されます。 -h オプションを使用すると、より詳しい使い方が表示されます。
db2look によるデータベース内の表の模造
データベース内の表の DDL を抽出するには、-e オプションを使用します。 例として、SAMPLE2 という SAMPLE データベースのコピーを作成してみます。最初のデータベース内のすべてのオブジェクトが新しいデータベースに作成されるようにします。
C:\>db2 create database sample2
DB20000I The CREATE DATABASE command completed successfully.
C:\>db2look -d sample -e > sample.ddl
-- USER is:
-- Creating DDL for table(s)
-- Binding package automatically ...
-- Bind is successful
-- Binding package automatically ...
-- Bind is successful
sample.ddl ファイルをテキスト・エディターで開きます。 このファイルの DDL を新しいデータベースに対して実行するには、CONNECT TO SAMPLE ステートメントを CONNECT TO SAMPLE2 に変更する必要があります。 -l オプションを使用した場合には、表スペース・コマンドに関連したパスも、適切なパスを指すように変更する必要があるかもしれません。 この作業の間に、ファイルの内容の残りの部分を見てください。 サンプル・データベース内のすべてのユーザー表について、CREATE TABLE、ALTER TABLE、および CREATE INDEX ステートメントがあるはずです。
...
------------------------------------------------
-- DDL Statements for table "DB2"."ORG"
------------------------------------------------
CREATE TABLE "DB2"."ORG" (
"DEPTNUMB" SMALLINT NOT NULL ,
"DEPTNAME" VARCHAR(14) ,
"MANAGER" SMALLINT ,
"DIVISION" VARCHAR(10) ,
"LOCATION" VARCHAR(13) )
IN "USERSPACE1" ;
...
接続ステートメントを変更したら、以下のように、そのステートメントを実行します。
C:\>db2 -tvf sample.ddl > sample2.out
出力ファイル sample2.out で、すべてが正しく実行されていることを確認します。 エラーが発生した場合は、エラー・メッセージで問題を確認できます。 それらの問題を修正したら、もう一度ステートメントを実行します。
出力を見るとわかるように、すべてのユーザー表の DDL がエクスポートされています。 これはデフォルトの動作ですが、操作に含める表を細かく指定するためのオプションもあります。 例えば、STAFF 表と ORG 表のみを含めるには、以下のように -t オプションを使用します。
C:\>db2look -d sample -e -t staff org > staff_org.ddl
スキーマ Db2 を持つ表だけを含めるには、以下のように -z オプションを使用します。
C:\>db2look -d sample -e -z db2 > db2.ddl
表の統計の模造
テスト・データベースの目的がパフォーマンスのテストやパフォーマンスの問題のデバッグにある場合は、両方のデータベースで同一のアクセス・プランが生成されるようにすることが重要です。 最適化プログラムは、統計、構成パラメーター、レジストリー変数、および環境変数に基づいてアクセス・プランを生成します。 これらが 2 つのシステムで同一であれば、同じアクセス・プランが生成されると考えられます。
両方のデータベースにまったく同じデータをロードし、同じオプションを指定して runstats を実行すれば、統計は同じになるはずです。 しかし、データベースに格納されているデータが異なっていたり、データの一部しかテスト・データベースで使われていなかったりすると、まったく異なる統計になります。 このような場合は、db2look を使用すると、実動データベースから統計情報を収集して、それをテスト・データベースに追加することができます。 そのためには、更新可能なカタログ表の SYSSTAT セットに対する UPDATE ステートメントと、すべての表に対する RUNSTATS コマンドを作成します。
統計ステートメントを作成するためのオプションは -m です。 SAMPLE/SAMPLE2 の例に戻って、SAMPLE からの統計を収集し、それらを SAMPLE2 に追加します。
C:\>db2look -d sample -m > stats.dml
-- USER is:
-- Running db2look in mimic mode
前と同様に、出力ファイルを編集して、CONNECT TO SAMPLE ステートメントを CONNECT TO SAMPLE2 に変更する必要があります。 ここでまたファイルの残りの部分を見て、RUNSTATS ステートメントや UPDATE ステートメントのいくつかに何が含まれているのかを確認します。
...
-- Mimic table ORG
RUNSTATS ON TABLE "DB2"."ORG" ;
UPDATE SYSSTAT.INDEXES
SET NLEAF=-1,
NLEVELS=-1,
FIRSTKEYCARD=-1,
FIRST2KEYCARD=-1,
FIRST3KEYCARD=-1,
FIRST4KEYCARD=-1,
FULLKEYCARD=-1,
CLUSTERFACTOR=-1,
CLUSTERRATIO=-1,
SEQUENTIAL_PAGES=-1,
PAGE_FETCH_PAIRS='',
DENSITY=-1,
AVERAGE_SEQUENCE_GAP=-1,
AVERAGE_SEQUENCE_FETCH_GAP=-1,
AVERAGE_SEQUENCE_PAGES=-1,
AVERAGE_SEQUENCE_FETCH_PAGES=-1,
AVERAGE_RANDOM_PAGES=-1,
AVERAGE_RANDOM_FETCH_PAGES=-1,
NUMRIDS=-1,
NUMRIDS_DELETED=-1,
NUM_EMPTY_LEAFS=-1
WHERE TABNAME = 'ORG' AND TABSCHEMA = 'DB2 ';
...
DDL を抽出する -e オプションの場合と同様、-t および -z オプションを使用して、表集合を指定できます。
構成パラメーターと環境変数の抽出
最適化プログラムは、統計、構成パラメーター、レジストリー変数、および環境変数に基づいてプランを選択します。 統計の場合と同様に、必要な構成更新ステートメントや構成設定ステートメントも、db2look を使って生成できます。 そのためには、-f オプションを使用します。 以下に例を示します。
c:\>db2look -d sample -f>config.txt
-- USER is: DB2INST1
-- Binding package automatically ...
-- Bind is successful
-- Binding package automatically ...
-- Bind is successful
config.txt には、以下の例のような出力が含まれます。-- This CLP file was created using DB2LOOK Version 9.1
-- Timestamp: 2/16/2006 7:15:17 PM
-- Database Name: SAMPLE
-- Database Manager Version: DB2/NT Version 9.1.0
-- Database Codepage: 1252
-- Database Collating Sequence is: UNIQUE
CONNECT TO SAMPLE;
--------------------------------------------------------
-- Database and Database Manager configuration parameters
--------------------------------------------------------
UPDATE DBM CFG USING cpuspeed 2.991513e-007;
UPDATE DBM CFG USING intra_parallel NO;
UPDATE DBM CFG USING comm_bandwidth 100.000000;
UPDATE DBM CFG USING federated NO;
...
---------------------------------
-- Environment Variables settings
---------------------------------
COMMIT WORK;
CONNECT RESET;