サプリメンタルロギング設定の影響に関して[Syniti DR]


Syniti DRではOracle DBをソースとして変更追跡する際に、トランザクションログ方式、ログサーバエージェント方式、トリガー方式から選択可能ですが、このうち、トランザクションログ方式とログサーバーエージェント方式ではOracleのRedoログを利用します。

このため、REDOログ上に変更追跡のために十分な情報が記録されるようにサプリメンタルロギングを有効化する必要が有ります。

この際に、サプリメンタルロギングのレベルを最小レベルとデータベースレベルから選択できますが、最小レベルに設定した場合、以下の注意点が有ります。

テーブル単位での設定であること

サプリメンタルロギングが最小レベルとなっている場合、この設定はテーブル単位に行われます。このため、最小レベルの場合、Syniti DRはレプリケーション作成時に指定したソーステーブルに対して自動的にサプリメンタルロギングを有効にします。

しかし手動でOracle側でのテーブル再作成した場合など、Syniti DR側が検知できないような変更でサプリメンタルロギングが対象テーブルに対して無効化された場合、Syniti DR側で都度レプリケーションジョブの再ビルド作業を実施する必要があります。
※サプリメンタルロギングがデータベースレベルとなっている場合には、テーブル再作成後も特に再ビルド作業は必要ありません。

変更追跡情報の粒度

サプリメンタルロギングの設定によってOracle REDOログへ書き込まれる情報の粒度が異なります。

  • データベースレベル:全てのレコード情報
  • 最小レベル:PKと更新された値のみ

Syniti DRの機能の1つとして、ターゲットテーブル上にUpdate対象のレコードが存在しない場合に、Updateの代わりにInsertを実行する補完インサートの機能があります。

最小のサプリメンタルロギングの場合、PKと更新されたカラムのみの情報しかREDOログに記録されていないため、上記の補完インサート機能でのInsert時にはPKと変更されたフィールドの値のみを使用し、変更されていないフィールドはNULLとなります。

このため、ターゲットテーブル上でレコードが不足している場合に、最小レベルのサプリメンタルロギングで補完インサートが実施されると、不十分な情報でInsertされる場合があります。

また、ターゲットテーブルのカラムでNULLを禁止している場合にはNot NULL制約違反が発生します。

まとめ

こうのような動作であるため、Syniti DRとしては運用での手間を減らすという意味でデータベースレベルでの運用を推奨しております。

ただ、Oracle REDOログに書き込まれる情報を抑えるため、サプリメンタルロギング設定を最小レベルで指定し運用されているお客様も、もちろんいらっしゃいます。

このような場合には、上記の2点にお気を付けください。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください