また、補完インサート以外にも、通常のミラーリングレプリケーションにて、ソーステーブル/ターゲットテーブルのカラムで主キー構成が異なる場合、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 Data Replication(以下Syniti)を利用することで、あらゆるRDBMSからDWHなどのデータプラットフォームへ開発を行うことなく手軽にデータ連携が可能です。 ※Synitiがサポートしているデータベースについては、こちらをご覧ください。
Syniti Data Replication (以下Syniti DR)では初回のレプリケーション時や任意のタイミングで全件転送を行うリフレッシュ機能が提供されています。
この全件転送の流れとしては、まずターゲットテーブルをキレイにするため、ターゲットテーブルのデータをすべて削除(TruncateまたはDelete)し、その後ソーステーブルのデータをSelect、ターゲットテーブルにInsertするものとなります。
ざっくりと、以下のような流れになります。
===============================
① ターゲットテーブルのデータを削除(TruncateやDelete)
② ソーステーブルのデータを取得(Select)
③ Syniti DRサーバ内部でInsertクエリの生成
④ ターゲットテーブルにデータを挿入(Insert)
===============================
この影響を少しでも軽減するため、Syniti DR 9.7.2.28より、ステージングリフレッシュ機能が追加されました。
レプリケーションジョブのリフレッシュオプションにて、リフレッシュステージングタブをTrueとすることで機能が使用できます。
この機能を使用する場合、リフレッシュ時には通常のリフレッシュとは異なり以下のような流れになります。
通常のリフレッシュには無い部分は赤文字にしています。
==================================== ① ステージングテーブルが存在しない場合には、
Create Tableクエリからステージングテーブルを作成
② ソーステーブルのデータを取得(Select)
③ Syniti DRサーバ内部でInsertクエリの生成 ④ ステージングテーブルに対してデータを挿入(Insert) ⑤ ステージングテーブルへのデータ挿入完了後、コミット
⑥ ターゲットテーブルのデータを削除(TruncateやDelete) ⑦ ⑤のステージングテーブルをデータソースとして、
ターゲットテーブルにデータを挿入(Insert into Select) ====================================
このように、処理自体は増えていますが、通常同一データベース内部で実行される操作(Insert into Select)処理は高速に実行されるため、特にネットワークトラフィックが要因となり、ターゲットテーブルにレコードがすべて存在しない時間が長引いている場合には、このステージングリフレッシュ機能を使用することで影響を軽減することができます。