RDS for Oracle マテリアライズドビューのリフレッシュ関連のオプションを調べてみた
https://dev.classmethod.jp/articles/lim-oracle-materialized-view/
RDS for Oracle マテリアライズドビューのリフレッシュ関連のオプションを調べてみた | DevelopersIO
下記のブログではOracle DBをマテリアライズドビューを利用してデータを移行する方法をまとめました。 しかし、前回のブログの方法では移行先のデータベースに差分ができたら、手動コマンドを実行して最新状態に更新する必要がありました。 マテリアライズドビューには差分を自動で更新できることを含めていろんな設定があります。 本ブログではマテリアライズドビューのリフレッシュと関連があるオプションをまとめました。 リフレッシュ以外の他オプションの説明は下記のページをご参考ください。(Oracle Database 19) AS SELECT文 AS SELECT文のみ作成すると、全ての設定がデフォルトになっているマテリアライズドビューを作成します。 リフレッシュとは関係ないですが、ここにオプションを追加して行きます。 AS : マテリアライズド・ビューを定義するクエリを指定 実行結果がマテリアライズド・ビューに格納されて、有効なクエリーである必要がある 例 本ブログではマテリアライズドビューを作成するまでの手順はスキップします。(全ての手順は下のブログの手順3までは省略します。) 下記のようにデータベースリンクを利用して他のデータベースにあるテーブルのデータを持ってくるのもできます。 ※ remote_site:データベースリンク名 もし、同じデータベースが元になるマテリアライズドビューを作成したい時には下記のように実行します。 BUILD {IMMEDIATE | DEFERRED} BUILD {IMMEDIATE | DEFERRED} : マテリアライズドビューにいつデータを入れるかを決定 IMMEDIATE デフォルト マテリアライズドビューの作成と一緒にデータを入れます。 DEFERRED マテリアライズドビューを作成する時にデータを入れません。 データを入れるためには別途のコマンド実行が必要 例(IMMEDIATE、DEFERRED) IMMEDIATEはマテリアライズドビューを作成するタイミングにデータを入れるので、ビューを作成した後に確認してみるとデータが入っています。 DEFERREDで設定ですると、ビューを作成する時にデータを入れないです。 REFRESH {FAST | COMPLETE | FORCE} REFRESH : 送信元のテーブルとの差分が発生した時にその内容を更新する作業 FAST 移行元のデータベースにマテリアライズドビューログが必要。(MLOG$[table_name]・RUPD$[table_name]) ログから更新レコード情報を確認して増分方式でデータをリフレッシュ 差分だけ更新するので、処理速度が早く 一部のテーブルに対して制限事項がある FASTリフレッシュの制限事項 COMPLETE 既存のデータを削除して、送信元デーブルの全体のデータを再読み込んで更新する方法 マテリアライズドビューログは必要ない FORCE デフォルト まずはFASTでリフレッシュを実行して、実行できない場合はCOMPLETE実行するオプション 例(FAST、リフレッシュの手動実施する方法) FAST設定 COMPLETE と FORCE をする時にはログの設定はしなくても構いません。(FORCE にログがないと、FASTは失敗してCOMPLETEで実行する) 手動実施する方法もあります。 ON {COMMIT | DEMAND | STATEMENT} ON {COMMIT | DEMAND | STATEMENT} : リフレッシュのトリガー設定 COMMIT 元テーブルのトランザクションがコミットされたデータの変更によってリフレッシュを実行 リモートテーブル(他DBにあるテーブル)を使用するマテリアライズド・ビューではサポート不可 ON COMMITのリフレッシュの制限事項 DEMAND デフォルト 手動や予約されたタスクによってリフレッシュを実行 STATEMENT DML操作が実行される時にリフレッシュする マテリアライズド・ビューを作成するタイミングに作成して、その後は変更不可 REFRESH FASTと一緒に設定する必要ある ON STATEMENTのリフレッシュの制限事項 例(COMMIT) COMMIT設定をするためには同じデータベースにあるテーブルを元に作成できます。 作成すると、元のテーブルでトランザクションがCommitがある場合に自動的にリフレッシュします。 START WITH {日時式} / NEXT {日時式} ON DEMANDを指定している場合のみ設定可能で、START WITH・NEXTを指定すると、ON …
DevelopersIO