如何在 Oracle 18c XE 上使用 PDB 使用者 ID 進行連接?
我使用以下 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: no listener
然後我嘗試
SYSTEM
使用以下命令使用使用者 IDsqlplus 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;
現在,每次我停止並重新啟動 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 上執行良好。
192.168.0.14
當您嘗試連接localhost
用作地址的 TNS 條目時,您的偵聽器會監聽。這將在具有預設設置的 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
.