oracle加字段卡住,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-----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值