关于物化视图增量刷新报ORA-12018 问题的解决方案

由于表之前采用的是全量刷新方式进行刷新,但是因为表的数据量越来越大,全量刷新的时候偶尔会出现失败的情况,因为同一个时点刷新的任务比较多,回滚段被占满了之后会出现报错,所以急需要解决这个问题。

发现源表在源系统里是有主键的,所以决定采用增量刷新来解决刷新失败的问题。

1.让DBA帮忙创建 MV LOG

create materialized view log on HX_KPXT.FPGL_FPXX with primary key; 

2.按步骤创建物化视图(步骤省略。。。)

3.第一次全量刷新

4.接着进行增量刷新,然后就出现下面截图的报错

关于物化视图增量刷新报ORA-12018 问题的解决方案_第1张图片

 

5.经过DBA排查原来是权限问题引起的,需要给DBLINK用户赋予相关的权限,

第一个权限:grant select any table to yourusername;
第二个权限:
若是8i 则grant select_catalog_role to yourusername;
若是9i 则grant select any dictionary to yourusername;

因为是DBA进行的授权操作,具体是授权了哪些权限,DBA没有明确给出列表,据说是缺少了某个MV LOG 的权限

他是参照了别的dblink用户能够正常增量刷新拥有的权限赋权了一遍,然后增量刷新时就没有报上面截图的报错了;

6.解决问题的道路是坎坷、曲折的,虽然权限的问题解决了,但是还是报出了新的错误,如下图:

关于物化视图增量刷新报ORA-12018 问题的解决方案_第2张图片

7.奇怪了,在目标库里面创建的表结构和源系统的表结构是一模一样的,怎么会出现值太大的情况呀,

赶紧报告DBA,经过DBA啪啪的一顿查,两边数据库的字符集不一样,这边是UTF8的。

没有办法,不能修改数据库的字符集,那么只能修改目标表的字段长度,如源表是CHAR(1),那么目标表就修改成CHAR(2),

其实报值太大 的字段都是 CHAR(1)长度引起的,其它字段长度我没有修改,物化视图就可以正常增量刷新了,我就纳闷,为什么全量刷新不用扩大字段的长度也可以正常刷新呢,这个自有ORACLE知道了

8.由于我把CHAR(1) 修改成了CHAR(2) ,字段里面长度多了空格,我怕关联查询的时候会查询不出来,如:KB_FLAG='1',

但是经过试验,是没有影响的,KB_FLAG='1' 和 TRIM(KB_FLAG)='1' 是一样的结果, 

9. OK ,涉及到该表的程序不用修改,节省了大把时间。

 

你可能感兴趣的:(oracle)