マテリアライズドビュー(スナップショット)
※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください
--MVの元表作成
--CREATE TABLE TEST2 (COL1 NUMBER PRIMARY KEY, COL2 VARCHAR2(10));
--MVログ作成(主キー)
CREATE MATERIALIZED VIEW LOG ON TEST2;
CREATE MATERIALIZED VIEW LOG ON TEST2 WITH PRIMARY KEY;
--MVログ作成(ROWID)
CREATE MATERIALIZED VIEW LOG ON TEST2 WITH ROWID;
--MVログ作成(主キー+ROWID)
CREATE MATERIALIZED VIEW LOG ON TEST2 WITH PRIMARY KEY,ROWID;
--読み取り専用MV
--5分間隔で自動リフレッシュ
CREATE SNAPSHOT MV_TEST2
REFRESH FAST --FASTは高速リフレッシュ COMPLETEは完全リフレッシュ FORCEは強制
START WITH SYSDATE
NEXT SYSDATE + (1/288)
AS SELECT * FROM TEST2;
--手動リフレッシュ+作成時のリフレッシュなし
CREATE SNAPSHOT MV_TEST3
BUILD DEFERRED
REFRESH ON DEMAND
AS SELECT * FROM TEST2;
--COMMIT時リフレッシュ
CREATE SNAPSHOT MV_TEST4
REFRESH COMPLETE ON COMMIT
AS SELECT * FROM TEST2;
--書き込み可能MV
CREATE SNAPSHOT MV_TEST5
FOR UPDATE
AS SELECT * FROM TEST2;
--手動リフレッシュ(Fは高速リフレッシュ、Cは完全リフレッシュ)
EXECUTE DBMS_SNAPSHOT.REFRESH('MV_TEST2','C');
--10g以降完全リフレッシュ前データの削除がdeleteに変わったためatomic_refreshをfalseにしてtruncateにすることで高速化できる
EXECUTE DBMS_SNAPSHOT.REFRESH('MV_TEST2','C',atomic_refresh=>false);
--リフレッシュグループ作成(自動的に5分毎にリフレッシュ)
EXECUTE DBMS_REFRESH.MAKE('REFRESH_GROUP1','',SYSDATE,'SYSDATE + 1/288');
--リフレッシュグループにメンバを追加
EXECUTE DBMS_REFRESH.ADD (NAME => 'REFRESH_GROUP1', LIST => 'MV_TEST2,MV_TEST3');
--リフレッシュグループのリフレッシュ
EXECUTE DBMS_REFRESH.REFRESH('REFRESH_GROUP1');
--リフレッシュグループのメンバ削除
EXEC DBMS_REFRESH.SUBTRACT(NAME => 'REFRESH_GROUP1',LIST => 'MV_TEST2');
--リフレッシュグループ削除
EXECUTE DBMS_REFRESH.DESTROY ('REFRESH_GROUP1');
マニュアル
SQL リファレンス 10g リリース2(10.2)リファレンス 10g リリース2(10.2)
アドバンスト・レプリケーション 10g リリース2(10.2)
アドバンスト・レプリケーション・マネージメントAPIリファレンス 10g リリース2(10.2)

折りたたみ
展開