shutdown immediate 太慢,需要進行程式查殺

huangdazhu發表於2016-01-26

問題引出:測試環境,進行oralceshutdown immediate,等待時間很長,長的無法等待

ORACLE shutdown 過程

1、shutdown normal(正常關閉方式):阻止任何使用者建立新的連線;等待當前所有正在連線的使用者主動斷開連線;當所有的使用者都斷開連線後,將立即關閉資料庫

2、shutdown transactional(實務關閉方式):阻止使用者連線新的連線和開始新事務;等待所有活動事務提交後,再斷開使用者連線;當所有的活動實務提交完畢、所有的使用者都斷開連線後,將關閉資料庫

3shutdown immediate(立即關閉方式)阻止使用者連線新連線和開始新事務;將未提交的活動事務回退;關閉資料庫

4、shutdown abort(終止關閉方式):阻止使用者建立新連線和開始新事務;取消未提交的活動事務,而不是回退;立即終止正在執行的任何SQL語句;立即關閉資料庫

無疑,shutdown abort是最開速關閉資料庫的方式,但是很可能會使資料庫處於不一致狀態,嚴重可能損壞資料庫,導致資料庫起不來,特別是生產環境。雖然現在是測試環境,但是也不建議這樣做。推薦使用shutdown immediate方式關閉資料庫。

快速關閉資料庫的因素:

1、連線的客戶端程式數量

2、未提交的事務佔用的UNDO BLOCK數量

3、長時間執行的會話

4、SMON程式清理臨時段的速度

問題分析與解決:

金融業務,頻繁使用PL/SQL developer連線資料庫進行查詢

輸入ps aux | grep oracle檢視程式


可以看到LOCAL=NO即透過監聽進行的網路連線,看了下環境,大概有好幾千個

可以進行kill -9 pid進行結束會話,但是好幾千個會話,一個個的輸入是要累死的節奏。shutdown immediate的時候,oracle也會自動去斷開所有的客戶端連線,這樣也很慢。

使用如下語句進行批次殺會話,這樣就可以快速關閉資料庫

ps aux |grep "LOCAL=NO" |awk '{printf "%s/n", $2}' |xargs kill -9
或者linux作業系統
ps -ef |grep "LOCAL=NO" |awk '{print $2}'|xargs kill -9

正常關閉資料庫流程:

1、關監聽

2、斷session

3、shutdown immediate

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28869493/viewspace-1982684/,如需轉載,請註明出處,否則將追究法律責任。

相關文章