ORA-04020问题

http://blog.csdn.net/dayali7802/archive/2008/11/18/3324393.aspx

 

前2天,pso维护的某省网通的OBS计费系统,由于无法进行export数据导出,报如下错误:

EXP-00056: ORACLE error 31600 encountered

ORA-31600: invalid input value EMIT_SCHEMA for parameter NAME in function SET_TRANSFORM_PARAM

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105

ORA-06512: at "SYS.DBMS_METADATA_INT", line 3926

ORA-06512: at "SYS.DBMS_METADATA_INT", line 4050

ORA-06512: at "SYS.DBMS_METADATA", line 836

ORA-06512: at line 1

EXP-00000: Export terminated unsuccessfully

 

pso在没有停业务的情况下,直接打数据库的补丁catpatch.sql,结果打到中间的时候出错ORA-04020,而且,导致业务登陆用户无法登陆进数据库,找到我这里寻找支持。其实,这个补丁升级说明中,明确要停止DML操作,防止数据字典deadlock.

 

当时诊断确认sys用户能登陆系统,而且,已经连接的session能正常使用,为了不影响现网业务,决定等网上停业务后再做生机。8点左右,停了计费、采集、自服务系统,关闭数据库,然后以migrate方式重起数据库。

 

当时决定,先解决ORA-04020问题,然后,再打catpatch.sql补丁。

 

第一步:

SQL> ALTER TRIGGER sys.cdc_alter_ctable_before DISABLE;
SQL> ALTER TRIGGER sys.cdc_create_ctable_after DISABLE;
SQL> ALTER TRIGGER sys.cdc_create_ctable_before DISABLE;
SQL> ALTER TRIGGER sys.cdc_drop_ctable_before DISABLE;

 

执行这个后,可以在alert_SID.log里看到系统修改信息:

ALTER SYSTEM SET _system_trig_enabled=FALSE SCOPE=MEMORY;

。。。

 

第二步,执行:

alter package standard compile;
alter package DBMS_standard compile;

 

因为,后续的$ORACLE_HOME/rdbms/admin/utlrp.sql包要求standard和dbms_standard包正常正常。

 

最后,执行$ORACLE_HOME/rdbms/admin/utlrp.sql包,该包会重新编译由于升级导致状态不一致的数据字典对象(plsql modules)。

 

执行完后,查看执行前后

select status,count(*) from dba_objects group by status

无效状态的对象由执行前的2000多降低到14个。

 

至此,执行alter system disable restricted session后,计费系统的用户已经能正常登陆了。

此后,开始在migrate模式下,打catpatch.sql补丁,一切正常。

 

 

 

最后,说说执行utlrp.sql时的死循环问题。

在对公司测试数据库进行catpatch.sql升级时,升级完成后有681个invalid objects,执行utlrp.sql重新编译invalid plsql modules时,发现oracle cpu占用一直在25%左右,执行结束不了。查看该进行执行的SQL,发现定期的在重新编译:

alter view xdb.resource_view compile;

 

基本确定是它的问题导致死循环,但死循环的原因不清楚。

查找了一下,xdb是与xml相关的,并且,在$ORACLE_HOME/rdbms/catqm.sql可以重新来构建该用户的所有对象。所以,删除了该用户,并重新执行utlrp.sql,2分钟左右完成。重新执行catqm.sql构建了xdb用户对象。

 

所有完成后,查看无效对象降低到了21个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值