マテリアライズドビュー(スナップショット)
※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください--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)