1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(QA)Db2 for i のテーブル(物理ファイル)にHibernateからアクセスしたらSQL7008エラーが発生

Last updated at Posted at 2024-02-16

本日頂いたQAです。

Q.Db2 for i のテーブル(物理ファイル)にHibernateからアクセスしたらSQL7008エラーが発生した

原因:SQL7008 はDb2 for iのテーブルでジャーナル(トランザクション・ログ)が取得しない設定となっているため

であることが多いようです。
image.png

SQL7008を検索すると、Db2でトランザクション処理がreadyになっていない、ジャーナル処理がされていない、などがヒットすると思うのですが、わかりにくいですよね。。

回避策:対象の物理ファイルでジャーナル取得を開始する

となります。

ジャーナルの取得開始手順

手順1. ジャーナルレシーバーを作成

任意のライブラリーにジャーナルレシーバーを作成してください。
ジャーナル取得するPF(テーブル)と同一のライブラリーでもジャーナル専用に別のライブラリーを作成してもOKです。
例: CRTJRNRCV JRNRCV(GOMALIB/JRNRCV01) TEXT('TEST JRNRCV')
image.png

手順2. ジャーナルを作成

一般には①のジャーナルレシーバーと同じライブラリーにジャーナルを作成してください。この際、①で作成したジャーナルレシーバーの名前をジャーナルレシーバーのパラメーターに指定します。
例:CRTJRN JRN(GOMALIB/JRN01) JRNRCV(GOMALIB/JRNRCV01)

image.png

手順3. 物理ファイル(テーブル)でジャーナル取得を開始

SQL7008エラーが出ている物理ファイルに対してジャーナルを開始します。STRJRNPFコマンドを使用します。
*例;STRJRNPF FILE(GOMALIB/TESTPF1) JRN(GOMALIB/JRN01) IMAGES(BOTH)
上記コマンド実行後、再度P.1のDSPFDコマンドでジャーナル取得が開始されているかご確認ください。
IMAGESパラメーターは *AFTERでもいいと思われます。
image.png

ちなみにテーブルのジャーナル取得が開始されているか、終了しているか(ENDJRNPFコマンドを実行するとテーブル単位にジャーナル取得しないこともできる)は、DSPFDコマンドで確認できます。
下記のように ファイルは現在ジャーナル処理中がNOなら取得していない、YESなら取得している、となります。
image.png

補足:Db2 for i ではトランザクション・ログ(ジャーナル)をテーブル単位で取得する・しないが選択できる。

とくに、昔作られたアプリケーションではジャーナルを取得しない場合が多数派を占めると予想されます。
なぜ?大昔、1980~90年代前半、HDDは1台200~400GBでなおかつ現代に比べ大変高価でした。結果、ジャーナルを取得するとバンバン原価が上がる、という事になったわけです。そんなわけでジャーナルを取らないアプリケーションが多かったですし、パフォーマンス面でも(ジャーナル取らないのは)メリットが明確にありました。(ジャーナル取ると10~20%程度?処理時間が伸びる的な負荷があったと思います。)
最近では上記の制限は(ストレージ単価、ハードウェア性能の劇的な低価格化・高速化などで)すべて無くなっているため他のデータベースと一緒でジャーナルを取得する方が増えていると思います。

最近のIBM i (IBM i 7.1以降あたりでしたでしょうか。)では、SQLで、CREATE SCHEMA, CREATE TABLEすると自動でジャーナル・ジャーナルレシーバーが作成されてジャーナルはデフォルトで取得されるようになっています。(当記事の手順1~3が自動で設定されます)

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?