Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
2011-07-15 17:30
405 查看
MOS 上有一篇文章专门介绍这个问题,参考:[ID 779552.1]。
在Oracle 10.2.0.4版本中,alert log 可能出现如下错误:
ORA-00494:enqueue [CF] held for too long (more than 900 seconds)
这个错误,通常和ORA-600 [2103] 一起出现。 他们的产生的原因都是一样的。进程在指定时间内(默认900秒)不能获取CF 队列。
一般只在系统高负载,高并发,IO 等待和争夺时,Oracle进程占有相关资源没有释放造成。
有2个bug 可能导致这个问题:
(1)Bug7692631 - 'DATABASE CRASHES WITH ORA-494 AFTER UPGRADE TO 10.2.0.4'
(2)unpublished Bug 7914003 'KILL BLOCKER AFTER ORA-494 LEADS TO FATALBG PROCESS BEING KILLED'
解决方法:
在10.2.0.4 的Oracle 的机制中会kill 所有block的进程,包括后台进程和非后台进程。 要注意的是:
(1) 如果是非后台进程holder 了CF enqueue,那么kill 该进程,那么实例还可以正常运行。
(2)如果是后台进程,如LGWR holder了,那么kill LGWR 将会导致db crash。
为了避免kill 掉blocker 进程(后台和非后台进程),可以设置参数:
_kill_controlfile_enqueue_blocker=false.
这样所有blocker 进程都不会被kill 掉。即使该进程hold 了enqueue 很长时间。一般来说,最好的情况是避免kill 后台进程,允许kill 非后台进程。
为了阻止后台进程被kill,可以在init.ora 文件里设置参数:_kill_enqueue_blocker=1,该参数默认值为3.
当设置该参数之后,如果enqueue 被后台进程holder,该后台进程不会给kill。 所以实例不会crash。 如果enqueue被非后台进程holder,那么10.2.0.4 的机制还是会尝试去kill 非后台进程。
Oracle保留ORA-494 的原因是用户更倾向于instance crash,如果不crash,db 就会hang住。
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
DBA6 群:158654907 聊天 群:40132017 聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
在Oracle 10.2.0.4版本中,alert log 可能出现如下错误:
ORA-00494:enqueue [CF] held for too long (more than 900 seconds)
这个错误,通常和ORA-600 [2103] 一起出现。 他们的产生的原因都是一样的。进程在指定时间内(默认900秒)不能获取CF 队列。
一般只在系统高负载,高并发,IO 等待和争夺时,Oracle进程占有相关资源没有释放造成。
有2个bug 可能导致这个问题:
(1)Bug7692631 - 'DATABASE CRASHES WITH ORA-494 AFTER UPGRADE TO 10.2.0.4'
(2)unpublished Bug 7914003 'KILL BLOCKER AFTER ORA-494 LEADS TO FATALBG PROCESS BEING KILLED'
解决方法:
在10.2.0.4 的Oracle 的机制中会kill 所有block的进程,包括后台进程和非后台进程。 要注意的是:
(1) 如果是非后台进程holder 了CF enqueue,那么kill 该进程,那么实例还可以正常运行。
(2)如果是后台进程,如LGWR holder了,那么kill LGWR 将会导致db crash。
为了避免kill 掉blocker 进程(后台和非后台进程),可以设置参数:
_kill_controlfile_enqueue_blocker=false.
这样所有blocker 进程都不会被kill 掉。即使该进程hold 了enqueue 很长时间。一般来说,最好的情况是避免kill 后台进程,允许kill 非后台进程。
为了阻止后台进程被kill,可以在init.ora 文件里设置参数:_kill_enqueue_blocker=1,该参数默认值为3.
当设置该参数之后,如果enqueue 被后台进程holder,该后台进程不会给kill。 所以实例不会crash。 如果enqueue被非后台进程holder,那么10.2.0.4 的机制还是会尝试去kill 非后台进程。
Oracle保留ORA-494 的原因是用户更倾向于instance crash,如果不crash,db 就会hang住。
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
DBA6 群:158654907 聊天 群:40132017 聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
相关文章推荐
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- Oracle 10.2.0.4 高负载 触发 ORA-00494 错误
- oracle10.2.0 升级10.2.0.4 后,ora-3970;ora-01034错误处理
- oracle 包中的常量(包括全局和私有)与 ORA-04068 错误 (二)
- 删除 SDE.DBF 所带来的ORA-01033: ORACLE initialization or shutdown in progress错误问题
- oracle提示错误消息ORA-28001: the password has expired
- Oracle的莫名奇妙错误ORA-01403等错误
- Oracle错误 ora-12514 解决方法
- 使用Oracle透明网关时的ORA-28545错误
- 【Oracle】【FAQ】Oracle 12c使用sqlplus登录SQL界面,出现“ORA-12560: TNS: 协议适配器错误”
- Oracle loadjava 命令报ORA-06550错误
- 浅谈ORACLE中ORA-06502:PL/SQL:数字或值错误:字符到数值的转换错误
- Oracle查询错误分析:ORA-01791:不是SELECTed表达式
- oracle登录错误(ORA-01033)
- Oracle 通过ADR工具 收集ORA-600错误信息