解決Oracle數據庫ORA-28001

        今天客戶突然來找我說服務器起不來了,啓動報錯,我一看不得了,這可是大事,還好客戶的系統面向內部,使用的人比較少,於是我讓他們把日誌發給我,經過查看日誌,發現一段java報錯日誌:

Caused by: java.sql.SQLException: ORA-28001: the password has expired

        經過查資料發現,這是因爲Oracle 11G在安裝時默認的安全協議是密碼每180天修改一次(如果我們的實施人員部署環境時不把這個修改成無限制的話,可能會在半年後對客戶造成損失和給開發人員挖坑),現在,我們以sysdba權限連接數據庫用下面這句SQL可以查詢我們的Oracle數據庫是否有每180天需要修改數據庫的設置。

如果要在CMD中操作,先以sysdba連接數據庫,進入Oracle自帶的工具SQL Plus:

sqlplus/nolog 
conn / as sysdba;
conn sys/123@orcl as sysdba;

然後執行查詢安全協議定時修改密碼的設置的SQL語句查詢:

SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' AND RESOURCE_NAME = 'PASSWORD_LIFE_TIME';

(因爲我這裏已經修改成無限制了,之前的也沒有截圖,我就語言描述一下)

        查詢出來看到LIMIT字段下的值是"180"的話,那就是說明當前已連接的Oracle數據庫需要在每隔180天時修改用戶的密碼。

這時我們執行把安全協議的設置改爲無限制,不限時修改密碼的SQL語句:

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
COMIT;

        執行完可以再執行上面查詢安全協議設置的語句,當LIMIT字段是"UNLIMITED"時就說明已經修改成功了。

然後執行修改密碼過期的用戶的密碼的SQL語句:

ALTER USER 用戶名 IDENTIFIED BY 密碼;

這個時候如果用戶已被鎖定,需要執行解鎖用戶的SQL語句:

ALTER USER 用戶名 IDENTIFIED BY ORACLE ACCOUNT UNLOCK;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章