【Oracle】データベース接続時に「ORA-12154: TNS: 指定された接続識別子を解決できませんでした」が発生
Q&A
解決したいこと
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
を作成
ファイルの中身は以下
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.ora
のSERVICE_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.ora
のSERVICE_NAME
に指定しているorclpdb
がlsnrctl 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
を新規作成
NAMES.DIRECTORY_PATH= (TNSNAMES)
上記ファイルを作成して、再度接続をするも事象は改善されませんでした。
質問投稿後追記
確認内容④
あまりよくわかっていないのですが、
C:\Oracle\homes\OraDB21Home1\network\admin
配下にも
・tnsnames.ora
・sqlnet.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 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
の中身の一部修正しました。
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との接続が切断されました。