解決Oracle數據庫ORA-28001

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

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

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

若是要在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"時就說明已經修改爲功了。code

而後執行修改密碼過時的用戶的密碼的SQL語句:開發

ALTER USER 用戶名 IDENTIFIED BY 密碼;

這個時候若是用戶已被鎖定,須要執行解鎖用戶的SQL語句:部署

ALTER USER 用戶名 IDENTIFIED BY ORACLE ACCOUNT UNLOCK;
相關文章
相關標籤/搜索