前の記事で取り上げたようにDb2 for i ではテーブル(IBM i 用語ではPF、カッコ内以下同様)のトランザクションログ(ジャーナル)の取得は必須ではありません。
また、Db2 for i のデータベースオブジェクトを作成する方法も従来からあるIBM i OSコマンドとSQLの2つがありますが、テーブルとスキーマをIBM i OSコマンドで作成するとジャーナルは自動で取得されませんが、SQLで作成するとジャーナルが自動で取得されます。正確にはCREATE SCHEMAで作成されたスキーマ(ライブラリー)にCREATE TABLEでPFを作成することでジャーナルが自動取得されるようになります。
かつてはSQLからPF, ライブラリーを作成しても自動的にジャーナル取得はされませんでした、記憶ではIBM i 7.1あたりからの仕様変更だったと思います。
Db2 for i でのスキーマ作成方法2種
スキーマの作成
以下のように CRTLIBコマンド、SQLでCREATE SCHEMA の2つの方法があります
この時点で作成されたスキーマを確認してみると、
CRTLIBコマンドで作成したスキーマ内には何もオブジェクトがありません
**一方、CREATE SCHEMAしたスキーマでは、ジャーナル、ジャーナルレシーバー、それにシステムで使用するテーブルが19個(IBM i 7.4の場合)作成されています。
さらに2つの方法でテーブルを作成してみる
上記で作成したスキーマにIBM i OSコマンド、SQLでテーブルを作成してみます。
テーブルのカラム定義(DDS)はDEMOLIB/QDDSSRCに用意しました。以下のような感じです(一部分)
CRTPFコマンドで上記のDDSからテーブルを作成します。
CRTPF FILE(GOMALIB6/TOKMASP) SRCFILE(DEMOLIB/QDDSSRC)
続けてCREATE SCHEMAしたスキーマにSQLでテーブルを作成しますが、ここでは上で作成したテーブルからSQL DDLを作成してみます。ACSのスキーマ表示画面などから上で作成したGOMALIB6/TOKMASPを表示します。
※ACSのスキーマ表示はデフォルトではサインオンしているユーザープロフィールのデフォルトライブラリーリストのものしか表示されないので、スキーマの組込みメニューからGOMALIB6を追加します。
GOMALIB6を展開して表をクリックし、TOKMASPが表示し、さらに右クリックして SQLの生成 を選択します。
IBM i 7.4では生成したSQL DDLを別ウィンドウのSQLスクリプト実行画面に表示させるか、テキストファイルに保存することが出来ます。ここではSQLスクリプト実行画面に表示させます。(下図)
このDDLのスキーマ名をすべてGOMALIB7に変更して実行するとTOKMASP6にCRTPFで作成したのと同じ定義のテーブルが作成されます。この例では数個のSQLステートメントが実行され、テーブルが作成されます。
2つの方法で作成されたテーブルを比較する
どちらのテーブルもカラム(フィールド)属性などは同一ですが、いくつかの属性が異なります。ここではジャーナル(トランザクションログ)の取得状況について確認してみます。
DSPPFコマンドで作成した2つのテーブルを確認すると、CRTLIB/CRTPFで作成したテーブルではジャーナル処理が開始されていません(ファイルは現在ジャーナル処理中 NO)
GOMALIB6/TOKMASP
一方、CREATE SHCEMAで作成したテーブルはジャーナルが*BOTHイメージでジャーナルGOMALIB7/QSQJRNに取得開始されています。
GOMALIB7/TOKMASP
以上のようにスキーマ、テーブルの作成コマンドによってテーブル作成時点でジャーナル取得状況が変わることが分かります。もちろん、CRTPFしたテーブルもSTRJRNPFコマンドを実行してジャーナル取得することは可能です。
2/27追記:guriguriさんコメントの検証結果
Q2) もしも 4 パターンが可能な場合、テーブルのいくつかの属性が異なるのは、スキーマ作成方法とテーブル作成方法のどちらに起因しますか?
上記を検証してみました。IBM i 7.5(執筆時点の最新OSバージョン)です。
スキーマ(ライブラリー)を作成するコマンドがIBM i OS CRTLIBコマンドの場合、その中に作成されるテーブル(PF)はCRTPF, CREATE TABLEどちらの場合もジャーナル(トランザクションログ)は取得開始になりませんでした。
一方、CREATE SCHEMAで作成したスキーマ(ライブラリー)に作成したテーブル(PF)はCRTPF, CREATE TABLEどちらのコマンドでもジャーナルは取得開始時状態で作成されました。
※私の(やや遠い)記憶では、CREATE SHCEMAしてもCRTPFで作成したPFはジャーナルが自動開始にならなかったと思います。最近のIBM i OSのどこかのバージョンで変わったのかもしれません。(間違えて覚えているだけかもしれませんが‥^^;)