实体化视图刷新
实体化视图使用与快照相同的内部机制并支持几种刷新技术
实体化视图的完全刷新包括截断现有数据并重新插入所有基于详细表的数
据这通过重新执行 CREATE 命令的查询定义来实现
快速刷新仅适用于自上次刷新以来所进行的更改有两种可用的快速刷新
类型
• 使用实体化视图日志的快速刷新在这种情况下对基表的所有更改都会为
日志所捕获然后应用于实体化视图
• 使用 ROWID 范围的快速刷新在直接路径加载后可以根据新行的
ROWID 使用快速刷新来刷新实体化视图这种刷新类型需要直接加载器
日志
如有可能用强制刷新类型定义的视图使用快速机制进行刷新否则它
将使用完全刷新强制刷新是缺省的刷新类型
永不选项抑制所有的实体化视图刷新
刷新模式
使用 DBMS_MVIEW 程序包执行手动刷新DBMS_MVIEW 程序包提供了许多
过程和函数以管理实体化视图包括 REFRESH REFRESH_DEPENDENT
和 REFRESH_ALL_MVIEWS 进程
自动刷新可以在下述情况下执行
• ON COMMIT 在为实体化视图指定该选项时每当提交对其中的一个基表
的更改时就对其进行更新对实体化视图的更新与用户提交异步地发生
并且不降低用户的察觉性能
• 在指定的时间可以调度实体化视图在指定的时间发生例如通过使用
START WITH 和 NEXT 子句在每个星期一的上午 9 点刷新为了使这样
的刷新发生该例程必须使用 JOB_QUEUE_PROCESSES 参数启动作业
进程
实体化视图: 手动刷新
刷新专用的 MV:
基于一个或多个基表的 MV:
应被刷新的所有 MV:
DBMS_MVIEW.REFRESH
(‘SF_SALES’, parallelism => 10);
DBMS_MVIEW.REFRESH_DEPENDENT(‘SALES’);
DBMS_MVIEW.REFRESH_ALL_MVIEWS;
create materialized view AN_VIEW_USER_BASE_FILE_ALL
refresh complete on demand
start with to_date('22-09-2005 20:30:00', 'dd-mm-yyyy hh24:mi:ss') next TRUNC(SYSDATE+1)+20.5/24
as
select /*+ RULE(AN_USER_BASE_FILE,
AN_LINE,
YJ_CHECK_SECTION_DIVIDE,
YJ_CHECK_SECTION,
AN_USER_ADD_FILES) */AN_USER_BASE_FILE.USER_NO,
from AN_USER_BASE_FILE,
AN_LINE,
YJ_CHECK_SECTION_DIVIDE,
YJ_CHECK_SECTION,
AN_USER_ADD_FILES
where (AN_USER_BASE_FILE.line_code = an_line.line_code (+))
and (AN_USER_BASE_FILE.user_no = yj_check_section_divide.user_no (+))
and (yj_check_section_divide.check_section_code = yj_check_section.check_section_code (+))
and (AN_USER_BASE_FILE.user_no = AN_USER_ADD_FILES.user_no (+))
UNION ALL
select /*+ RULE(AN_USER_BASE_FILE_S,
AN_LINE,
YJ_CHECK_SECTION_DIVIDE,
YJ_CHECK_SECTION,
AN_USER_ADD_FILES )*/AN_USER_BASE_FILE_S.USER_NO,
from AN_USER_BASE_FILE_S,
AN_LINE,
YJ_CHECK_SECTION_DIVIDE,
YJ_CHECK_SECTION,
AN_USER_ADD_FILES
where (AN_USER_BASE_FILE_S.line_code = an_line.line_code (+))
and (AN_USER_BASE_FILE_S.user_no = yj_check_section_divide.user_no (+))
and (yj_check_section_divide.check_section_code = yj_check_section.check_section_code (+))
and (AN_USER_BASE_FILE_S.user_no = AN_USER_ADD_FILES.user_no (+))
实体化视图和查询重写: 示例
SQL> create MATERIALIZED VIEW sales_summary
2 tablespace sales_ts
3 parallel (degree 4)
4 BUILD IMMEDIATE REFRESH FAST
5 ENABLE QUERY REWRITE
6 AS
7 select s.zip, p.product_type
8 , sum(s.amount)
9 from sales s, product p
10 where s.product_id = p.product_id
11 group by s.zip, p.product_type;
禁用查询重写: 示例
SQL> select /*+ NOREWRITE */
2 s.zip, p.product_type, sum(s.amount)
3 from sales s, product p
4 where s.product_id = p.product_id
5 group by s.zip, p.product_type;
oralce 物化视图/实体化视图
最新推荐文章于 2024-05-10 15:38:14 发布
本文详细介绍了Oracle物化视图(实体化视图)的刷新技术,包括完全刷新、快速刷新(使用实体化视图日志和ROWID范围),以及手动和自动刷新模式。同时,讨论了查询重写在物化视图中的应用,并提供启用和禁用查询重写示例。

7050

被折叠的 条评论
为什么被折叠?



