在一些大数据量、非实时、复杂查询的场景下,通过直接查询数据库的表,会出现速度超级慢等情况,物化视图恰好能解决这些场景的问题。
1、物化视图创建
物化视图创建过程中,可以指定多种刷新方式:
方式 | 说明 |
Fast | Fast 刷新采用增量刷新,只刷新自上次刷新以后进行的修改 |
Complete | Complete 刷新对整个物化视图进行完全的刷新 |
Force(默认方式) | Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用Complete 的方式 |
Never | Never指物化视图不进行任何刷新 |
--创建示例一(采用默认方式刷新物化视图)
create materialized view MV_HL_TOTALMONEY
refresh force on demand
as
select sum(DayAmt) as hlamt, styear
from ods_year.INCOME_DAILY_DETAIL
where substr(IncomeSortCode,0,3)='103'
and taxorgcode like '000000000000'
and bgtlevelcode ='2'
group by styear;
2、刷新方式
--可直接通过调用Oracle官方函数DBMS_MVIEW.REFRESH进行刷新
DBMS_MVIEW.REFRESH(upper(table name));
--DBMS_MVIEW.REFRESH 方法定义
PROCEDURE refresh(list IN VARCHAR2,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
push_deferred_rpc IN BOOLEAN := TRUE,
refresh_after_errors IN BOOLEAN := FALSE,
purge_option IN BINARY_INTEGER := 1,
parallelism IN BINARY_INTEGER := 0,
heap_size IN BINARY_INTEGER := 0,
atomic_refresh IN BOOLEAN := TRUE,
nested IN BOOLEAN := FALSE,
out_of_place IN BOOLEAN := FALSE);
方法说明:
事务一致性刷新快照阵列。
可以连续刷新的快照的最大数量为400。
快照以原子方式连续刷新。
原子上:刷新所有快照或不刷新任何快照。
一致:主表之间保存的所有完整性约束都将在快照表之间保存。
参数说明:
list
要刷新的快照的逗号分隔列表或PL / SQL表。
method
一个字符串,根据以下代码,该字符串包含阵列中每个快照的字母:
'?' -尽可能使用快速刷新
'F'-使用快速刷新或在可能的情况下引发错误
'C'-执行完全刷新,从主服务器复制整个快照
刷新快照的默认方法是为该快照存储在数据字典中的方法。
ROLLBACK_SEG
刷新快照时使用的回滚段的名称。
PUSH_DEFERRED_RPC
如果为TRUE,则在刷新快照之前将对可更新快照所做的所有更改推送到与其关联的主服务器。否则,这些更改可能会暂时丢失。
REFRESH_AFTER_ERRORS
如果为TRUE,则即使在DefError表中记录了快照主服务器的未解决冲突,也允许刷新继续进行。
PURGE_OPTION
如果PUSH_DEFERRED_RPC为true,如何清除事务队列。
0 =不
1 =便宜但不精确(时间优化)
2 =昂贵但精确(针对空间进行了优化)
PARALLELISM
推送延迟的RPC的最大并行度。仅当PUSH_DEFERRED_RPC为true时,才考虑该值。
0 =(旧算法)串行传播
1 =(新算法)仅具有一个从站的并行传播
n =(新算法)与n个从机并行传播
HEAP_SIZE
要同时进行并行调度计算的txns的最大数量。仅当PARALLELISM参数的值大于0时,才使用此参数。
ATOMIC_REFRESH
如果为TRUE,则在单个事务中对指定的快照集执行刷新操作。这样可以保证所有快照都可以成功刷新,也可以不刷新任何快照。
NESTED
如果为TRUE,则对指定的MV集执行嵌套的刷新操作。嵌套刷新操作根据依赖关系顺序刷新所有依赖的MV和指定的MV集,以确保MV相对于基础基表而言确实是最新的。
OUT_OF_PLACE
如果为TRUE,并且atomic_refresh为FALSE,则执行异地刷新。否则,执行就地刷新。
Comments | NOTHING