Oracle12c中,增加了可插接數據庫的概念,即PDB,允許一個數據庫容器(CDB)承載多個可插
拔數據庫(PDB)。CDB全稱為ContainerDatabase,中文翻譯為數據庫容器,PDB全稱為Plugga
bleDatabase,即可插拔數據庫。在ORACLE 12C之前,實例與數據庫是一對一或多對一關系
(RAC):即一個實例只能與一個數據庫相關聯,數據庫可以被多個實例所加載。而實例與數據庫
不可能是一對多的關系。當進入ORACLE 12C後,實例與數據庫可以是一對多的關系。下面是官方
文檔關於CDB與PDB的關系圖。
對於PDB確實給程序員帶來了不少好處,不過這也給管理者帶來了一些不同。首先,容器數據庫創建
新用戶並分配表空間時必須在沒有PDB的情況下進行或PDB與CDB有相同的表空間的時候進行,否則
會報錯。如果是在PDB與CDB有相同表空間的情況下給CDB用戶分配表空間,則會分配CDB的表空間
給用戶PDB的表空間並不受影響。而且,CDB用戶必須以‘C##’為開頭,否則創建不了,但是在Oracle Enterprise Manager下我看不見我
自己創建的角色,在sql-plus窗口下也看不到剛剛創建的用戶,登陸的時候只有以dba身份才能登得上去
,不知道是不是我自己電腦的問題還是。以下是創建’c##’開頭的用戶
創建用戶c##admin,並未該用戶賦予了dba權限,連接。這是在沒有PDB的情況下創建用戶
“C##ADMIN”並分配”USERS‘表空間。我們再次以system身份連接數據庫,然後在容器數
據庫(CDB)中創建表空間test,注意,這時插接式數據庫(PDB)中沒有test這個表空間,
然後在容器數據庫(CDB)創建新的用戶c##test並分配test表空間給它作為他的默認表空間
。由於在PDBORCL中並沒有表空間,所以這裡報錯了。如下圖所示:
----切換到PDB “PDBORCL”
SQL> alter sessionset container = pdborcl;
會話已更改。
SQL> createtablespace test --創建表空間test
2 datafile 'f:\oracledata\test.dbf'
3 size1m autoextend on;
表空間已創建。
--由於現在不論是在CDB好是在PDB中都有了表空間test了,所以創建用戶並分配表空
間成功了。
SQL> createuser c##test
2 identified by test
3 default tablespace test
4 temporary tablespace temp;
用戶已創建。
SQL>