zoukankan      html  css  js  c++  java
  • 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                        oracle@lgiora09 (q001)
      248                        oracle@lgiora09 (q000)
      251 DBSNMP                 emagent@lgiora09 (TNS V1-V3)
      252 SYSMAN                 OMS
      253 SYSMAN                 OMS
      254 DBSNMP                 emagent@lgiora09 (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)

  • 相关阅读:
    323. Number of Connected Components in an Undirected Graph
    418. Sentence Screen Fitting
    417. Pacific Atlantic Water Flow
    416. Partition Equal Subset Sum
    415. Add Strings
    245. Shortest Word Distance III
    [AHOI2009]维护序列
    [洛谷P1439]排列LCS问题
    [Vijos P1369]难解的问题
    [codevs3657]括号序列
  • 原文地址:https://www.cnblogs.com/hezt1114/p/8487928.html
Copyright © 2011-2022 走看看