|
具体是这样的:
基于 f_rack_s 该表创建一个 REFRESH FAST ON COMMIT 方式的物化视图,但是却无法创建成功,但是,创建一个 f_rack_s该表的副本 f_rack_s_temp表,然后基于该表创建一个REFRESH FAST ON COMMIT 方式的物化视图,却成功了。不知为何,具体操作步骤如下:
CREATE MATERIALIZED VIEW log on f_rack_s WITH ROWID;
CREATE MATERIALIZED VIEW mv_rack REFRESH FAST ON COMMIT WITH ROWID AS
SELECT NAME,CODE FROM f_rack_s;
--提示ORA-12054:无法为实体化视图设置 on commit 刷新属性
通过dbms_mview.explain_mview来查看其错误,但是也看不出具体是什么错误
TRUNCATE TABLE mv_capabilities_table;
BEGIN dbms_mview.explain_mview('SELECT NAME,CODE FROM f_rack_s');END;
SQL> SELECT CAPABILITY_NAME,POSSIBLE, RELATED_TEXT,MSGTXT FROM mv_capabilities_table;
CAPABILITY_NAME POSSIBLE RELATED_TEXT MSGTXT
------------------------------ -------- --------------- --------------------------------------------------------------------------------
PCT N
REFRESH_COMPLETE N 主表中没有任何主键约束条件
REFRESH_FAST N
REWRITE Y
PCT_TABLE N F_RACK_S 关系不是一个已分区的表
REFRESH_FAST_AFTER_INSERT N 忘记分析功能禁用的原因
REFRESH_FAST_AFTER_ONETAB_DML N 查看禁用 REFRESH_FAST_AFTER_INSERT 的原因
REFRESH_FAST_AFTER_ANY_DML N 查看禁用 REFRESH_FAST_AFTER_ONETAB_DML 的原因
REFRESH_FAST_PCT N PCT 不可能在实体化视图中的任何从表上
REWRITE_FULL_TEXT_MATCH Y
REWRITE_PARTIAL_TEXT_MATCH Y
REWRITE_GENERAL Y
REWRITE_PCT N 无法进行一般重写, 或者 PCT 不可能在任何从表上
PCT_TABLE_REWRITE N F_RACK_S 关系不是一个已分区的表
-----------------------------------------------------------------------------------------------------------------------------------
如果创建一个表来源于f_rack_s该表,索引都与f_rack_s该表一致
CREATE TABLE f_rack_s_temp AS SELECT * FROM f_rack_s;
create index IDX_F_RACK_St_DEL on f_rack_s_temp (DELETETAG);
create index IDX_F_RACK_St_EDITDATE on f_rack_s_temp (GWM_EDITDATE);
create index IDX_F_RACK_St_FID on f_rack_s_temp (GWM_FID);
--然后用f_rack_s_temp该表创建一个可快速刷新的物化视图
CREATE MATERIALIZED VIEW log on f_rack_s_temp WITH ROWID;
CREATE MATERIALIZED VIEW mv_rack_temp REFRESH FAST ON COMMIT WITH ROWID AS
SELECT NAME,CODE FROM f_rack_s_temp;
--成功创建
实在想不明白为什么用f_rack_s这个表就不行,而基于该表创建的f_rack_s_temp这个表就可以创建快速刷新的物化视图。
f_rack_s_temp是f_rack_s的一个副本,按理结构上都一样。
|
|