マテリアライズドビュー(スナップショット)

※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください

--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)
★ORACLE案件承ります