Oracle 12C R2-新特性-物化视图:语句级刷新
1 关于ON STATEMENT物化视图的刷新
使用ON STATEMENT刷新模式的物化视图将在每次对任何物化视图的基表执行DML操作时自动刷新。
使用ON STATEMENT刷新模式,对基表的任何更改都将立即反映在实例化视图中。不需要在基表上提交事务或维护物化视图日志。如果随后回滚了DML语句,则还会回滚对物化视图所做的相应更改。
要使用ON STATEMENT刷新模式,实例化视图必须能够快速刷新。将在事实表的ROWID列上自动创建索引,以提高快速刷新性能。
”事实表”-fact table:包含事实数据的数据仓库的星型模式中的表。 事实表通常有两种类型的列:那些包含事实和那些作为维度表的外键的列。
ON STATEMENT刷新模式的优点是物化视图总是与基表中的数据同步,而没有维护物化视图日志的开销。但是,此模式可能会增加执行DML操作所需的时间,因为物化视图正在作为DML操作的一部分进行刷新。
2 具体例子
2.1 创建物化视图
这个例子创建一个物化视图scott_mv_onstat,它使用ON STATEMENT刷新模式,并基于oe.dept和oe.emp表。 当对任何基表执行DML操作时,物化视图将自动刷新。 在DML操作刷新实体化之后不需要提交
SQL> CREATE MATERIALIZED VIEW sales_mv_onstat
REFRESH FAST ON STATEMENT USING TRUSTED CONSTRAINT
AS
SELECT t.rowid emp_rid,s.deptno,s.dname,t.ename from dept s,emp t
where s.deptno=t.deptno; 2 3 4 5
Materialized view created.
这里需要注意几个地方:
·SELECT语句必须包含真实表的ROWID,否则会报错:ORA-32428: on-statement materialized join view error: No ROWID col of fact table in MV def query
·而且ROWID要用别名,否则会报错:ORA-00904: "ROWID": invalid identifier
2.2 查看物化视图
SQL> select * from sales_mv_onstat;
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAA 20 RESEARCH SMITH
AAASJ1AAMAAAACuAAB 30 SALES ALLEN
AAASJ1AAMAAAACuAAC 30 SALES WARD
AAASJ1AAMAAAACuAAD 20 RESEARCH JONES
AAASJ1AAMAAAACuAAE 30 SALES MARTIN
AAASJ1AAMAAAACuAAF 30 SALES BLAKE
AAASJ1AAMAAAACuAAG 10 ACCOUNTING CLARK
AAASJ1AAMAAAACuAAH 10 ACCOUNTING KING
AAASJ1AAMAAAACuAAI 30 SALES TURNER
AAASJ1AAMAAAACuAAJ 30 SALES JAMES
AAASJ1AAMAAAACuAAK 20 RESEARCH FORD
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAL 10 ACCOUNTING MILLER
12 rows selected.
2.3 在EMP表插入一条满足条件的数据
不要提交
SQL> insert into emp values(666,'lei','DBA',666,sysdate,666,666,20);
1 row created.
2.4 再次查看物化视图
SQL> select * from sales_mv_onstat;
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAA 20 RESEARCH SMITH
AAASJ1AAMAAAACuAAB 30 SALES ALLEN
AAASJ1AAMAAAACuAAC 30 SALES WARD
AAASJ1AAMAAAACuAAD 20 RESEARCH JONES
AAASJ1AAMAAAACuAAE 30 SALES MARTIN
AAASJ1AAMAAAACuAAF 30 SALES BLAKE
AAASJ1AAMAAAACuAAG 10 ACCOUNTING CLARK
AAASJ1AAMAAAACuAAH 10 ACCOUNTING KING
AAASJ1AAMAAAACuAAI 30 SALES TURNER
AAASJ1AAMAAAACuAAJ 30 SALES JAMES
AAASJ1AAMAAAACuAAK 20 RESEARCH FORD
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAL 10 ACCOUNTING MILLER
AAASJ1AAMAAAACuAAM 20 RESEARCH lei
13 rows selected.
可以看到,在没有提交的情况下,物化视图已经刷新了。
2.5 回滚刚刚插入的数据
SQL> rollback;
Rollback complete.
--再次查看物化视图
SQL> select * from sales_mv_onstat ;
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAA 20 RESEARCH SMITH
AAASJ1AAMAAAACuAAB 30 SALES ALLEN
AAASJ1AAMAAAACuAAC 30 SALES WARD
AAASJ1AAMAAAACuAAD 20 RESEARCH JONES
AAASJ1AAMAAAACuAAE 30 SALES MARTIN
AAASJ1AAMAAAACuAAF 30 SALES BLAKE
AAASJ1AAMAAAACuAAG 10 ACCOUNTING CLARK
AAASJ1AAMAAAACuAAH 10 ACCOUNTING KING
AAASJ1AAMAAAACuAAI 30 SALES TURNER
AAASJ1AAMAAAACuAAJ 30 SALES JAMES
AAASJ1AAMAAAACuAAK 20 RESEARCH FORD
EMP_RID DEPTNO DNAME ENAME
------------------ ---------- ---------------------------- --------------------
AAASJ1AAMAAAACuAAL 10 ACCOUNTING MILLER
12 rows selected.
物化视图也回滚了刚刚插入的数据。
更多详细信息参考官方文档:
http://docs.oracle.com/database/122/DWHSG/refreshing-materialized-views.htm#DWHSG8363
版权声明:本文为博主原创文章,未经博主允许不得转载。
物化视图 语句级刷新