Oracle 11gR2修改使用者後導致系統HANG住
【背景】今天中午的時候使用者反饋需要修改資料庫的和應用的串連密碼,修改密碼這種小事情,本以為不會不會出現問題的。沒想到午休到一半的時候就接到使用者的電話,系統串連不進去了。
【環境】
- 作業系統 linux6.3_64
- 資料庫版本11.2.0.3
【癥狀】使用者修改密碼之後通過應用串連一直串連不上,我登入主機通過sqlplus串連的時候,也是一直處於hang住狀態,但是sys、system使用者進行串連的時候速度就很快;
[Oracle@ekpdbtest ~]$ sqlplus / as sysdba (資料庫可以正常登入)
SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 10 17:37:42 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
SQL> conn sale/oracle (HANG住了)
【備忘】作業系統的CPU、記憶體、網路、磁碟空間都沒有發現異常;
1、查看等待事件
通過查看awr報告,library cache lock等待嚴重
wait % DB
Event Waits Time(s) (ms) time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
library cache lock 866 145,056 2.E+05 92.0 Concurrenc
row cache lock 195 9,155 46948 5.8 Concurrenc
2、恢複使用者到修改前的密碼
SQL> conn sale/sale (可以登入)
【問題原因】經過一番尋找發現該問題屬於ORACLE 11的一個新特性,如果一個使用者使用不正確的密碼嘗試登入資料庫,那麼隨著登入失敗次數的增加,每次登入驗證前延遲等待的時間也會增加。這個特性主要用於避免一些程式採用錯誤的密碼進行嘗試性的登入;所有這一切都已經說明,當前有一個或多個中介軟體伺服器在使用錯誤的密碼串連資料庫,由於密碼延遲驗資料證的策略,導致所有後續的串連都被HANG住。
使用者的環境是怎麼觸發這個特性的了?
使用者的環境中,串連資料庫不僅有應用程式層,還有一些【地磅系統】,這些系統直接連接資料庫,所以雖然更改了應用的密碼,但是地磅系統由於數量眾多且修改麻煩,所以應用的串連密碼修改後,地磅系統的串連密碼並沒有改,所以一直在用錯誤的密碼進行登入,而觸發了【密碼延遲驗證導致的系統HANG住】
【解決方案】這個性特性可以提供系統的安全性,但同時也引入了bug,Oracle最強大之處就在於幾乎所有的功能和特性都有對應的開關,通過設定EVENTS 28401可以屏蔽密碼延遲驗證,重啟資料庫後解決。
SQL> ALTER SYSTEM SET EVENT = ‘28401 TRACE NAME CONTEXT FOREVER, LEVEL 1’ SCOPE = SPFILE;
【總結】暫時性的關閉這個特性,然後再逐步修改每個系統的密碼,又化解了一次危機;