ORA-28000: アカウントがロックされています。

データベースへ接続する時に、 ORA-28000: アカウントがロックされています。
というエラーが表示された場合、その Oracle ユーザがアカウントロックされて
接続出来ない状態を示している。



アカウントロックの原因

ORA-28000 の原因は、管理者にアカウントロックされたためか、パスワードを
連続失敗してしまって、プロファイルパラメータ FAILED_LOGIN_ATTEMPTS で
許容されている閾値を超えたことが考えられる。

では、あえてアカウントロックをしてみて動作を確認してみる。

アカウントロックの解除

dba_users テーブルでステータスを確認する

SQL> select username, account_status, profile from dba_users where username = 'TEST';

USERNAME ACCOUNT_STATUS PROFILE
-------- -------------- -------
TEST     OPEN           DEFAULT

→ ACCOUNT_STATUS が OPEN であることが分かる。

TEST ユーザをロックする

SQL> alter user TEST account lock;

ユーザーが変更されました。

再度、dba_users テーブルを確認

USERNAME ACCOUNT_STATUS PROFILE
-------- -------------- -------
TEST     LOCKED         DEFAULT

→ ACCOUNT_STATUS が LOCKED に変更された。

TEST ユーザでログイン

% sqlplus test/test@orcl

ERROR:
ORA-28000: アカウントがロックされています。

TEST ユーザのロックを解除する

SQL> alter user TEST account unlock;

ユーザーが変更されました。

再度、dba_users テーブルを確認

USERNAME ACCOUNT_STATUS PROFILE
-------- -------------- -------
TEST     OPEN           DEFAULT

→ ACCOUNT_STATUS が OPEN に変更された。

セキュリティに厳しい環境では、許容されるログイン失敗回数も少なく、
パスワードを連続失敗によるロックが大半だろうと思う。

変更権限がないなら DBA へ依頼して解除してもらうか、
ロック時間が過ぎるのをひたすら待つほかない。

ちなみにロック時間はプロファイルパラメータの PASSWORD_LOCK_TIME で
設定されていて、これを過ぎればロックが解除される。
(もし、UNLIMITED だったら正直に申告を。)