是往WMSYS.WM$RIC_TRIGGERS_TABLE表中插入数据报错。
根据错误,在MOS查到一篇相关的文档得知原因可能是工作区管理器元数据中存在不一致,WMSYS.WM$RIC_TRIGGERS_TABLE包含一些不必要的行。
可以使用下面这个SQL查询
select pt_owner, pt_name, ct_owner, ct_name
from wmsys.wm$ric_triggers_table
where (pt_owner, pt_name, ct_owner, ct_name) not in (select pt_owner, pt_name, ct_owner, ct_name from wmsys.wm$ric_table);
为了保证升级破功,MOS中建议在升级,先提前删除WMSYS中不必要的行。语句如下:
delete wmsys.wm$ric_triggers_table
where (pt_owner, pt_name, ct_owner, ct_name) not in (select pt_owner, pt_name, ct_owner, ct_name
from wmsys.wm$ric_table);
如果已经在升级,在升级前也未对WMSYS中的数据进行处理,可以使用下面的语句进行修复
declare
n number ;
begin
for c in (select distinct pt_owner, pt_name, ct_owner, ct_name from wmsys.wm$ric_table) loop
n := wmsys.wm$up_del_trig_name_sequence.nextval ;
insert into wmsys.wm$ric_triggers_table values(c.pt_owner, c.pt_name, c.ct_owner, c.ct_name, n, n) ;
end loop ;
end;
/
alter trigger wmsys.no_vm_ddl disable;
execute wmsys.ltric.recreatePtUpdDelTriggers;
execute wmsys.ltadm.enableSystemTriggers(true);