oracle添加字段引起的问题

author:skate

time:2010-05-27


oracle添加字段引起的问题

 

     由于同事在添加了表的字段后,没有重新编译数据库的对象,导致和这个表相关的很多procedure和package都失效。
由于发现后是在修改后2个小时吧,而在这期间很多程序在调用这些过程,致使很多会话都僵死在那,所以也无法
再重新编译过去,及时kill相应session进程也无法编译,由于业务需要数据库快速提供服务,于是决定重启数据库

当我发出shutdown immediate1分钟后,有一种不祥的预感,数据库很难关闭,数据库里存在active事务,而且因为
对象失效,所以在那一直跑(僵死在那),我赶紧查看alert.log,如下所示:


Thu May 27 13:07:19 2010
Thread 1 advanced to log sequence 3666
  Current log# 5 seq# 3666 mem# 0: /u01/oradata/dbtica/redo05.log
Thu May 27 13:59:37 2010
Starting background process EMN0
EMN0 started with pid=53, OS id=12951
Thu May 27 13:59:37 2010
Shutting down instance: further logons disabled
Thu May 27 13:59:37 2010
Stopping background process CJQ0
Thu May 27 13:59:37 2010
Stopping background process QMNC
Thu May 27 13:59:38 2010
Stopping background process MMNL
Thu May 27 13:59:39 2010
Stopping background process MMON
Thu May 27 13:59:41 2010
Shutting down instance (immediate)
License high water mark = 111
Thu May 27 13:59:41 2010
Stopping Job queue slave processes
Thu May 27 13:59:41 2010
Job queue slave processes stopped
Thu May 27 14:04:40 2010
Active call for process 19325 user 'oracle' program 'oracle@ticketA.happypool.cn (TNS V1-V3)'
SHUTDOWN: waiting for active calls to complete.
Thu May 27 14:19:31 2010
MMNL absent for 1206 secs; Foregrounds taking over

 

从alert.log里可以证实我的想法,确实存在active的事务,看样子一时半会是不能关闭的,并且如果事务在shutdown后1小时还没有跑完,系统就自动取消shutdown。而业务又急需提供给服务

 

我于是想了如下几个方法


1. 用 shutdown abort强制关闭
2. 用kill进程的方法 : ps -ef |grep ora_|awk '{print $2}'| xargs kill -9
3. 实在不行就reboot(根据现在的情况,不会到这一步的)

 

我于是又耐心的等10分钟,还是没有反应。我决定执行shutdown abort ,在继续观察alert.log,如下:


Thu May 27 14:24:06 2010
Shutting down instance (abort)
License high water mark = 111
Instance terminated by USER, pid = 13255
Thu May 27 14:24:52 2010
Starting ORACLE instance (normal)

 

这回数据库关闭了,然后startup数据库,数据库很快正常启动了,启动后,重新编译数据库无效的对象,最后验证无误,应用正常工作

 


总结:

 

1.修改数据库对象物理结构时要注意重新编译所有无效对象,要寻找业务低峰期,并采用正确的方法减少锁对业务的影响
2.事先要仔细考虑修改字段对其他的影响
3.在解决问题时,要冷静,要多想几套方案以备处理最坏情况

 

 

 

 

 

-----end-----

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值