Oracle
Oracle 18c 中的 v$database、SID、ServiceName、istance 是什麼?
我在公司筆記型電腦上的 Windows 10 上設置了 Oracle 18c (18.4)(localhost 應該與我公司的域名相同)。在安裝時使用密碼創建使用者
SYSTEM
後,我嘗試使用以下設置連接到數據庫:hotsname:localhost
埠:1521
數據庫:XEPDB1(與 ServiceName 連接)
訪問這個,這裡是我想要理解的以下查詢(通過接收這些結果詳細描述了向 Oracle 請求的內容):
許多輸出與我的預期不同(例如
v$database
使用 global_name)。以下是lsnrctl 狀態(我的公司域被隱藏):
PS C:\WINDOWS\system32> lsnrctl 狀態 適用於 64 位 Windows 的 LSNRCTL:版本 18.0.0.0.0 - 2020 年 3 月 28 日 08:43:00 生產 版權所有 (c) 1991、2018,甲骨文。版權所有。 連接 a (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) 監聽器的狀態 ------------------------ 別名監聽器 用於 64 位 Windows 的版本 TNSLSNR:版本 18.0.0.0.0 - 生產 開始日期 23-MAR-2020 23:43:32 活動時間 4 天 8 小時 59 分鐘。31 秒。 跟踪級別 Sicurezza ON:本地作業系統身份驗證 SNMP 關閉 XE 預設服務 參數文件 listenerC:\app\sterragn\product\18.0.0\dbhomeXE\network\admin\listener.ora 文件 di 日誌偵聽器 C:\app\sterragn\product\18.0.0\diag\tnslsnr\MIL-GZSL2H2\listener\alert\log.xml 監聽端點匯總表... (描述=(地址=(協議=tcp)(主機=127.0.0.1)(埠=1521))) (描述=(地址=(協議=ipc)(管道名稱=\\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))(Security=(my_wallet_directory=C:\APP\STERRAGN\PRODUCT\18.0.0\admin\XE\xdb_wallet)) (展示=HTTP)(會話=RAW)) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PCX-LAPTOP.domain.topLevelDomain.subDomain)(PORT=5520))(Presentation=HTTP)(Session=RAW)) 服務匯總表... “CLRExtProc”服務有 1 個實例。 狀態為 UNKNOWN 的實例“CLRExtProc”具有此服務的 1 個處理程序... “XE”服務有 1 個實例。 實例“xe”,狀態為 READY,有 1 個用於此服務的處理程序... “XEXDB”服務有 1 個實例。 實例“xe”,狀態為 READY,有 1 個用於此服務的處理程序... 服務“bc0cc7179d094aa9b1c4b1ffb3e667da”有 1 個實例。 實例“xe”,狀態為 READY,有 1 個用於此服務的處理程序... “xepdb1”服務有 1 個實例。 實例“xe”,狀態為 READY,有 1 個用於此服務的處理程序... 命令已執行
輸入:
SELECT NAME FROM v$database;
輸出:
NAME ----- XE
輸入:
SELECT * FROM v$instance;
輸出:
INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION VERSION_LEGACY VERSION_FULL STARTUP_TIME STATUS PARALLEL THREAD# ARCHIVER LOG_SWITCH_WAIT LOGINS SHUTDOWN_PENDING DATABASE_STATUS INSTANCE_ROLE ACTIVE_STATE BLOCKED CON_ID INSTANCE_MODE EDITION FAMILY DATABASE_TYPE ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 xe PCX-LAPTOP 18.0.0.0.0 18.0.0.0.0 18.4.0.0.0 2020-03-23 16:15:57 OPEN NO 1 STOPPED [NULL] ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR XE [NULL] SINGLE
輸入:
select sys_context('userenv','instance_name') from dual;
輸出:
SYS_CONTEXT('USERENV','INSTANCE_NAME') --------------------------------------- xe
輸入:
select sys_context('userenv','db_name') from dual;
輸出:
SYS_CONTEXT('USERENV','DB_NAME') --------------------------------- XEPDB1
輸入:
select ora_database_name from dual;
輸出:
ORA_DATABASE_NAME ------------------ XEPDB1
輸入:
select * from global_name;
輸出:
GLOBAL_NAME ------------ XEPDB1
在 Oracle 術語中:
- 數據庫是一組物理文件和 V $ DATABASE records some of this information: the database physical name is V $ DATABASE.NAME
- 數據庫實例是一組正在執行的程序和相關記憶體:數據庫實例由實例名稱(SID 或 ORACLE_SID 環境變數)標識,預設情況下與數據庫名稱相同(但可以不同,您可以嘗試通過更改實例參數 instance_name 來更改它)。
如果數據庫是非容器數據庫或具有可插入數據庫的容器數據庫,則這是有效的頂級資訊。然而,容器數據庫是一個重大變化,它解釋了為什麼根據您連接的可插拔數據庫
sys_context('userenv','db_name')
返回不同的東西,即目前可插拔數據庫的名稱。對於每個可插入數據庫,預設情況下都有一個與可插入數據庫名稱同名的服務名稱。有關更多資訊,您應該真正閱讀相關的 Oracle 數據庫概念指南部分:
- https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/introduction-to-oracle-database.html#GUID-8F2EEEC8-0372-4419-88FF-7D77A9C0FCAD
- https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/introduction-to-oracle-database.html#GUID-AB84D6C9-4BBE-4D36-992F-2BB85739329F
另請注意, global_name 僅用於分佈式數據庫。