次のSQLコマンドを使用して、Oracle 18c[〜#〜] xe [〜#〜]でPDBを作成しました
create pluggable database virlux
admin user test1admin identified by test1pwd
file_name_convert = ('/pdbseed/', '/test1/')
;
今、私は次のコマンドを使用して新しいユーザーIDを使用してこのPDBに直接接続しようとします
sqlplus test1admin/test1pwd@virlux
およびOracleはエラーORA-12541で応答します:リスナーがありません
次に、次のコマンドでSYSTEM
useridを試してみました
sqlplus SYSTEM/syspwd@virlux
同じエラー番号を取得しました!
何が起こるのですか ?
Oracle_HOMEおよびSET_ADMIN変数を正しく設定しました。
tnsnames.ora
フォルダにある%TNS_ADMIN%
ファイルには、次の行が含まれています
# tnsnames.ora Network Configuration File: D:\Oracle\dbhomeXE\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
VIRLUX =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = VIRLUX)
)
)
XEPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
このファイルにVIRLUXを追加しました。
また、Net Use
コマンドを使用して、すべてのOracleサービスを停止および開始しました。
Listener.oraファイルには次の行が含まれています
# listener.ora Network Configuration File: D:\Oracle\dbhomeXE\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DEFAULT_SERVICE_LISTENER = XE
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(Oracle_HOME = D:\Oracle\dbhomeXE)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\dbhomeXE\bin\oraclr18.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
LSNRCTL STATUSコマンドを開始すると、
ようやく問題の解決策が見つかりました。同じケースで他のユーザーを助けるために説明します。
次のsqlplusコマンドを使用してOracleデータベースのXEインスタンスに接続しても問題ありません。
sqlplus SYSTEM/password@XE
最初の問題は、PDBが常に開いているわけではなく、DBサービスを停止および開始するたびに、PDBを再起動する必要があることです。
これを回避するために、次のSQLコマンドを実行しました
alter PLUGGABLE DATABASE ALL OPEN;
alter PLUGGABLE DATABASE ALL SAVE STATE;
asktom.Oracle.com で説明されています
これで、Oracleデータベースサービスを停止して再起動するたびに、VIRLUX
PDBは正しく開始されますが、sqlplus
コマンドを実行すると、Oracleエラーが返され、ORA-01017になります。
sqlplus test1admin/test1pwd@virlux
SQL*Plus: Release 18.0.0.0.0 - Production on Mar. Janv. 14 08:41:41 2020
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
ERROR: ORA-01017: invalid username/password; Logon denied
しかし、次のコマンドを入力すると、Oracle PDBに接続されます。
sqlplus test1admin/test1pwd@localhost/virlux
古い有名なsqlplus接続コマンドはPDBでは機能せず、唯一の解決策は、TNSNAMES.ORAファイルで定義されているホスト名をPDB名の前に付けることです。
驚いたことに、ユーザー/パスワードが無効であるというエラーメッセージを返すコマンドは、パスワードを変更せずに修正されます。
このソリューションは、Windows Home 10上の私のPCでうまく機能します。
リスナーは、アドレスとしてlocalhost
を使用するTNSエントリに接続しようとしている間、192.168.0.14
をリッスンします。これは、デフォルト設定のLinuxでは機能しますが、そのようなWindowsでは機能しないため、動作は予想されます。
C:\Windows\system32>lsnrctl status
LSNRCTL for 64-bit Windows: Version 18.0.0.0.0 - Production on 10-JAN-2020 22:57
:53
Copyright (c) 1991, 2018, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.241)(PORT=1521
)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 18.0.0.0.0 - Produ
ction
Start Date 10-JAN-2020 22:54:03
Uptime 0 days 0 hr. 3 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File C:\app\Oracle\product\18.0.0\dbhomeXE\network\admin\li
stener.ora
Listener Log File C:\app\Oracle\product\18.0.0\diag\tnslsnr\W7VPN1\liste
ner\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=192.168.1.241)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
C:\Windows\system32>tnsping xe
TNS Ping Utility for 64-bit Windows: Version 18.0.0.0.0 - Production on 10-JAN-2
020 22:57:56
Copyright (c) 1997, 2018, Oracle. All rights reserved.
Used parameter files:
C:\app\Oracle\product\18.0.0\dbhomeXE\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(Host = localhos
t)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
TNS-12541: TNS:no listener
C:\Windows\system32>
リスナーを変更してlocalhostでリッスンするか、tnsnames.oraエントリ(LISTENER_XE、virlux)を変更して192.168.0.14
を使用します。