Oracleデータベース(Source)にサブリメンタルロギングの設定

  • DMS を使って Oracle をソースデータベースにする場合、サプリメンタルロギングを有効にする必要があります。

01

  1. DBeaver のOracle - handson source databaseを右クリックします。

  2. コンテキストメニューからSQL Editorを選択します。

サプリメンタルロギングとは、Oracle の REDO ログに追加の情報を記録する機能です。
これにより異なるデータベースエンジン間でも、更新された行を一意に識別することができるようになります。


  • 通常のオンプレミスの Oracle データベースの場合は、alter 文によりパラメータを設定していきますが、RDS for Oracle の場合は、専用のプロシージャを利用してサプリメンタルロギングを有効にします。

02

SQL Editor に以下を入力して Ctrl + Enter または、オレンジの ▶︎ アイコンをクリックします。

call rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  1. エラーダイアログが表示されず正常終了することを確認します。

03

詳細は DMS のドキュメントを参照してください。
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html


プライマリキーロギングを有効にします。

call rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD',
 'PRIMARY KEY');

サプリメンタルロギングが有効になったことは以下の SQL で確認できます。

select supplemental_log_data_min, supplemental_log_data_pk from v$database;
  • カラムとも YES と表示されればサプリメンタルロギングは有効になっています。

04


MLB_DATA / NFL_DATA / NFL_STADIUM_DATA はプライマリキーがないため、以下の SQL でサプリメンタルロギングできるように個別に設定します。

alter table dms_sample.mlb_data
add supplemental log data (ALL) columns;
alter table dms_sample.nfl_data
add supplemental log data (ALL) columns;
alter table dms_sample.nfl_stadium_data
add supplemental log data (ALL) columns;

SQL は 1 行ずつ実行してください。

上記のように alter table 文でプライマリーキーのないテーブル個別にサプリメンタルロギングを設定せずに、call rdsadmin.rdsadmin_util.alter_supplemental_logging(‘ADD’, ‘ALL’) で、データベース全体にサプリメンタルロギングを適用することも可能ですが、REDO ログのサイズが大きくなる点に注意してください。


MLB_DATA / NFL_DATA / NFL_STADIUM_DATA の全列がサプリメンタルロギングされていることを以下の SQL で確認します。

select table_name, log_group_type from dba_log_groups
where table_name in ('MLB_DATA', 'NFL_DATA', 'NFL_STADIUM_DATA')
and log_group_type like 'ALL%';
  1. LOG_GROUP_TYPE 列の値が ALL COLUMN LOGGING になっている 3 行が返ってくれば有効になっています。

05


  • また、Oracle をソースデータベースにする場合、アーカイブログモードを有効にする必要があります。

  • RDS for Oracle ではバックアップ保持期間が 1 日以上の場合はアーカイブログモードになります。

以下の SQL でアーカイブログモードが有効であることを確認します。

select log_mode from v$database;

ARCHIVELOG と表示されれば有効になっています。

06