我创建了一个实体视图,初始有200W数据,每天新增4W条数据
问题一:create materialized view VBZ_WPLYSTST
refresh fast on demand;报错为不能从复杂查询中创建一个可快速刷新的视图,请问何为复杂查询?ORACLE判断的依据是什么?
问题2:无奈之下只好创建为create materialized view VBZ_WPLYSTST
refresh complete on demand;请问当新增1条数据和1W条数据,刷新时间是一样的吗?如果不一样,差别是1和1W的差别还是很小的差别?如何提高视图的刷新效率?会不会因为基表数据越来越多,视图刷新一次的时间会越来越长?4W条数据的增量,200W的基数,刷新多长时间是合理的?
问题有点多,一旦解决200分双手奉上!望各位大虾不吝赐教!
问题一:create materialized view VBZ_WPLYSTST
refresh fast on demand;报错为不能从复杂查询中创建一个可快速刷新的视图,请问何为复杂查询?ORACLE判断的依据是什么?
问题2:无奈之下只好创建为create materialized view VBZ_WPLYSTST
refresh complete on demand;请问当新增1条数据和1W条数据,刷新时间是一样的吗?如果不一样,差别是1和1W的差别还是很小的差别?如何提高视图的刷新效率?会不会因为基表数据越来越多,视图刷新一次的时间会越来越长?4W条数据的增量,200W的基数,刷新多长时间是合理的?
问题有点多,一旦解决200分双手奉上!望各位大虾不吝赐教!
在主数据库(待复制的数据)创建要进行数据复制的表的物化视图日值
CREATE MATERIALIZED VIEW LOG ON tt WITH ROWID, PRIMARY KEY, SEQUENCE INCLUDING NEW VALUES;
你在一台服务器上做。更简单些。你可以参照下。其中6楼的代码我都测试过的。
http://topic.csdn.net/u/20080819/09/c4166aff-19f7-4dd0-ac4e-616543212789.html
可在程序中调用create or replace view,用户不调用时最好不要无故刷新,因为很耗资源。可参考一下:
http://sourcecode.cangzhuo.com/Code/Oracle/View/Create-View.htm
==================================================
给LZ一个连接地址,可防照(把表换成视图)下贴内容做有关view的各种测试,特别是在“步骤 1A(在 TEST_NORMAL 上)”http://www.oracle.com/technology/global/cn/pub/articles/sharma_indexes.html
http://blog.itpub.net/post/468/13318
物化日志 下次更新就是采取增量更新(只更新基表中改变的数据)的方式。和oracle 增量备份(区别于海量备份)一个意思。
CREATE MATERIALIZED VIEW LOG ON t_wp_xh WITH ROWID, PRIMARY KEY, SEQUENCE INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW LOG ON t_wp_cx WITH ROWID, PRIMARY KEY, SEQUENCE INCLUDING NEW VALUES;
都成功了,然后
CREATE MATERIALIZED VIEW MVB_WP_CXXH REFRESH FAST ON DEMAND
AS
select xtm,htm from T_WP_CX
union all
select xtm,htm from T_WP_XH
报错,说ORACLE不能从一个复杂查询的中创建一个快速刷新的实体化视图,难到就只是用了个UNION ALL就算复杂查询了吗?
AS
select xtm,htm from T_WP_CX
union all
select xtm,htm from T_WP_XH
使用EXPLAIN_MVIEW过程首先要建立MV_CAPABILITIES_TABLE表,建表的脚步是$ORACLE_HOME/rdbms/admin/utlxmv.sql。(EXPLAIN_MVIEW过程是两个过程的重载,一个输出到MV_CAPABILITIES_TABLE表,另一个以PL/SQL的VARRAY格式输出,为了简单起见,我们建立MV_CAPABILITIES_TABLE表)。
SQL> @?rdbms/admin/utlxmv.sql
表已创建。
下面简单研究一下EXPLAIN_MVIEW过程。
DBMS_MVIEW.EXPLAIN_MVIEW(mv IN VARCHAR2, Statement_id IN VARCHAR2:= NULL);
该过程可以输入已经存在的物化视图名称(或USER_NAME.MV_NAME),也可输入建立物化视图的查询语句。另外一个参数STATEMENT_ID输入一个语句ID,为了标识出表中对应的记录。----------------------------------------------------以上摘自yangtingkun的blog----------------------
你这个就是这样查:
begin
dbms_mview.explain_mview('MVB_WP_CXXH');
end;
SELECT CAPABILITY_NAME, RELATED_TEXT, MSGTXT
FROM MV_CAPABILITIES_TABLE;
create materialized view MVB_WP_CXXH
AS select xtm,htm from T_WP_CX
union all select xtm,htm from T_WP_XH应该可以的。
你在手工的设置刷新频率
x列用于标识是哪个表,rid列是oracle要求取出rowid, 楼主可再试试 create materialized view mv_x
REFRESH FAST ON demand
as
select 1 x, rowid rid, a from t_wp_xh
union all
select 2 x, rowid rid, a from t_wp_cx