ebichan_88
@ebichan_88 (Takashi Ebina)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Oracle】データベース接続時に「ORA-12154: TNS: 指定された接続識別子を解決できませんでした」が発生

解決したいこと

Oracleでデータベース接続時に 「ORA-12154: TNS: 指定された接続識別子を解決できませんでした」 が発生しています。

知識不足で申し訳ありませんが、解決方法についてご教授いただきたく思います。

DBMS バージョン
Oracle Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

発生している問題・エラー

エラー内容

コンソール出力内容
PS C:\Users\takas> sqlplus USER1/USER1@ORCLPDB

SQL*Plus: Release 21.0.0.0.0 - Production on 日 5月 12 10:25:14 2024
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS: 指定された接続識別子を解決できませんでした


ユーザー名を入力してください:

実施した内容

前提として、Oracelのインストールからデータベースの作成において、主に以下の記事を参考にしております。

エラー発生前に実施した内容は以下です。

1.OS認証を使用して接続

コマンドイメージ
sqlplus / as sysdba

2.PDBに移動

コマンドイメージ
alter session set container = ORCLPDB;

3.ユーザーの作成・権限付与

ユーザー・パスワードともにuser1で作成

コマンドイメージ
create user user1 identified by user1;
grant create session to user1;
grant resource to user1;
grant unlimited tablespace to user1;

4.tnsnames.oraファイルの作成

ORACLE_HOME\network\admin(実際の自身のローカルのパスはC:\WINDOWS.X64_213000_db_home\network\admin)にtnsnames.oraを作成
ファイルの中身は以下

tnsnames.ora
ORCLPDB=
        (DESCRIPTION =
                (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
                        (CONNECT_DATA =
                                (SERVICE_NAME = oraclpdb)
                )
        )

自分で試したこと

調べている限り、tnsnames.oraのファイルの中身に問題がある。tnsnames.oraのファイルが参照できていないのではと考えております。
参考)
https://cosol.jp/knowledge/knowledge_post/ot0015_ora12154/

確認内容①

tnsnames.oraSERVICE_NAMEの内容に問題ないか確認

PS C:\Users\takas> lsnrctl status

LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 12-5月 -2024 12:17:46

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ebina-winPC)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for 64-bit Windows: Version 21.0.0.0.0 - Production
開始日                    11-5月 -2024 12:45:17
稼働時間                  0 日 23 時間 32 分 33 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      C:\Oracle\homes\OraDB21Home1\network\admin\listener.ora
ログ・ファイル            C:\Oracle\diag\tnslsnr\ebina-winPC\listener\alert\log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ebina-winPC)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ebina-winPC)(PORT=5500))(Security=(my_wallet_directory=C:\ORACLE\admin\orcl\xdb_wallet))(Presentation=HTTP)(Session=RAW))
サービスのサマリー...
サービス"412255a3d8674e3fa1f92d3a8aed0150"には、1件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"CLRExtProc"には、1件のインスタンスがあります。
  インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"bc74b627f47a416ab26784e660b5c7b2"には、2件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
  インスタンス"testdb"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"f035e91ee3f14a26af87d0cc33d29e57"には、1件のインスタンスがあります。
  インスタンス"testdb"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"orcl"には、1件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"orclXDB"には、1件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"orclpdb"には、2件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
  インスタンス"testdb"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"testdb"には、1件のインスタンスがあります。
  インスタンス"testdb"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"testdbXDB"には、1件のインスタンスがあります。
  インスタンス"testdb"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

tnsnames.oraSERVICE_NAMEに指定しているorclpdblsnrctl statusコマンドの応答にも出力されているので問題ないように見えます。

確認内容②

環境変数(特にORACLE_HOMEに問題がないか)の確認

PS C:\Users\takas> Get-ChildItem env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\takas\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files
CommonProgramW6432             C:\Program Files\Common Files
COMPUTERNAME                   EBINA-WINPC
ComSpec                        C:\Windows\system32\cmd.exe
DriverData                     C:\Windows\System32\Drivers\DriverData
HOMEDRIVE                      C:
HOMEPATH                       \Users\takas
LOCALAPPDATA                   C:\Users\takas\AppData\Local
LOGONSERVER                    \\EBINA-WINPC
NUMBER_OF_PROCESSORS           16
OneDrive                       C:\Users\takas\OneDrive
OneDriveConsumer               C:\Users\takas\OneDrive
ORACLE_HOME                    C:\WINDOWS.X64_213000_db_home
OS                             Windows_NT
Path                           C:\WINDOWS.X64_213000_db_home\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\...
PATHEXT                        .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PGDATA                         C:\Program Files\PostgreSQL\16\data
POSTGRESQL_PATH                C:\Program Files\PostgreSQL\16\bin
PROCESSOR_ARCHITECTURE         AMD64
PROCESSOR_IDENTIFIER           Intel64 Family 6 Model 186 Stepping 2, GenuineIntel
PROCESSOR_LEVEL                6
PROCESSOR_REVISION             ba02
ProgramData                    C:\ProgramData
ProgramFiles                   C:\Program Files
ProgramFiles(x86)              C:\Program Files (x86)
ProgramW6432                   C:\Program Files
PSModulePath                   C:\Users\takas\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell...
PUBLIC                         C:\Users\Public
SESSIONNAME                    Console
SystemDrive                    C:
SystemRoot                     C:\Windows
TEMP                           C:\Users\takas\AppData\Local\Temp
TMP                            C:\Users\takas\AppData\Local\Temp
USERDOMAIN                     EBINA-WINPC
USERDOMAIN_ROAMINGPROFILE      EBINA-WINPC
USERNAME                       takas
USERPROFILE                    C:\Users\takas
windir                         C:\Windows
WSLENV                         WT_SESSION:WT_PROFILE_ID:
WT_PROFILE_ID                  {61c54bbd-c2c6-5271-96e7-009a87ff44bf}
WT_SESSION                     cd83ba5d-f195-4636-8e0c-95cc344ff0f2
ZES_ENABLE_SYSMAN              1

ORACLE_HOMEの内容はC:\WINDOWS.X64_213000_db_homeのため問題ないように見えます。

確認内容③

上記記事を参考にORACLE_HOME\network\admin(実際の自身のローカルのパスはC:\WINDOWS.X64_213000_db_home\network\admin)にsqlnet.oraを新規作成

sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES)

上記ファイルを作成して、再度接続をするも事象は改善されませんでした。

質問投稿後追記

確認内容④

あまりよくわかっていないのですが、
C:\Oracle\homes\OraDB21Home1\network\admin配下にも
・tnsnames.ora
・sqlnet.ora
のファイルが存在したため、そちらのファイルに対して修正を行いました。

tnsnames.ora
 tnsnames.ora Network Configuration File: C:\Oracle\homes\OraDB21Home1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_TESTDB =
  (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))


TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = testdb)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
+ ORCLPDB =
+  (DESCRIPTION =
+   (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))
+   (CONNECT_DATA =
+     (SERVER = DEDICATED)
+     (SERVICE_NAME = orclpdb) 
+    )
+  )
sqlnet.ora
# sqlnet.ora Network Configuration File: C:\Oracle\homes\OraDB21Home1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.
-SQLNET.AUTHENTICATION_SERVICES= (NTS)
+#SQLNET.AUTHENTICATION_SERVICES= (NTS)
-NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
+#NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

+NAMES.DIRECTORY_PATH= (TNSNAMES)

また、ORACLE_HOME\network\admin(実際の自身のローカルのパスはC:\WINDOWS.X64_213000_db_home\network\admin)のtnsnames.oraの中身の一部修正しました。

tnsnames.ora
ORCLPDB=
        (DESCRIPTION =
-                (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
+                (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521))
                        (CONNECT_DATA =
+                               (SERVER = DEDICATED)
                                (SERVICE_NAME = oraclpdb)
                )
        )

上記の状態でtnsping ORCLPDBを実行すると接続は成功しました。

PS C:\Users\takas> tnsping ORCLPDB

TNS Ping Utility for 64-bit Windows: Version 21.0.0.0.0 - Production on 12-5月 -2024 18:48:49

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

パラメータ・ファイルを使用しました:
C:\Oracle\homes\OraDB21Home1\network\admin\sqlnet.ora


エイリアスを解決するためにTNSNAMESアダプタを使用しました。
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb)))に接続の試行中
OK (20ミリ秒)

一方で、sqlplus user1/user1@ORCLPDBで接続を試みると、接続できるケースもあれば接続できないケースがあり、成功・失敗の違いが全く分からないです・・。
接続できるケースが発生しただけ進展はしていると思いますが、、、。

PS C:\Users\takas> tnsping ORCLPDB

TNS Ping Utility for 64-bit Windows: Version 21.0.0.0.0 - Production on 12-5月 -2024 18:47:34

Copyright (c) 1997, 2021, Oracle.  All rights reserved.

パラメータ・ファイルを使用しました:
C:\Oracle\homes\OraDB21Home1\network\admin\sqlnet.ora


エイリアスを解決するためにTNSNAMESアダプタを使用しました。
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ebina-winPC)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb)))に接続の試行中
OK (20ミリ秒)
PS C:\Users\takas> sqlplus user1/user1@ORCLPDB

SQL*Plus: Release 21.0.0.0.0 - Production on 日 5月 12 18:47:37 2024
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。


ユーザー名を入力してください:
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。


ユーザー名を入力してください:
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。


SP2-0157: 3回試行しましたがOracleに接続できませんでした。SQL*Plusを終了します。
PS C:\Users\takas>
PS C:\Users\takas>
PS C:\Users\takas> sqlplus user1/user1@ORCLPDB

SQL*Plus: Release 21.0.0.0.0 - Production on 日 5月 12 18:47:47 2024
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

最終正常ログイン時間: 日 5月  12 2024 18:47:23 +09:00


Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> exit
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0との接続が切断されました。
0

No Answers yet.

Your answer might help someone💌