ORACLE9205 NCV31, ORACLE10202 NCBI. 数据从9205 刷新到 10202。 2月14号那天,在NCBI数据库的服务器上,想测试EXPDP导出来的DMP文件导回数据库后,能否自动刷新, 并且和源数据(31) 里的数据一致(不丢失插入,删除,修改). 把DMP文件导回到了NCBI数据库中的 REFRESH用户后,没想到却出现 ORA-12034 错误.
ORA-12048: error encountered while refreshing materialized view "ORA-12048: error encountered while refreshing materialized view "NCBI"."IC_GENERAL_H" ORA-12034: materialized view log on "NCV31"."IC_GENERAL_H" younger than last refresh
结果是,3个刷新组都出现这种情况, 看着手机不断地接收到刷新组刷新时报错信息, 没辙, 只有重新 创建了物化视图.
第1次只重新创建物化视图,步骤: 1、把要重建的物化视图从刷新组中剥离出来.
exec dbms_refresh.subtract('TYREPORT','SO_SALEORDER_B'). 2、删除物化视图。
drop materialized view SO_SALEORDER_B; 3、重新创建基于表上的物化视图.
CREATE MATERIALIZED VIEW "NCBI"."SO_SALEORDER_B" ON PREBUILT TABLE REFRESH FAST ON DEMAND AS SELECT * FROM http://blog./post/980/mailto:SO_SALEORDER_B@NCDB; 4、把新建的物化视图加入到刷新组中去.
BEGIN DBMS_REFRESH.ADD( name => '"NCBI"."TYREPORT"', list => '"NCBI"."SO_SALEORDER_B"', lax => TRUE); END;
但此方法将丢失,从刷新组出现 ORA-12034 错误开始,到重新创建物化视图后的这段时间内数据的 变化,因为重新创建物化视图时,其并不重新创建表,也不完全刷新表,这样,源和目标对应的表的数据 就不一致。此方法不可取。
第2个方法,重新建表,再建物化视图。步骤:
1、停止掉刷新组的作业,如:
exec dbms_scheduler.disable('J_TYBIDATA'); 2、删除刷新组,如:
EXEC DBMS_REFRESH.DESTROY('TYBIDATA'); 3、删除物化视图,如:
drop materialized view IC_ONHANDNUM; 4、删除基表,如:
drop table IC_ONHANDNUM purge; 5、重新创建物化视图,此次不再基于表上建.
create materialized view IC_ONHANDNUM tablespace NNC_DATA02 REFRESH FAST ON DEMAND AS SELECT * FROM http://blog./post/980/mailto:IC_ONHANDNUM@NCDB; 6、重新创建物化视图的刷新组.
BEGIN DBMS_REFRESH.MAKE( name => '"NCBI"."TYBIDATA"', list => '', next_date => SYSDATE, interval => '/*10:Mins*/ sysdate + 10/(60*24)', implicit_destroy => FALSE, lax => FALSE, job => 0, rollback_seg => NULL, push_deferred_rpc => FALSE, refresh_after_errors => TRUE, purge_option => NULL, parallelism => NULL, heap_size => NULL); END;
7、由于步骤6将创建一个JOB,而我们使用的是scheduler, 因此,需要把此JOB 给停止掉,
exec dbms_job.broken(,true); commit;
8、把物化视图加入到刷新组。 BEGIN DBMS_REFRESH.ADD(name =>'TYBIDATA',list =>'IC_ONHANDNUM',lax => TRUE); END;
9、启动物化视图刷新组.
exec dbms_scheduler.enable('J_TYBIDATA'); 10、对物化视图加索引。
但实际上这样操作起来很啰嗦, 同事询问,把物化视图所基于的表上的索引给UNUSABLE掉,然后来个 完全刷新,两边的数据应该就保持一致了,之后再把索引REBUILD. 这样应该就OK了,而且也没上面那么多事. 听起来不错,但不知实际速度如何,若速度太慢,则还是不可取。 只是这是产品库,我没有机会再试验这个方法了。
|