Oracle 別スキーマ間でFAST REFRESH ON COMMITモードのマテリアライズドビューを作成する
スキーマMVIEW_MOTO
のテーブルTEST
に対して
スキーマMVIEW_SAKI
にFAST REFRESH ON COMMIT
モードのマテリアライズドビューを作成する
MVIEW_MOTO
にテーブルとマテリアライズドビューログの作成
CREATE TABLE test (id NUMBER,id2 NUMBER,del_flg NUMBER,CONSTRAINT test_pk PRIMARY KEY(id)); CREATE MATERIALIZED VIEW LOG ON test;
権限の付与
MVIEW_SAKI
にMVIEW_MOTO
のtest
テーブルとマテビューログに対してのSELECT権限を付与
GRANT SELECT ON mview_moto.test TO mview_saki; GRANT SELECT ON mview_moto.MLOG$_TEST to mview_saki;
ちなみにマテビューログの名前はMLOG$_[tablename]
となっている。
Oracleの場合オブジェクトの名称は30バイトまでなので30バイトのテーブル名称は以下のようになるみたい。
→20バイトで切られる、または20バイト切った際に同様のMLOG名称がある場合は末尾に数値がつく
create table abcdefghijklmnopqrstuvwxyzabcD(id int primary key); create materialized view log on abcdefghijklmnopqrstuvwxyzabcD; → MLOG$_ABCDEFGHIJKLMNOPQRST create table abcdefghijklmnopqrstuvwxyzabcE(id int primary key); create materialized view log on abcdefghijklmnopqrstuvwxyzabcE; → MLOG$_ABCDEFGHIJKLMNOPQRST1
MVIEW_SAKI
にMATERIALIZED VIEW関連の権限を付与
GRANT CREATE TABLE TO mview_saki; GRANT CREATE MATERIALIZED VIEW TO mview_saki; GRANT ON COMMIT REFRESH TO mview_saki;
MVIEW_SAKI
にマテリアライズドビューの作成
del_flg
が0
のデータのみ取得するように作成
CREATE MATERIALIZED VIEW test REFRESH FAST ON COMMIT AS SELECT id,id2 FROM mview_moto.test WHERE del_flg=0;
確認
- FAST REFRESH ON COMMITモードのマテリアライズドビューの作成が完了。
SQL>insert into mview_moto.test values(1,1,0); 1行が作成されました。 SQL>insert into mview_moto.test values(2,1,1); 1行が作成されました。 SQL>commit; コミットが完了しました。 SQL>select * from mview_moto.test; ID ID2 DEL_FLG ---------- ---------- ---------- 1 1 0 2 1 1 SQL>select * from mview_saki.test; ID ID2 ---------- ---------- 1 1