「tnsnames.ora」タグアーカイブ

Oracle「ORA-01017:ユーザー名/パスワードが無効です。ログオンは拒否されました。ユーザー名を入力してください。」が出た場合の原因と対応方法

Oracle Databaseを利用していると、多くの人が一度は遭遇するエラーが 「ORA-01017: invalid username/password; logon denied」 です。
SQL*PlusやSQL Developerでのログイン、あるいはアプリケーションの起動時に表示され、作業がストップしてしまう厄介なエラーです。

本記事では、このエラーの 原因と解決方法を体系的に整理 し、実際の現場で役立つ対応手順を紹介します。


ORA-01017エラーとは?

このエラーは、Oracleが「入力されたユーザー名またはパスワードが正しくないため、ログオンを拒否した」と判断した際に表示されます。

主に以下のようなシーンで発生します。

  • SQL*Plus で手動ログインするとき

  • SQL Developer などのGUIツールから接続するとき

  • Java/JDBCやPHP などのアプリケーションがDB接続を試みるとき

  • バッチ処理シェルスクリプト による自動接続

単純にパスワードを打ち間違えただけでも発生しますが、実際の現場ではもっと複雑な原因が潜んでいることもあります。


ORA-01017が発生する主な原因

1. ユーザー名やパスワードの誤り

  • スペルミス(大文字・小文字の違いも区別される)

  • コピペ時の不可視文字(空白や改行が含まれている)

  • ユーザー作成時に "USERNAME" のように ダブルクォーテーション付き で作成しており、大文字小文字が厳密に一致していない

2. アカウントがロックされている/パスワード期限切れ

Oracleではセキュリティのため、一定回数の失敗でアカウントがロックされたり、パスワードに有効期限が設定されている場合があります。

3. 認証方式の違い

  • Oracle 12c以降では、古い認証方式(DESなど)が無効化されている

  • 古いクライアント/JDBCドライバで接続すると認証エラーになる

4. 接続先の設定ミス

  • tnsnames.ora の設定が間違っている

  • service_nameSID が異なる環境を参照している

  • テスト環境と本番環境を取り違えている

5. 外部認証の影響

  • OS認証(/ as sysdba)を利用しているが権限が不足している

  • パスワードファイル(orapwd)が正しく作成されていない


ORA-01017エラーの解決方法

1. ユーザー名・パスワードを正確に確認する

まずは基本中の基本。

  • コピー&ペーストではなく手入力 で試す

  • 大文字小文字を区別することを意識する

  • ユーザー作成時に "USERNAME" のように指定していないか確認

2. アカウントの状態を確認する

管理者ユーザーで以下を実行します。

  • LOCKEDALTER USER ユーザー名 ACCOUNT UNLOCK;

  • EXPIREDALTER USER ユーザー名 IDENTIFIED BY 新パスワード;

3. 認証方式を見直す

ユーザーごとのパスワードバージョンを確認:

  • 10G のみ → 古い方式。新しいクライアントで接続不可の可能性あり

  • 11G12C が含まれているか確認

  • JDBCドライバやOCIクライアントを 最新化 する

4. 接続文字列を確認する

誤接続が多いポイントです。

  • hostnameservice_name が正しいか

  • ローカルの tnsnames.ora が古い情報を持っていないか

5. 外部認証を確認する

  • OSユーザーに必要な権限があるか

  • SYSDBA接続が可能な状態か

  • パスワードファイルが壊れていれば orapwd コマンドで再作成


現場でのチェックリスト

  1. 入力の大文字・小文字を再確認する

  2. コピペではなく手入力で試す

  3. DBA_USERS を確認してアカウント状態を把握

  4. クライアントやJDBCドライバを最新化

  5. 接続先(サービス名/ホスト名)が正しいか見直す

  6. OS認証やパスワードファイルに問題がないか確認


まとめ

「ORA-01017」は、単純に「パスワード間違い」と片付けがちですが、実際には アカウントロック、認証方式、接続先設定の誤り など複数の要因が絡むことがあります。

対処の基本ステップは以下の通りです。

  • 入力の確認 → アカウント状態の確認 → 認証方式・接続設定の見直し

これを押さえておけば、大半のケースで迅速に問題を解決できます。

Oracle:ORA-12514エラーの原因と対処法をわかりやすく解説!

Oracleデータベースに接続しようとしたときに表示される

「ORA-12514: TNS:listener does not currently know of service requested in connect descriptor」 エラー。
初めて遭遇すると「何が原因なの?」と戸惑いますよね。

この記事では、ORA-12514エラーの意味・主な原因・確認ポイント・具体的な対処方法を、初心者にもわかりやすく解説します。


◆ ORA-12514エラーとは?

エラーメッセージ全文:

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

これは簡単に言うと、クライアント側が接続しようとしているサービス名を、リスナーが認識できていないという意味です。


◆ 主な原因とチェックポイント

原因説明チェックポイント
サービス名の誤記接続文字列で指定しているサービス名が存在しない、またはタイプミスtnsnames.oraのSERVICE_NAMEやDB側のサービス名(lsnrctl status)を確認
リスナーがサービスを登録していないリスナーが起動していても、対象のインスタンスが登録されていないDB起動状態の確認、lsnrctl statusで登録サービスを確認
接続先がSID指定になっている接続方式がSID指定なのにサービス名でアクセスしている、またはその逆接続方法をSID or SERVICE_NAMEに合わせて見直す
データベース未起動DBが起動していないため、サービスがリスナーに登録されないsqlplus / as sysdba → startup でDB起動を確認
リスナーの設定ミスlistener.ora に不要な制限や間違いがあるlistener.oraを見直し、設定ミスがないかチェック

◆ 対処法:よくあるパターン別解決手順

✅ パターン1:サービス名の誤り

エラーメッセージ例:

ORA-12514: TNS:listener does not currently know of service requested

対処方法:

  1. lsnrctl status で現在リスナーが認識しているサービス名を確認

  2. tnsnames.ora や JDBC URL に記載されている SERVICE_NAME と一致しているか確認

  3. 必要に応じて修正して再接続


✅ パターン2:データベースが起動していない

確認方法:

sqlplus / as sysdba
 
startup;

→ DBが停止していた場合は、このコマンドで起動することで解消します。


✅ パターン3:接続方式がSID指定になっている

tnsnames.ora の記述例(良くない例)

 
SERVICE_NAME = ORCL

→ SID指定をしたいなら以下のように記述

 
SID = ORCL

または、JDBC URL では :SID/SERVICE_NAME の違いに注意。

 
// SID指定 jdbc:oracle:thin:@host:1521:ORCL // SERVICE_NAME指定 jdbc:oracle:thin:@//host:1521/ORCL

◆ 補足:lsnrctlでのサービス確認方法

 
lsnrctl status

実行結果の中に Service "XXX" has 1 instance(s) の記述があれば、リスナーはそのサービスを認識しています。


◆ まとめ

  • ORA-12514は「リスナーがサービスを認識していない」ことが原因

  • 原因は設定ミス・サービス名の誤り・DB未起動など多岐にわたる

  • まずは lsnrctl statustnsnames.ora の内容を照らし合わせよう


◆ よくある質問(FAQ)

Q1. サービス名はどこで確認できますか?
A. lsnrctl status で確認可能です。あるいはDB起動後に SELECT value FROM v$parameter WHERE name='service_names'; でも取得できます。

Q2. SIDとSERVICE_NAMEは何が違う?
A. SIDは「インスタンス名」、SERVICE_NAMEは「サービス識別子」。Oracle 9i以降はSERVICE_NAME推奨です。