迁移后物化视图任务执行报错ORA-23404: 刷新组 "ttd"."xxxx" 不存在

今天用expdp&impdp迁移数据到另一个新库
迁移后有个定时任务执行失败如下
Errors in file /oracle/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_j001_3211.trc:
ORA-12012: 自动执行作业 150812 出错
ORA-23404: 刷新组 "ttd"."xxxx" 不存在
ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: 在 "SYS.DBMS_REFRESH", line 23
ORA-06512: 在 "SYS.DBMS_REFRESH", line 195
ORA-06512: 在 line 1
Wed Oct 22 12:08:45 2014
查询刷新组,发现新环境刷新组不存在,原来环境有
select rowner, rname, job, interval from all_refresh;
对比原来的库的物化视图和新导入库物化视图的定义发现,新导入库中物化视图少了start with 和 next 子句的话,这样就导致没有创建刷新组,由于原来的job中的刷新任务导入到新库中,所以新库在调用dbms_refresh.refresh时报错
但是可以使用exec dbms_mview.refresh('mv');进行刷新
问题解决方法:

删除新库中的物化视图,然后重新创建,同时删除job中的原来的刷新任务,因为再次创建物化视图时会重新创建job如果不删除就会有个定时任务


如下解释:
这个错误还需要从materialized view的创建开始追溯,因为如果在create materialized view语句中加入start with 和 next 子句的话,创建MV的过程中会自动创建一个job,制定定期刷新计划,例如:
create materialized view t1_mv refresh fast 
start with to_date('21-07-2009 17:15:00', 'dd-mm-yyyy hh24:mi:ss') 
  next TRUNC(SYSDATE,'HH')+375/1440
  with primary key 
    as select * from t1;
 
SQL> select job, schema_user, interval, what from all_jobs;
 
       JOB SCHEMA_USER        INTERVAL                            WHAT
---------- ------------------ ----------------------------------- ----------------------------------------------
        21 WANGXIAOQI         TRUNC(SYSDATE,'HH')+375/1440        dbms_refresh.refresh('"WANGXIAOQI"."T1_MV"');
 
SQL>
 可以看到,这个job中的执行内容是:dbms_refresh.refresh('"WANGXIAOQI"."T1_MV"'); 而不是我们普通手动刷新MV时用的 dbms_mview.refresh 。
再来研究一下dbms_refresh这个数据包,这个包是用于产生一个刷新组以方便MV一组为单位统一刷新的。而当MV被制定刷新策略的方式指定时,会自动创建一个刷新组,并将该MV添加至这个刷新组中,所以job可以使用dbms_refresh.refresh来进行刷新。可以来看一下:
 
SQL> select rowner, rname, job, interval from all_refresh where rname = 'T1_MV';
 
ROWNER               RNAME                   JOB INTERVAL
-------------------- ---------------- ---------- ----------------------------------------
WANGXIAOQI           T1_MV                    21 TRUNC(SYSDATE,'HH')+375/1440
 
    再看这个组的成员:
 
SQL> select rowner, rname, job, interval from all_refresh_children where rname = 'T1_MV';
 
ROWNER               RNAME                   JOB INTERVAL
-------------------- ---------------- ---------- ----------------------------------------
WANGXIAOQI           T1_MV                    21 TRUNC(SYSDATE,'HH')+375/1440
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值