oracle cf enqueue,ORA-00494: enqueue [CF] held for too long (more than 900 seconds)

网上一个朋友遇到数据库启动不了,具体信息如下

数据库版本: ORA 10G R2

主机 HPUNIX

现象: 当startup之后,数据库一直停留在 database mounted状态。一直Open不鸟~。

alter log 文件(节选)如下:

Fri Nov 11 09:31:01 2011

Completed: ALTER DATABASE   MOUNT

Fri Nov 11 09:31:08 2011

ALTER DATABASE OPEN

Fri Nov 11 09:40:32 2011

Errors in file /opt/oracle/oracle1/admin/gminer/bdump/gminer_dbw0_3122.trc:

ORA-00240: control file enqueue held for more than 120 seconds

Fri Nov 11 09:47:18 2011

Errors in file /opt/oracle/oracle1/admin/gminer/bdump/gminer_dbw0_3122.trc:

Fri Nov 11 10:02:53 2011

Errors in file /opt/oracle/oracle1/admin/gminer/udump/gminer_ora_3555.trc:

ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 3122'

Fri Nov 11 10:02:55 2011

System State dumped to trace file /opt/oracle/oracle1/admin/gminer/udump/gminer_ora_3555.trc

Killing enqueue blocker (pid=3122) on resource CF-00000000-00000000

by killing session 54.1

可以看到有个进程PID=3122,持有CF锁的时间太长,ORACLE将该进程杀掉。

MOS上有一篇文章,通过设置_kill_enqueue_blocker=1 可以阻止ORACLE杀掉核心进程,避免了数据库实例CRASH。

这个问题还需要进一步的分析,为啥PID=3122的进程持有CF锁的时间那么久。

ORA-00494 During High Load After 10.2.0.4 Upgrade [ID 779552.1]

修改时间07-OCT-2011类型PROBLEM状态MODERATED

In this Document

This document is being delivered to you via Oracle Support's Rapid Visibility (RaV) process and therefore has not been subject to an independent technical review.

Applies to:

Oracle Server - Enterprise Edition - Version: 10.2.0.4 and later   [Release: 10.2 and later ]

Information in this document applies to any platform.

***Checked for relevance on 07-Oct-2011***

Symptoms

In 10.2.0.4 database alert log the following error appears:

ORA-00494: enqueue [CF] held for too long (more than 900 seconds)

This error can also be accompanied by ORA-600 [2103] which is basically the same problem - a process was unable to obtain the CF enqueue within the specified timeout (default 900 seconds).

This behavior can be correlated with server high load and high concurrency on resources, IO waits and contention, which keep the Oracle background processes from receiving the necessary resources.

Cause

The problem has been first investigated in

- 'DATABASE CRASHES WITH ORA-494 AFTER UPGRADE TO 10.2.0.4'

and then in unpublished

Bug 7914003 'KILL BLOCKER AFTER ORA-494 LEADS TO FATAL BG PROCESS BEING KILLED'

Solution

This kill blocker interface / ORA-494 was introduced in 10.2.0.4. This new mechanism will kill *any* kind of blocking process, non-background or background.

The difference will be that if the enqueue holder is a non-background process, even if it is killed, the instance can function without it.

In case the holder is a background process, for example the LGWR, the kill of the holder leads to instance crash.

If you want to avoid the kill of the blocker (background or non-background process), you can set

_kill_controlfile_enqueue_blocker=false.

This means that no type of blocker will be killed anymore although the resolution to this problem should focus on why the process is holding the enqueue for so long. Also, you may prefer to only avoid killing background processes, since they are vital to the instance, and you may want to allow the killing of non-background blokers.

This has been addressed in a secondary bug - unpublished Bug 7914003 'KILL BLOCKER AFTER ORA-494 LEADS TO FATAL BG PROCESS BEING KILLED' which was closed as Not a bug.

In order to prevent a background blocker from being killed, you can set the following init.ora parameter to 1 (default is 3).

_kill_enqueue_blocker=1With this parameter, if the enqueue holder is a background process, then it will not be killed, therefore the instance will not crash. If the enqueue holder is not a background process, the new 10.2.0.4 mechanism will still try to kill it.

The reason why the blocker interface with ORA-494 is kept is because, in most cases, customers would prefer crashing the instance than having a cluster-wide hang.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: engine:enqueue和engine:dispatch都是游戏引擎中的方法,用于处理游戏中的事件。它们的区别在于: 1. engine:enqueue是将事件加入到事件队列中,等待处理。这个方法是异步的,事件并不会立即执行,而是等待游戏引擎处理完其他的事件后再执行。这种方式可以增加游戏的响应速度。 2. engine:dispatch是立即执行事件。这个方法是同步的,事件会立即执行。如果有多个事件需要处理,会按照加入的顺序依次执行。 总的来说,engine:enqueue适合在需要处理大量事件的情况下,可以让游戏引擎更好地管理事件队列;engine:dispatch适合在需要立即执行事件的情况下,比如玩家按下某个按键时需要立即响应。 ### 回答2: engine:enqueue和engine:dispatch都是通信引擎(communication engine)中的方法,用于在程序中进行事件管理和任务分发。它们的区别在于下面几个方面: 1.功能不同: - engine:enqueue方法用于将一个事件(event)放入到事件队列中,等待被处理。它通常用于将一个任务添加到队列中,以便在适当的时候执行。 - engine:dispatch方法用于直接将事件派发给目标对象,无需将事件放入队列中。它通常用于即时触发事件,以及将事件传递给特定的对象进行处理。 2.执行时机不同: - 对于engine:enqueue方法,事件将按照队列中的顺序进行处理,先进先出。事件的执行可能会被推迟,直到队列中的前面的任务执行完毕。 - 对于engine:dispatch方法,事件将立即触发执行,不需要等待其他任务完成。它通常用于需要立即执行的任务或与特定对象相关的事件。 3.应用场景不同: - engine:enqueue方法适用于需要按顺序执行的任务,可以保证任务之间的相对顺序。 - engine:dispatch方法适用于需要即时执行的任务,或者需要将事件传递给特定对象进行处理的场景。 总的来说,engine:enqueue方法用于将任务添加到队列中进行调度,而engine:dispatch方法用于立即触发执行任务。根据具体的应用场景选择合适的方法可以提高程序的效率和灵活性。 ### 回答3: engine:enqueue和engine:dispatch是两种不同的调度方式。 engine:enqueue是指将任务添加到引擎的任务队列中,然后根据队列中任务添加的顺序依次执行。这种方式适用于任务之间无关联、无依赖关系的情况。任务会按照添加的先后顺序进行执行,不会产生并发执行的效果。 engine:dispatch是指引擎直接调度任务的执行顺序,可以按照一定的调度策略来执行任务。这种方式适用于任务之间有依赖关系或需要并发执行的情况。引擎可以根据任务之间的依赖关系或者其他调度算法,合理地安排任务的执行顺序,以提高效率或满足业务需求。 总结来说,engine:enqueue是简单地将任务添加到队列中,顺序执行;而engine:dispatch可以根据调度策略灵活地调整任务的执行顺序。选择使用哪种方式取决于具体的业务需求和任务之间的关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值