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アドレス>・ポート番号):ADDRESS = (PROTOCOL = TCP)(HOST = orclhost)(PORT = 1521)
データベースサービス名: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 ファイルを確認していきましょう。