Shutdown Immediate 挂起/活动的processes 阻止shutdown

Posted 小蜜蜂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shutdown Immediate 挂起/活动的processes 阻止shutdown相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/msdnchina/article/details/37613451

 

Shutdown Immediate 挂起/活动的processes 阻止shutdown

原文:Shutdown Immediate Hangs / Active Processes Prevent Shutdown (Doc ID 416658.1)

适用于:
Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.2 [Release 10.1 to 11.2]
Information in this document applies to any platform.


症状:
The ‘shutdown immediate‘ 命令  挂起 or 十分缓慢 ( is very slow )

The alert log 显示类似如下的信息:

SHUTDOWN: waiting for active calls to complete.

ACTIVE PROCESSES PREVENT SHUTDOWN OPERATION

原因:
这不是bug

如果DB Control repository 正在database 上运行,
并且该database 正是 试图  shutdown immediate 的对象。此时,使用了不正确的关闭顺序。

Current database sessions may show:

SQL> select SID, USERNAME, PROGRAM from v$session;
SID   USERNAME               PROGRAM
----- ---------------------- ----------------------------------
  243 SYSTEM                 SQL Developer
  246 SYSMAN                 OMS
  247                        [email protected] (q001)
  248                        [email protected] (q000)
  251 DBSNMP                 [email protected] (TNS V1-V3)
  252 SYSMAN                 OMS
  253 SYSMAN                 OMS
  254 DBSNMP                 [email protected] (TNS V1-V3)
  255 SYSTEM                 java.exe
  256 SYSMAN                 OMS

很明显,OMS and OEM 经由sysman 和dbsnmp用户被连接到数据库中(Oracle Enterprise Manager Grid Control or DBConsole)

在shutdown immediate 执行之前,这些session 应该是非活动状态(that is to log off any OEM, OMS, SYSMAN and DBSNMP)


Oracle Enterprise Manager, Grid Control, Dbconsole and agents 维持着一些内部处理操作。
这些操作包括 一些 运行在database上的 PLSQL notification procedures。
比如BEGIN EMD_NOTIFICATION.QUEUE_READY(:1, :2, :3); END;

根据 shutdown immediate 的内部文档,如果有active calls,shutdown 应该要等待直到所有的active calls被完成。


解决方案:

1. 假设 oem 连接 是active(SYSMAN and DBSNMP),de-activate这些session,比如,通过stopping the agent/DBConsole


2.然后再执行 shutdown immediate

----------or--------------------

在shutdown时,可能会有进程在running 并且持有了 lock。
有时,这些是失败的job or transaction,
这些失败的job or transaction 是 事实上的 ‘zombies‘,
这些失败的job or transaction 是 不能从oracle中接收到signal


如果情况是这样,the only 方法是通过如下方法关闭数据库:

sql>
shutdown abort
startup restrict
shutdown normal

startup 会做任何需要的recovery and cleanup,因此 之后 可以做一个valid 的冷备份。

如果这个问题经常发生,那么最佳实践就是 在shutdown instance之前,看一下v$session 和 v$process中有没有  any active user processes running

如果这个问题继续存在,并且没有可见的用户进程是active的,你可以在发出shutdown 命令之前设置下面的这个event,来看看什么会发生。
当shutdown hang是,该event每个5分钟 dump 了一个 systemstate。

SQL>
connect / as sysdba
alter session set events ‘10400 trace name context forever, level 1‘;


然后再发出shutdown 命令


3. 你可以kill 那些 阻止关闭的 session。
   参考:Alert Log: Shutdown Waiting for Active Calls to Complete (Doc ID 1039389.6)

以上是关于Shutdown Immediate 挂起/活动的processes 阻止shutdown的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 关闭(shutdown immediate)时hang住

oracle shutdown immediate 一直没反应解决方案

shutdown immediate 导致数据库无法重启(下)

Oracle shutdown immediate命令关闭数据库时没有反应

oracle执行完shutdown immediate后登陆不上了怎么办

Oracle数据库关闭异常(ORA-01089: immediate shutdown in progress - no operations are permitted)的解决方法