ushidayの日記

主に「IBMi」のメモに・・・

DB2トランザクション・ログがフル (SQL0964C)

IBM i上のDB2から、Windows上のDB2 Express Cにデータをコピーする際に、あるテーブルの全レコードを"DELETE"したら、たまたま件数が多かった(12万件程度)のもあって、「SQL0964C データベースのトランザクション・ログがいっぱいです。 SQLSTATE=57011」というエラーが返された。
対象法として、

  1. トランザクションを細かくする
  2. ログ容量を増やす

が有る。「1」の方法はコピーを作る上では面倒なので、「2」のログサイズを増やしておいた。増やし方は以下の通り。

    • 「コントロールセンター」を開き、該当するデータベースを右クリック。
    • 「データベース・ロギングの構成」を選ぶ。
    • 「ロギング・サイズ」の項目で、”1次ログ・ファイルの数”、”2次ログ・ファイルの数”、”各ログ・ファイルのサイズ”のページ数(ページ当たり4K)を増やす。
    • 増やした後は、データベースを再起動する。
      • 1次ログ・ファイル(初期値13)・・・データベース起動時に確保される。ログファイル。
      • 2次ログ・ファイル(初期値4?)・・・1次ログで不足した際に、1つずつ確保されるログファイル。
      • ファイルサイズ(初期値1024)・・・ログファイルのページ数(1ページ4K)

2次ファイルを多用するとパフォーマンス的には、1次ファイルより悪い。

db2 get db cfg for | grep LOG」でコマンドラインでも確認可能