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