1. 程式人生 > >Shutdown Immediate 掛起/活動的processes 阻止shutdown

Shutdown Immediate 掛起/活動的processes 阻止shutdown

process 有時 run 冷備 pos show orm running hat

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)

Shutdown Immediate 掛起/活動的processes 阻止shutdown