Xdb的重装问题 ,ORA-04098, ORA-00257 archiver error., library cache lock

Oracle version:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Prod

OS version::Microsoft Windows Server2003 sp2

 

 

 


1、  这是一个用Oracle导出xml文档的问题,从周三持续到今天周日才fix,而且是这个周末都过来加班。

2、  本来在fftest上测试没有问题。Xdb是在数据库安装时默认装上的。

   doc := dbms_xmldom.newDOMDocument;

3、  但是一直到ffdw上,出现问题,但是也可能是没有看清,没有用脚本查询是否xdb正常

  select * from dba_registry;

结果仓促执行了catqm.sql,出问题了。

4、  执行catqm.sql过程中就发现报了很多错。后来第二天早晨又发现每天7点执行的job24出了问题,报错:

ORA-04098: 触发器 'XDB.XDB_PI_TRIG' 无效且未通过重新验证

是一个trigger出了问题。

但是不够冷静,没有细看系统自带脚本的具体内容(其实比较简单)。直接在fftest上做了测试,执行了catproc.sql的脚本,结果导致fftesttest 过程都报错。

都有重新装db的打算。

5、  因为第二天要测试分货系统,正好那几天老大出差,无奈,在晚上火速重装了自己机器上的fftest,还算顺利,而且赶上了21点的末班车回家。

6、  第二天上班,发现fftest可以用了,勉强完成了分货表的测试。那几天job都有问题,但是好像sale数据还对的上,只是links的出了问题,因为trigger出问题了,一执行DropTruncate就报错,导致linksjob里的prc报错。每天发给店铺的邮件库存balance也不为0了。为了保证BI报表查询的正常使用,准备周末解决。

7、  昨天周六,执行catqmcatnoqm.sql不能顺利执行,尤其是drop user xdb cascade;时会hang住;弄了一下午未解,就把hang住的放在那里了,看看第二天来会不会跑过去;

8、  今天早晨过来,发现仍旧hang着,而且job也出了问题。导致dim_customer表锁了,而且大量的执行,导致achivelog爆满,用ffdw登陆时报错

ORA-00257 archiver error. Connect internal only, until freed

还好,用sys可以登录。

查询得知是,archive logdest目录慢了,一查询果然慢了,

select * from v$recovery_file_dest;

select * from v$flash_recovery_area_usage;

select * from v$log;

只能采取不断加大的方法,可是后来发现加到13g仍旧也灌满的危险。

SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=13g;

 

9、  问题出在job上,不断地自动执行,杀不掉。采用

SQL> ALTER SYSTEM KILL SESSION '111, 473';

也不行,一会就又起来,锁表。

查询锁表:

select *

  from v$locked_object vl, dba_objects do

 where do.object_id = vl.OBJECT_ID;

 

 

 

 

10、              中午吃晚饭回来干脆把job broken了,这下子好了,起码archivelog不增加了,ffdw用户能正常用了。

 

 

SQL> EXEC DBMS_JOB.BROKEN(24, TRUE);

 PL/SQL procedure successfully completed

 SQL> commit;

 Commit complete

----------------

--标记job的broken

SQL>EXEC DBMS_JOB.BROKEN(JOB#, TRUE);

SQL>COMMIT;

--杀掉session

>ALTER SYSTEM KILL SESSION 'SID, SERIAL#';

--KILL THE OS SESSION

在DOS下,orakill sid spid 

(sid和spid从v$process中获得,p.addr=s.paddr)

 

-----------------

 

 

 

 

11、              中间一度想把archive log改成非归档。但是后来没动,保险起见,毕竟归档还是有可能恢复的。

12、              还发现了个问题就是,plsql dev不能执行archive log list;必须要到dossqlplus

13、              后来看catnoqm.sql的脚本,单步拿出来一个一个执行,仍旧挂在drop xdb上,上网找到了根源,是library cache lock的问题,这是问题的关键所在。按照方法杀掉了相应的session。成功dropxdb用户。

14、              后面比较顺利,catnoqm.sql成功执行,按照Oracle的官方文档,又执行了catqm.sql安装xdb

15、              检查status是否为valid,有6个仍旧为invalid,手动alter trigger xxx compile;就OK了。

16、              总结::::

17、              遇事不能慌、沉着要相信凭自己能力可以解决,虽然过程有可能是痛苦的煎熬与无助、多总结,很多问题可以依据自己以前的积累找到突破口。不要轻易有重装db的想法,在db又冷备的情况下,大胆有理的执行脚本。

 

2011-3-20 18:00

 

 

关键部分在于解决library cache lock的问题,参考:

http://itspace.javaeye.com/blog/963124

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值