Oracle 數據庫 18c 中“_oracle_script”=true 的影響
我剛剛安裝了 Oracle XE 18c(我是從 11g XE 遷移過來的)…執行安裝程序後,我看到了新功能;例如,Oracle 現在支持多租戶模型和稱為可插拔數據庫的概念……
我發現的第一個問題是創建一個新使用者……看起來為了支持可插拔數據庫的概念,使用者名必須符合一些命名規則前綴(即c##)……搜尋這個問題,我找到這個連結……他們建議使用舊語法(在non-CDB 上使用的那個)創建使用者,我們應該使用以下方法更改會話:
alter session set "_ORACLE_SCRIPT"=true;
但是,他們警告說,使用者不能在任何可插入數據庫中使用……
**所以,這是我的問題:**如果在送出命令後創建使用者,使用者是在 ROOT 容器(CDB$ROOT)中創建的嗎?此類使用者將是 Oracle 實例的本地使用者,可用於管理所有其他可插拔數據庫,包括 CDB(假設此類使用者具有所有必需的權限)?
謝謝!
免責聲明:我不是 DBA,我只是一名軟體開發人員,對數據庫有先進的知識……
在探勘了
"_ORACLE_SCRIPT"=true
命令並在數據庫中進行了一些測試之後,我得出了以下結論:
- 這
_ORACLE_SCRIPT"=true
是一個強大的命令。因為它是一個下劃線參數,所以它應該是私有的並且只用於Oracle ……但是,它似乎是應該使用的有效情況,例如,這個(但這些假設非常罕見)。 ..- 在我提出的案例中,當我發出命令時,我關閉了一些數據庫保護
_ORACLE_SCRIPT"=true
,允許繞過創建“commons”使用者所需的語法……使用者是在根容器(又名CDB$ROOT
)中創建的…… .我可以通過兩個查詢來驗證這一點:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') from dual;
SELECT * FROM ALL_USERS ORDER BY USERNAME;
第一個查詢顯示目前容器,第二個查詢顯示該容器中可用的使用者。
奇怪的部分來自查詢視圖“all_users”,它說我剛剛創建的使用者是“ORACLE_MAINTAINED”的普通使用者(不是)……可悲的是,這樣的使用者並不常見,因為你不能和他一起訪問其他可插拔數據庫(正如我提供的連結所說)並且它在其他可插拔數據庫中不存在……
所以,總結一下:使用者是在
CDB$ROOT
繞過 Oracle 語法規則中創建的,但是這樣的使用者只是這樣的容器的本地使用者……
C##
是的,將在 CDB 中創建以開頭的普通使用者。它們將在所有 PDB 中可用(假設它們具有正確的權限)。如果您需要在 PDB 中創建使用者,請確保連接到 PDB (
SID=XEPDB
) 而不是 CDB (SID=XE
)