4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Db2 for i のテーブル、スキーマの2つの作成方法での差異

Last updated at Posted at 2024-02-25

前の記事で取り上げたように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つの方法があります
image.png

この時点で作成されたスキーマを確認してみると、
CRTLIBコマンドで作成したスキーマ内には何もオブジェクトがありません
image.png

**一方、CREATE SCHEMAしたスキーマでは、ジャーナル、ジャーナルレシーバー、それにシステムで使用するテーブルが19個(IBM i 7.4の場合)作成されています。
image.png

さらに2つの方法でテーブルを作成してみる

上記で作成したスキーマにIBM i OSコマンド、SQLでテーブルを作成してみます。
テーブルのカラム定義(DDS)はDEMOLIB/QDDSSRCに用意しました。以下のような感じです(一部分)
image.png

CRTPFコマンドで上記のDDSからテーブルを作成します。
CRTPF FILE(GOMALIB6/TOKMASP) SRCFILE(DEMOLIB/QDDSSRC)

続けてCREATE SCHEMAしたスキーマにSQLでテーブルを作成しますが、ここでは上で作成したテーブルからSQL DDLを作成してみます。ACSのスキーマ表示画面などから上で作成したGOMALIB6/TOKMASPを表示します。
※ACSのスキーマ表示はデフォルトではサインオンしているユーザープロフィールのデフォルトライブラリーリストのものしか表示されないので、スキーマの組込みメニューからGOMALIB6を追加します。
GOMALIB6を展開して表をクリックし、TOKMASPが表示し、さらに右クリックして SQLの生成 を選択します。
image.png

IBM i 7.4では生成したSQL DDLを別ウィンドウのSQLスクリプト実行画面に表示させるか、テキストファイルに保存することが出来ます。ここではSQLスクリプト実行画面に表示させます。(下図)
image.png

このDDLのスキーマ名をすべてGOMALIB7に変更して実行するとTOKMASP6にCRTPFで作成したのと同じ定義のテーブルが作成されます。この例では数個のSQLステートメントが実行され、テーブルが作成されます。

2つの方法で作成されたテーブルを比較する

どちらのテーブルもカラム(フィールド)属性などは同一ですが、いくつかの属性が異なります。ここではジャーナル(トランザクションログ)の取得状況について確認してみます。

DSPPFコマンドで作成した2つのテーブルを確認すると、CRTLIB/CRTPFで作成したテーブルではジャーナル処理が開始されていません(ファイルは現在ジャーナル処理中 NO)
GOMALIB6/TOKMASP
image.png

一方、CREATE SHCEMAで作成したテーブルはジャーナルが*BOTHイメージでジャーナルGOMALIB7/QSQJRNに取得開始されています。
GOMALIB7/TOKMASP
image.png

以上のようにスキーマ、テーブルの作成コマンドによってテーブル作成時点でジャーナル取得状況が変わることが分かります。もちろん、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のどこかのバージョンで変わったのかもしれません。(間違えて覚えているだけかもしれませんが‥^^;)

※CREATE SCHEMAで自動作成されたテーブルたちは何?などは別途追記してみたいと思います。
image.png

4
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?