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


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

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

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

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

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

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

変更追跡情報の粒度

サプリメンタルロギングをSynitiから有効化した場合、Oracle REDOログへ書き込まれる情報はデータベースレベル、最小レベルともにPKと更新された値のみとなります。

この時、考慮するべき項目の1つに、補完インサート機能があります。
これは、Data Replicatorオプションから指定できる設定で、ターゲットテーブル上にUpdate対象のレコードが存在しない場合に、Updateの代わりにInsertを実行する機能です。

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

このため、ターゲットテーブル上でレコードが不足している場合に、補完インサートが実施されると、不十分な情報でInsertされる場合や、ターゲットテーブルのカラムでNULLを禁止している場合にはNot NULL制約違反が発生することがあります。

また、補完インサート以外にも、通常のミラーリングレプリケーションにて、ソーステーブル/ターゲットテーブルのカラムで主キー構成が異なる場合、Missing value for the primary key fieldエラーが出力されることがあります。

そのため、テーブル構成によっては以下のクエリをOracle側で実行し、REDOログへすべてのカラムのレコード情報を書き込むように構成することで、不十分な情報でInsertされる操作や主キー構成の違いによって発生するMissing value for the primary key fieldエラーを回避できます。

・データベースレベルの場合
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

・最小レベルの場合
ALTER TABLE テーブル名 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

まとめ

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

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

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

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

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