2008年2月1日金曜日

DB2 v8.2 循環ロギングを設定する

定義

ここでは、データベースへの変更が記録されたファイルをログと呼びます。
(情報やイベントやエラー情報を書き出すログではありません。)
ログには複数種類(後述)があり、ラッシュリカバリー、ロールフォワードやロールバックに使われるものです。

DB2では、ログの状態によって用語を区別しています。

a. アクティブログ 
今まさに使っているログです。commit前の情報が含まれます。DBがクラッシュしたときに直前の状態に戻すために使われます。これがないとDBは復帰できません。このタスクで扱う対象ではありません。

b. オンライン・アーカイブログ
commit済みのログです。DBの起動/稼働には不要で、ロールフォワードやロールバックに使います。

c. オフライン・アーカイブログ
[b.]のログを管理のため別の場所に移したもの。あくまで運用の観点からの差異であり、ログの観点で言えば[b.]と同じです。DB2は、[b.]が一杯になったときに、ログを退避する機能を持っています。退避されたログを便宜的に「オフライン・アーカイブ」と呼びます。(異なる切り口での用語を混在させることは、話をややこしくするだけですね。)

b.-1 一次ログ、二次ログ
オンライン・アーカイブログに一次ログと二次ログというパラメータを指定することができます。一次ログに割り当てた分が溢れると、二次ログに移る、という仕組みのようです。(これも話をややこしくしているだけのような気がします。)今のタスクでは意識する必要はありません。

放置されることが多い開発環境では、アーカイブログ(b. c. d.)を設定しておくと、ログが満タンになってしまうことがままあります。循環ログを指定してログが増えつづけないように設定することで、ログ溢れによるアプリケーションの停止を回避できます。

ちなみにDB2のデフォルトは循環ログです。

手順概要

a. DBに接続します。

b. 以下のパラメータを変更します。
LOGRETAIN=NO  (デフォルト)
USEREXIT=NO (デフォルト)
LOGARCHMETH1=OFF (デフォルト)
LOGARCHMETH2=OFF (デフォルト)

c. DB2を再起動します。

手順例
db2inst1@ホスト名 [sql/] $ db2 connect to icmnlsdb

データベース接続情報

データベース・サーバー = DB2/6000 8.2.7
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = ICMNLSDB

db2inst1@ホスト名 [sql/] $ db2 -f sys.sql | egrep -i '(logretain|userexit|logarchmeth)'
リカバリー用ログの保持使用可能 (LOGRETAIN) = RECOVERY
ロギング用ユーザー出口使用可能 (USEREXIT) = OFF
第 1 ログ・アーカイブ・メソッド (LOGARCHMETH1) = DISK:/cm/lsdb/archive_log/
logarchmeth1 のオプション (LOGARCHOPT1) =
第 2 ログ・アーカイブ・メソッド (LOGARCHMETH2) = OFF
logarchmeth2 のオプション (LOGARCHOPT2) =

db2inst1@ホスト名 [sql/] $ grep -v ^-- sys.sql
update db cfg using logretain NO
update db cfg using userexit NO
update db cfg using logarchmeth1 OFF
update db cfg using logarchmeth2 OFF
db2inst1@ホスト名 [sql/] $ db2 -f sys.sql
DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に終了しました。
SQL1363W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
これらの構成パラメーターでは、変更を有効にする前にすべてのアプリケーションをこの
データベースから切断する必要があります。

DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に終了しました。
SQL1363W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
これらの構成パラメーターでは、変更を有効にする前にすべてのアプリケーションをこの
データベースから切断する必要があります。

DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に終了しました。
SQL1363W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
これらの構成パラメーターでは、変更を有効にする前にすべてのアプリケーションをこの
データベースから切断する必要があります。

DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に終了しました。

db2inst1@ホスト名 [sql/] $ db2stop
2008-02-01 10:27:12 0 0 SQL1025N データベースがまだアクティブになっているために、データベース・マネー
ジャーが停止されませんでした。
SQL1025N データベースがまだアクティブになっているために、データベース・マネージャーが停止されませんでした。
db2inst1@ホスト名 [sql/] $ db2 force application all
DB20000I FORCE APPLICATION コマンドが正常に終了しました。
DB21024I このコマンドは非同期であり、即時に有効にならない場合もあります。

db2inst1@ホスト名 [sql/] $ db2stop
db2inst1@ホスト名 [sql/] $ db2start
2008-02-01 10:28:01 0 0 SQL1063N DB2START の処理が正常に終了しました。
SQL1063N DB2START の処理が正常に終了しました。
db2inst1@ホスト名 [sql/] $ db2 connect to icmnlsdb
db2inst1@ホスト名 [sql/] $ db2 -f sys.sql | egrep -i '(logretain|userexit|logarchmeth)'
リカバリー用ログの保持使用可能 (LOGRETAIN) = OFF
ロギング用ユーザー出口使用可能 (USEREXIT) = OFF
第 1 ログ・アーカイブ・メソッド (LOGARCHMETH1) = OFF
logarchmeth1 のオプション (LOGARCHOPT1) =
第 2 ログ・アーカイブ・メソッド (LOGARCHMETH2) = OFF
logarchmeth2 のオプション (LOGARCHOPT2) =

0 件のコメント: