Dee*_*nga 10 oracle materialized-views
我刚刚创建了表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);
Run Code Online (Sandbox Code Playgroud)
我使用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
Run Code Online (Sandbox Code Playgroud)
我插入了一条新记录并执行了COMMIT; ..但是当我检查物化视图时,新记录不会显示在物化视图中.
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
Run Code Online (Sandbox Code Playgroud)
现在,当我运行快速,彻底刷新的过程按,快速刷新不更新MView的,但完全刷新呢.(注意:但是Mview仍然是REFRESH ON 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
Run Code Online (Sandbox Code Playgroud)
DBMS_MVIEW.EXPLAIN_MVIEW输出如下所示:(capability_name --Possible-- msgtxt)
如何实现快速刷新提交?
Oracle版本详细信息如下:
NLSRTL 10.2.0.4.0生产
Oracle数据库10g 10.2.0.4.0 64位生产
PL/SQL 10.2.0.4.0生产
TNS for Linux:10.2.0.4.0生产
小智 1
我看到您使用 ROWID 创建了物化视图日志,这实际上并不是必需的,因为两个表都有主键,因此您可以尝试不使用 ROWID。
在 emp 上创建物化视图日志;在部门创建物化视图日志;
此外,如果您使用 ROWID 创建物化视图日志,则应该使用 rowid 创建物化视图。
创建物化视图 empdept_mv 在提交时快速刷新WITH ROWID 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 ;
您可以尝试这些更改,看看物化视图在提交时是否快速刷新。
| 归档时间: |
|
| 查看次数: |
21681 次 |
| 最近记录: |