Q. Db2 for i テーブル作成時、SQL7905の警告がでる
Q.
Db2 for iにCREATE TABLE でテーブルを作成しました。テーブルは正常に作成されましたが、以下のエラーが出ました。これは何ですか?
■実行したCREATE TABLE
CREATE TABLE GOMALIB.EMPSAMP
(EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
NAME CHAR(30),
SALARY DECIMAL(10,2),
DEPTNO SMALLINT,
LEVEL CHAR(30),
HIRETYPE VARCHAR(30) NOT NULL DEFAULT 'New Employee',
HIREDATE DATE NOT NULL WITH DEFAULT) ;
※上記はレッドブック記載のFINAL TABLEのサンプルSQLです。ただしライブラリー(スキーマ)名 GOMALIBを追加して実行しています。
エラー(警告)を再掲すると、
となっています。
警告の原因
上記のエラーは、テーブルを作成したDb2 for i のスキーマ(ライブラリー)がCRTLIBコマンドで作成されていたためでした。古いIBM i バージョンでCRTLIBコマンドで作成されたライブラリーを新しいIBM i 7.6などに復元した場合でも上記のような警告が出ます。この警告の意味はCREATE TABLEしたテーブルにはジャーナル(DBログ)取得が自動開始されていないことを指しています。
対応方法
方法は主に2つあります。
方法①:上記のテーブルにSTRJRNPFコマンドでジャーナルを開始する
前提として、ジャーナルレシーバーやジャーナルなどが作成済みである、という事があります。作成されていない場合はこれらも作成してから、STRJRNPFコマンドを作成したテーブルに対し開始します。
方法②:ライブラリー(スキーマ)をCREATE SCHEMAコマンドで作成する
根本的にはテーブルを作成するライブラリーをCREATE SCHEMA で作成しなおす(新規作成する)のが理想です。このようにすれば以降作成されるテーブルにもジャーナル処理が自動開始され、SQL7905の警告は出なくなります。
作成されたライブラリー(スキーマ)の確認
上記の方法②で作成したライブラリーの中身を見てみます。CREATE SCHEMAで作成した後、上記のサンプルSQLでテーブルを1つ追加した状態が下記です。

1行目、2行目がCREATE SCHEMA実行時、同時に作成されたジャーナルレシーバーとジャーナルです。
3行目がCREATE TABLEで作成したテーブルです。
以下はDb2 for i のDBMSが使用する統計情報のテーブルなどで、、
2ページ目(下図)までいろいろ自動作成されています。

