こんにちは、shimashima(しましま)です。
先日、Oracle19cでORA-280001のエラーが発生したので、その対処法を共有させてもらいます。
ORA-28001
パスワードが期限切れです
the password has expired
Oracleを扱っていると、過去に何回かでくわすエラーですね。
対策を打てば、次以降からは出てこないので、最近19cに変えてからこのエラーが出てきて、対策をすっかり忘れていたので、備忘録です。
理由は簡単で、初期だとパスワードの有効期限が180日なので、それがすぎればそのままのメッセージが出てきているということです。
パスワードを変更すれば良いのですが、毎回180日毎に変えるのも面倒なので、パスワードの有効期限を無期限に変更します。
対処方法は、簡単です。
検索すると、色々出てきますからね。
みなさん良くsqlplusで接続されている方が多いのですが、分かりやすくSQLDeveloperでの操作で説明します。
SQLDeveloperは無償でOracleから提供されているGUIツールです。
接続設定等は割愛します。
2つのSQL文を実行するだけです。
まず、180日毎にパスワード変更するのは面度なので、パスワードの有効期限を無期限に変えてしまいます。
パスワードの有効期限を無期限に変更するSQL
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
次に180日過ぎていると、アカウントがロックされている可能性もあるので、アカウントのロックを解除します。
アカウントのロックを解除するSQL
ALTER USER ユーザー名 ACCOUNT UNLOCK;
これで接続できた!と思ったら、今度は次のエラーが発生しました。
ORA-01017
ユーザー名/パスワードが無効です;ログオンは拒否されました
Invalid username/password; logon denied.
と思って、何度もパスワードを打ち直しましたが、同じエラーが出て、ついにはパスワードを規定回数間違えて、ユーザーがロックされました。
アカウントのロックの解除は、先ほどの以下のSQLを実行すれば、すぐに直るのですが。
アカウントのロックを解除するSQL
ALTER USER ユーザー名 ACCOUNT UNLOCK;
そんなわけで、なんだろうと調べていたら、再度パスワードを変更する必要があったみたいです。
前のパスワードは無期限にする前のパスワードなんだから、180日で使えなくなっているので、そりゃそうだってことです。
そこで、SQLで以下を実行します。
パスワードを変更するSQL
ALTER USER ユーザ名 IDENTIFIED BY パスワード;
そして、再度クライアントからアクセスすると、エラー無く、無事に接続できました!