データベースのとってログは非常に大事です。データファイル同等、それ以上に大事かもしれません。
だからこそログファイルの仕組みについてはちゃんと理解しておく必要があります。
故意的ではなくても、削除してはいけないログファイルを削除してしまったら・・なんて考えるだけでも恐ろしいですね
どのDBMSでもログファイルはあり、基本的な考え方は同じですが、DBMSによってこのログファイルの使われ方・動きは異なります。
今回は超基本的なDb2のログファイルの種類とその動きについて備忘録として残します。
#DBのログの種類
####・アクティブログ
一言でいうと、現在DBMSによって使用されているログファイルのことです。
メモリーからディスクへの書き込みがまだ行われていない処理内容でCOMMIT済みの処理、未COMMITの処理を含むログファイルです。
このアクティブログはクラッシュリカバリーの際に使用されるファイルであり、このログファイルは絶対に削除してはいけません。削除してはいけないというよりも、ユーザーはこのファイルを触らない!という感覚の方がいいかと。
####・アーカイブログ
現在Db2によって使用されていないログ・ファイルのことです。
ファイルに含まれている処理内容がすべてCOMMIT済みになり、ディスクへの書き込みも完了しているログファイルのことを言います。
#アクティブログの種類
アクティブログにも種類があり、1次ログ(LOGPRIMARY)と2次ログ(LOGSECOND)があります。
種類といっても、ファイル自体は同じであり、アサインされるタイミングとその使われ方に違いがあります。
####1次ログ
データベースのactivate時に一括して用意されます。
基本的に1次ログ内でおさまるようなファイルサイズ・ファイル数を指定しておくことが推奨されます。
ただ、あまりにも大きい数を指定するとデータベースのactivateに時間がかかることがありますので注意してください。
####2次ログ
1次ログがすべて使用されていて、再利用できない時に使用します。
1次ログがactivate時に一斉に用意されるのとは異なり、2次ログは必要になる度に1つずつ用意されます。
この2次ログファイルも使い尽くしたときにトランザクションログフルが発生しSQLが失敗します。
#アーカイブするとは?
ログをアーカイブするというのは広義的な意味を持っていて、正確にいうと2つの処理をさします。
・ログファイルがクローズする
・クローズされたログファイルがアーカイブログパスにコピー
どちらの意味で使用しているかはケースバイケースです。
恥ずかしながら、私は最初は、後者の意味だけをアーカイブというのだと勘違いしておりました
#アーカブログの種類
アーカイブの意味が2つあるため、どちらの意味のアーカイブ処理を行われたログファイルなのかによって、アーカイブログの名前も正確にいうと分かれます。
・オンラインアーカイブログ
アクティブログがいっぱいになり、かつファイルに含まれている処理内容がすべてCOMMIT済みになり、ディスクへの書き込みも完了したログファイルのことを言います。
つまり前者のファイルのクローズという意味のアーカイブ処理が行われたログファイルのことを言います。
オンラインアーカイブログはアクティブログパスに存在し、アーカイブログパスへコピーする対象となります。
・オフラインアーカイブログログ
アクティブログパス以外の場所(アーカイブログパス)にコピーされたアーカイブログファイルのことを言います。
つまり後者の意味のアーカイブ処理が行われたログファイルのことを言います。
#アーカイブが実行されるタイミング
####ログファイルがクローズされるタイミング
基本的には、ログ・ファイルがいっぱいになり、書かれている更新がCOMMITされればクローズされます。
ただし、ログファイルがいっぱいにならずとも、以下の場合にMOログファイルはクローズされます。
・データベースが非活動化されたとき
・オンライン・バックアップの取得
・ARCHIVE LOG コマンドの実行
・SET WRITE SUSPEND コマンドの実行
####アーカイブログパスにコピーされるタイミング
オンラインアーカイブログがアーカイブパスへコピーされるタイミングは非同期であるため、クローズ後すぐに同期されるわけではありません。
#オンライン・アーカイブログのメンテナンスの必要性
オンラインアーカイブログは、アーカイブログパスにコピーされた後、アクティブログパスにそのまま残ります。ただしユーザーがこのオンライン・アーカイブ・ログをメンテナンスする必要はありません。
なぜなら残されたアクティブログファイルは、他のアクティブログがいっぱいになり、新たにログ・ファイルが必要になったときに、リネームされて再利用されるからです。
ただここで再利用されるのは1次ログとしてアサインされていたオンラインアーカイブログだけであることに注意してください。
基本的にDb2は1次ログとして指定したファイルだけでログの書き出し・アーカイブ、再利用を行います。
1次ログでは足りないときに、2次ログをアサインするので、一時的に2次ログがアサインされ使用されたとしても、その後1次ログ内だけでログの書き出し・アーカイブ・再利用をしようとします。
では、2次ログとしてアサインされたオンラインアーカイブログログはメンテナンスする必要はあるのでしょうか?
結論からいうと、こちらもメンテナンス不要です。データベースがdeactivateされるタイミングで削除されます。
#まとめ
ここまで書いたことをまとめるとこんな感じです。
・Db2で作成・使用されるログにはアクティブログとアーカイブログがある
・アーカイブログとはその名の通りアーカイブされたログファイルのことであるが、アーカイブには2つの意味があり、どちらの意味のアーカイブ操作なのかによってアーカイブログの名前が異なる。
・1つ目のアーカイブの意味はファイルのクローズという意味で、クローズされたログファイルをオンラインアーカイブログという
・2つめのアーカイブの意味はアーカイブログパスにオンラインアーカイブログをコピーするという意味で、アーカイブログパスにコピーされたログファイルをオフラインアーカイブログという
・オンラインアーカイブログは、アーカイブパスへのコピーが行われた後もそのままアクティブログパスに残るが、メンテナンスは不要
最後まで読んでいただきありがとうございました!
#参考情報
[DB2 LUW] ログ・ファイルがアーカイブされるタイミング
https://www.ibm.com/support/pages/node/501221