Oracleエラー対応(ORA-12154):ORA-12154 発生時の対処方法について

現役DBAが解説-Oracleエラー対応
クライアントPCから初めてデータベースに接続する際や、Object Browserなどのツールを利用してデータベースに接続する際、もしくはアプリ⇔データベースの接続設定に変更があった場合などにORA-12154 エラーが発生したことはないでしょうか?
今回は、接続先情報が認識できない場合に発生するORA-12154について、原因および解決策を解説します。
1. エラーメッセージ
ORA-12154: TNS: 指定された接続識別子を解決できませんでした。
2. 事象
指定した接続識別子(接続先データベース情報を簡単に表記した名前)を認識できず、データベースへの接続が失敗した場合、ORA-12154が発生します。
◆エラー発生例
・クライアントPC上からデータベース接続時に発生(接続識別子 ORCL を使用)
$ sqlplus TEST/USER@ORCL ERROR: ORA-12154: TNS:could not resolve the connect identifier specified
・DBLINK使用時に発生(接続識別子 ORCL を使用)
SQL> SELECT * FROM USER.TEST_TABLE@ORCL_DBLINK; SELECT * FROM USER.TEST_TABLE@ORCL_DBLINK * ERROR at line 1: ORA-12154: TNS:could not resolve the connect identifier specified SQL> SELECT OWNER, DB_LINK, USERNAME, HOST FROM DBA_DB_LINKS WHERE DB_LINK = 'ORCL_DBLINK; OWNER DB_LINK USERNAME HOST -------------------- -------------------- -------------------- -------------------- OWNER_USER ORCL_DBLINK USER ORCL
3. 原因と解決策
それでは、ORA-12154 の発生原因と解決策についてご紹介します。
①tnsnames.oraファイルに記載した接続識別子との不一致
指定した接続識別子の記述がtnsnames.oraファイル内に存在しないため、エラーとなります。
接続コマンドおよびtnsnames.oraファイルの構文・内容に誤りがないことを確認し、必要であればtnsnames.oraファイルへ接続先データベース情報を修正・追記してください。
また、tnsnames.oraファイルの格納先ディレクトリはデフォルトで<$ORACLE_HOME/network/admin/>となっています。
環境変数TNS_ADMINを使用して別の格納先を指定することも可能です。
●tnsnames.oraファイルの記載例
SID_ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orclhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
各項目では以下の内容を設定しています。
接続先データベース情報に誤りがないか確認しておきましょう。
接続識別子(ネットサービス名):SID_ORCL
リスナー情報(プロトコル・ホスト名<IPアドレス>
データベースサービス名:SERVICE_NAME = orcl
◆エラー解消例
事象の説明で記載したエラー発生例(クライアントPC上からデータベース接続時に発生)では、使用した接続識別子ORCLの記述がtnsnames.oraファイルに存在しないためエラーとなっています。
例えば、tnsnames.oraファイルに記載した正しい接続識別子SID_ORCLを使用することで解消されます。
$ sqlplus TEST/USER@SID_ORCL Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> SQL> show user USER is "TEST"
②sqlnet.oraファイルの設定内容の誤り
sqlnet.oraファイル内にNAMES.DIRECTORY_PATHパラメータを設定している場合、ネーミングメソッドの指定に誤りがないか確認しましょう。
なお、NAMES.DIRECTORY_PATHパラメータを設定していない場合、簡易接続ネーミングおよびローカルネーミングはデフォルトで有効になっています。
●sqlnet.oraファイルの記載例
NAMES.DIRECTORY_PATH=(tnsnames)
各ネーミングメソッドの値は以下の通りです。
ローカルネーミング:tnsnames
簡易接続ネーミング:ezconnect または hostname
ディレクトリネーミング:ldap
外部ネーミング:nis
4. 最後に
ORA-12154 が発生した場合は、接続先データベース情報に誤りがある可能性が高いです。
まずは、実行コマンドや tnsnames.ora ファイルを確認していきましょう。