ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [原创]记一次重新创建刷新组的过程

[原创]记一次重新创建刷新组的过程

原创 Linux操作系统 作者:ZALBB 时间:2019-04-02 15:39:06 0 删除 编辑

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 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 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了,而且也没上面那么多事.
听起来不错,但不知实际速度如何,若速度太慢,则还是不可取。 只是这是产品库,我没有机会再试验这个方法了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1112/viewspace-103726/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-15

  • 博文量
    46
  • 访问量
    34494