I作成したテーブルDEPTとEMP:高速リフレッシュは、マテリアライズド・ビューをフォローよう
create table DEPT
(dept_no number , dept_name varchar(32) , dept_desc varchar(32),
CONSTRAINT dept_pk Primary Key (dept_no));
create table EMP
(emp_no number, dept_no number, CONSTRAINT emp_pk Primary Key (emp_no,dept_no));
insert into dept values (10,'it','desc1');
insert into dept values (20,'hr','desc2');
insert into emp values (1,10);
insert into emp values (2,20);
私が作成したROWIDでこれらの表にマテリアライズド・ビュー・ログを、次のようにマテリアライズド・ビューを:
create materialized view log on emp with rowid;
create materialized view log on dept with rowid;
create materialized view empdept_mv refresh fast on commit as
select a.rowid dept_rowid, b.rowid emp_rowid, a.dept_no,b.emp_no
from dept a, emp b
where a.dept_no=b.dept_no ;
select * from emp;
EMP_NO DEPT_NO
---------- ----------
1 10
2 20
3 30
select * from dept;
DEPT_NO DEPT_NAME DEPT_DESC
---------- -------------------------------- --------------------------------
10 it desc1
20 hr desc2
30 it desc3
select * from empdept_mv;
DEPT_ROWID EMP_ROWID DEPT_NO EMP_NO
------------------ ------------------ ---------- ----------
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA 10 1
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB 20 2
新しいレコードを挿入してCOMMITしました。 ..しかし、マテリアライズド・ビューをチェックすると、新しいレコードはマテリアライズド・ビューに表示されません。私はperとして、高速かつ完全なリフレッシュのための手順を実行したときに
insert into dept values (30,'it','desc3');
commit;
insert into emp values (3,30);
commit;
select * from empdept_mv;
DEPT_ROWID EMP_ROWID DEPT_NO EMP_NO
------------------ ------------------ ---------- ----------
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA 10 1
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB 20 2
さて、高速リフレッシュはMVIEWを更新しませんが、完全リフレッシュを行います。 (注:しかしMVIEWまだをCOMMIT最新の情報に更新される)
execute DBMS_MVIEW.REFRESH('empdept_mv', 'F', '', TRUE, FALSE, 0,0,0,FALSE, FALSE);
PL/SQL procedure successfully completed.
DEPT_ROWID EMP_ROWID DEPT_NO EMP_NO
------------------ ------------------ ---------- ----------
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA 10 1
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB 20 2
execute DBMS_MVIEW.REFRESH('test_mview2', 'C', '', TRUE, FALSE, 0,0,0,FALSE, FALSE);
PL/SQL procedure successfully completed.
DEPT_ROWID EMP_ROWID DEPT_NO EMP_NO
------------------ ------------------ ---------- ----------
AAAli5AABAAAPZ6AAA AAAli7AABAAAQs6AAA 10 1
AAAli5AABAAAPZ6AAB AAAli7AABAAAQs6AAB 20 2
AAAli5AABAAAPZ6AAC AAAli7AABAAAQs6AAC 30 3
示すようDBMS_MVIEW.EXPLAIN_MVIEW出力は、(capability_name --Possible-- msgtxt)
- PCT --N- -
- REFRESH_COMPLETE -Y-は
- REFRESH_FAST -Y-は
- REWRITE -N-で
- PCT_TABLE -N-でOracleエラー: 詳細
- REFRESH_FAST_AFTER_INSERT -Y-は
- REFRESH_FAST_AFTER_ONETAB_DML -Y-は
- REFRESH_FAST_AFTER_ANY_DML -Y-は
- REFRESH_FAST_PCTためRELATED_NUMとRELATED_TEXTを参照してください - REWRITE_FULL_TEXT_MATCH -N-でクエリー・リライトをd
- 詳細についてはRELATED_NUMと RELATED_TEXTを参照してください。N-- PCTは、任意の詳細母校
- REWRITE_FULL_TEXT_MATCH -N-でのOracleエラーで のテーブルの上には不可能です にisabled
- REWRITE_PARTIAL_TEXT_MATCH -N-では-N-でクエリー・リライトを で無効になっているビューは にクエリー・リライトのいずれかのタイプをサポートすることはできません
- REWRITE_PARTIAL_TEXT_MATCHビュー
- REWRITE_GENERAL、-Nをマテリアライズドマテリアライズド・ビューをマテリアライズド - ビューが
- REWRITE_GENERAL -N-でのクエリー・リライトは、マテリアライズド・ビュー
- REWRITE_PCT -N-で一般的なリライトが可能かPCTないで無効になっている クエリー・リライトのいずれかのタイプをサポートすることはできませんマテリアライズドない は
- PCT_TABLE_REWRITEで可能です-N-でOracleエラーは:RELATED_NUMと詳細
ため RELATED_TEXTを参照してくださいどのように私は、コミット時に高速リフレッシュを達成することができますか?
詳細は、次のとおりです。
NLSRTL 10.2.0.4。0生産
のOracle Database 10g 10.2.0.4.0 64ビットの生産
PL/SQL 10.2.0.4.0生産
Linux用 TNS:10.2.0.4.0生産
私のために働きます。問題を完全に再現できるように、 'マテリアライズド・ビュー・ログ... 'と挿入物を追加するとよいでしょう。 –
データが表示されておらず、行を挿入した表も示されていません。 MVクエリを定義するSELECT文を実行すると、新しい行が表示されますか? –
すべての挿入ステートメントが含まれています。はい、テーブルの挿入後に新しい行が表示されます。 –