先來看看這個問題出現的前提
Oracle 12c 開始有了CDB和PDB
CDB與PDB是Oracle 12C引入的新特性,在ORACLE 12C數據庫引入的多租用戶環境(Multitenant Environment)中,允許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。
CDB全稱為ContainerDatabase,中文翻譯為數據庫容器,PDB全稱為Pluggable Database,即可插拔數據庫。
在ORACLE 12C之前,實例與數據庫是一對一或多對一關系(RAC):即一個實例只能與一個數據庫相關聯,數據庫可以被多個實例所加載。
而實例與數據庫不可能是一對多的關系。當進入ORACLE 12C后,實例與數據庫可以是一對多的關系。
12c中,oracle 將CDB看成一個容器,用來存放數據庫。
- 在CDB中可以有多個PDB,其中存在一個root根容器(PDB$ROOT)、一個種子容器(PDB$SEED)和多個PDBS。
- 所有的PDB共用一個硬件系統資源、sga和pga、redo、臨時段、控制文件、參數文件、還原段(還可對每個PDB單獨指定)。
PDB$ROOT:根容器用來做所有容器的跟,用來對每個PDB進行統一管理
- sqlplus / as sysdba連接進來默認是連接的根容器,需要切換到其他的PDB容器才可以對單獨的PDB操作。
- 其中有 system數據文件、sysaux數據文件、(undo數據文件、temp數據文件、redo、控制文件)。
- 一般不存放生產數據文件
PDB$SEED:種子容器作為插入PDB的模板而存在
- 每個CDB都有一個種子容器,且不可對其中對象進行修改。
- 其中有 system數據文件、sysaux數據文件、其他數據文件。
PDB:新插入容器,該容器用來存放數據庫
- 其中有 system數據文件、sysaux數據文件、其他數據文件。
- 12c中可以插入多個容器進行統一管理,來減少DBA的工作量。
- 其中的數據庫可以插入或拔出。
用戶:12c中PDB$ROOT中的普通目錄可以通過權限分配來訪問一個或多個指定的PDB容器,最大權限用戶是sysdba
- 其中PDB也可單獨創建普通用戶來管理該容器的數據庫。
- PDB資源管理:12c中將多個數據庫運行在一個硬件資源上,CDB性能上得到優化。
- 在CDB中為每個PDB確定使用CPU最低份額,CDB會按照一個PDB份額/分配的總份額數*100%,來保證PDB最低份額數。
管理容器
使用sqlplus登陸(用plsql登陸無法使用show指令)
查詢容器是否CDB
select name,cdb,open_mode,con_id from v$database;
查看當前容器
show con_name;
查看已經創建的pdb
show pdbs;
在使用plsql連接Oracle 19c並創建新用戶的時候報錯, ORA-65096 公用用戶名或角色名無效
官方地址:https://docs.oracle.com/database/121/DBSEG/users.htm#GUID-4BF8A362-AD9B-4780-944E-CFB9B7D84B50
文檔里寫的很清楚,如果要創建公共用戶,需要加前綴c##