【发布时间】:2018-02-21 19:16:26
【问题描述】:
我在我的 oracle 12c 上使用了 4 个物化视图 - 所有这些视图都是通过存储过程调用手动更新的。
所有视图都在 where 子句中包含对上下文变量的查找,包括时间跨度(从和到)。
上下文由
创建CREATE OR REPLACE CONTEXT myContext using prepare_export;
除了使用相同的用户上下文但不同的变量名称之外,没有任何视图与其他视图有任何关系。
执行链是(应该只刷新一个视图):
execute prepare_export('MyViewName','20180131','20180231');
-
data_export 表中的条目是为 data_export 日志生成的
INSERT INTO DATA_EXPORT (SOURCE_,EXPORT_TIME_,EXPORT_FROM_,EXPORT_TO_,user_name,user_ip) VALUES (viewName,systimestamp,date_From,date_To,(select user from dual),(select sys_context('userenv','ip_address') from dual));` -
设置上下文变量(从:20180131 到:20180231)
dbms_session.set_context('myContext',viewName || '_from',date_from); dbms_session.set_context('myContext',viewName || '_to',date_to); -
视图 MyViewName 被刷新(原子刷新 false)
dbms_mview.refresh(viewName,'c',atomic_refresh=>FALSE); -
data_export 条目使用上次刷新的 count(*) 进行更新
execute immediate 'UPDATE data_export set resultset_size_=' ||viewRowCount ||' where id_ = (select max(id_) from data_export where source_=''' || viewName || ''' group by source_)';
程序完成后,所有视图都将失效,需要手动重新编译...
有什么帮助吗?
谢谢,乔
【问题讨论】:
标签: oracle materialized-views mv recompile