Oracle

Oracle 18c 中的 v$database、SID、ServiceName、istance 是什麼?

  • April 3, 2020

我在公司筆記型電腦上的 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 術語中:

  1. 數據庫是一組物理文件和 V $ DATABASE records some of this information: the database physical name is V $ DATABASE.NAME
  2. 數據庫實例是一組正在執行的程序和相關記憶體:數據庫實例由實例名稱(SID 或 ORACLE_SID 環境變數)標識,預設情況下與數據庫名稱相同(但可以不同,您可以嘗試通過更改實例參數 instance_name 來更改它)。

如果數據庫是非容器數據庫或具有可插入數據庫的容器數據庫,則這是有效的頂級資訊。然而,容器數據庫是一個重大變化,它解釋了為什麼根據您連接的可插拔數據庫sys_context('userenv','db_name')返回不同的東西,即目前可插拔數據庫的名稱。對於每個可插入數據庫,預設情況下都有一個與可插入數據庫名稱同名的服務名稱。

有關更多資訊,您應該真正閱讀相關的 Oracle 數據庫概念指南部分:

另請注意, global_name 僅用於分佈式數據庫。

引用自:https://dba.stackexchange.com/questions/262840