Oracle 12C引入了CDB與PDB的新特性,在ORACLE 12C數(shù)據(jù)庫(kù)引入的多租用戶環(huán)境(Multitenant Environment)中,允許一個(gè)數(shù)據(jù)庫(kù)容器(CDB)承載多個(gè)可插拔數(shù)據(jù)庫(kù)(PDB)。CDB全稱為Container Database,中文翻譯為數(shù)據(jù)庫(kù)容器,PDB全稱為Pluggable Database,即可插拔數(shù)據(jù)庫(kù)。在ORACLE 12C之前,實(shí)例與數(shù)據(jù)庫(kù)是一對(duì)一或多對(duì)一關(guān)系(RAC):即一個(gè)實(shí)例只能與一個(gè)數(shù)據(jù)庫(kù)相關(guān)聯(lián),數(shù)據(jù)庫(kù)可以被多個(gè)實(shí)例所加載。而實(shí)例與數(shù)據(jù)庫(kù)不可能是一對(duì)多的關(guān)系。當(dāng)進(jìn)入ORACLE 12C后,實(shí)例與數(shù)據(jù)庫(kù)可以是一對(duì)多的關(guān)系。下面是官方文檔關(guān)于CDB與PDB的關(guān)系圖。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、囊謙ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的囊謙網(wǎng)站制作公司
其實(shí)大家如果對(duì)SQL SERVER比較熟悉的話,這種CDB與PDB是不是感覺(jué)和SQL SERVER的單實(shí)例多數(shù)據(jù)庫(kù)架構(gòu)是一回事呢。像PDB$SEED可以看成是master、msdb等系統(tǒng)數(shù)據(jù)庫(kù),PDBS可以看成用戶創(chuàng)建的數(shù)據(jù)庫(kù)。而可插拔的概念與SQL SERVER中的用戶數(shù)據(jù)庫(kù)的分離、附加其實(shí)就是那么一回事。看來(lái)ORACLE也“抄襲”了一把SQL SERVER的概念,只是改頭換面的包裝了一番。
1、CDB組件(Components of a CDB)
一個(gè)CDB數(shù)據(jù)庫(kù)容器包含了下面一些組件:
ROOT組件
ROOT又叫CDB$ROOT, 存儲(chǔ)著ORACLE提供的元數(shù)據(jù)和Common User,元數(shù)據(jù)的一個(gè)例子是ORACLE提供的PL/SQL包的源代碼,Common User 是指在每個(gè)容器中都存在的用戶。
SEED組件
Seed又叫PDB$SEED,這個(gè)是你創(chuàng)建PDBS數(shù)據(jù)庫(kù)的模板,你不能在Seed中添加或修改一個(gè)對(duì)象。一個(gè)CDB中有且只能有一個(gè)Seed. 這個(gè)感念,個(gè)人感覺(jué)非常類似SQL SERVER中的model數(shù)據(jù)庫(kù)。
PDBS
CDB中可以有一個(gè)或多個(gè)PDBS,PDBS向后兼容,可以像以前在數(shù)據(jù)庫(kù)中那樣操作PDBS,這里指大多數(shù)常規(guī)操作。
這些組件中的每一個(gè)都可以被稱為一個(gè)容器。因此,ROOT(根)是一個(gè)容器,Seed(種子)是一個(gè)容器,每個(gè)PDB是一個(gè)容器。每個(gè)容器在CDB中都有一個(gè)獨(dú)一無(wú)二的的ID和名稱。
注意:
①:一個(gè)CDB可以包含253個(gè)PDB(去掉一個(gè)是seed還能創(chuàng)建252個(gè)PDB)。
②:Root,seed以及每一個(gè)PDB的數(shù)據(jù)文件是獨(dú)立的。
③:一個(gè)單實(shí)例的CDB有一個(gè)redo log;RAC環(huán)境中每個(gè)實(shí)例有一個(gè)redo log。
④:只有一組后臺(tái)進(jìn)程,它們被ROOT和所有PDB共享。
⑤:Root的全局?jǐn)?shù)據(jù)庫(kù)名就是CDB的全局?jǐn)?shù)據(jù)庫(kù)名;PDB的全局?jǐn)?shù)據(jù)庫(kù)名是由PDB name和DB_DOMAIN參數(shù)共同定義的。
⑥:一個(gè)CDB使用一個(gè)SPFILE或者一個(gè)PFILE,其中為ROOT設(shè)置的參數(shù)的值可以被PDB繼承。另外,也可以使用ALTER SYSTEM語(yǔ)句來(lái)設(shè)置PDB的參數(shù)。對(duì)參數(shù)文件執(zhí)行 操作時(shí),必須使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP來(lái)連接數(shù)據(jù)庫(kù)。要?jiǎng)?chuàng)建CDB,必須要將初始化參數(shù)ENABLE_PLUGGABLE_DATABASE的 值設(shè)置為TRUE。
⑦:所有PDB的字符集都使用CDB的字符集。
可以設(shè)置所有PDB的時(shí)區(qū)與CDB相同,也可以單獨(dú)為PDB設(shè)置時(shí)區(qū)。
塊大小被應(yīng)用于整個(gè)CDB。
一個(gè)CDB也僅有一個(gè)控制文件(可以多路復(fù)用)。
⑧:Root與每一個(gè)PDB都有自己的SYSAUX表空間和SYSTEM表空間。可以為root和每一個(gè)PDB設(shè)置默認(rèn)表空間。而默認(rèn)的臨時(shí)表空間對(duì)于整個(gè)CDB只有一個(gè),但是可以為 每個(gè)PDB創(chuàng)建臨時(shí)表空間。
⑨:撤銷表空間對(duì)于CDB是唯一的。在CDB中,初始化參數(shù)UNDO_MANAGEMENT必須被設(shè)置為AUTO。當(dāng)前容器為PDB時(shí),無(wú)法通過(guò)數(shù)據(jù)字典視圖查看撤銷表空間,只能通 過(guò)動(dòng)態(tài)性能視圖。
2、PDB簡(jiǎn)介
2.1、PDB新特點(diǎn)的優(yōu)勢(shì)
》可以把多個(gè)PDB集成進(jìn)一個(gè)平臺(tái)。
》可以快速提供一個(gè)新的PDB或一個(gè)已有PDB的克隆。
》通過(guò)拔插技術(shù),可以快速把存在的數(shù)據(jù)庫(kù)重新部署到一個(gè)新平臺(tái)上。
》多個(gè)PDB數(shù)據(jù)庫(kù)補(bǔ)丁或升級(jí)一次完成。
》通過(guò)把單個(gè)PDB拔插到較高版本的不同CDB,可以補(bǔ)丁或升級(jí)一個(gè)PDB。
》從同一個(gè)CDB中眾多PDB中分離出某個(gè)PDB的內(nèi)容。
》分離這些PDB應(yīng)用管理員的責(zé)任。
2.2、PDB新特點(diǎn)的功能
》在一個(gè)CDB中,你可以擁有很多PDB。
》PDB和12.1之前版本的普通數(shù)據(jù)庫(kù)是向后兼容的。
》PDB對(duì)應(yīng)用是透明的——你不需要改變客戶端代碼或數(shù)據(jù)庫(kù)對(duì)象。
》RAC中每個(gè)實(shí)例作為一個(gè)整體打開(kāi)CDB(因此CDB和其中的PDB數(shù)據(jù)庫(kù)版本都是相同的)。
》會(huì)話僅僅看到它自己連接的那個(gè)PDB。
》你可以從一個(gè)CDB拔出一個(gè)PDB,然后插入另一個(gè)CDB。
》你可以在同一個(gè)CDB或不同CDB間克隆PDB。
》資源管理器隨著PDB的功能得以擴(kuò)展。
》通過(guò)SQL語(yǔ)句實(shí)現(xiàn)了實(shí)體PDB的操作(創(chuàng)建,拔出,插入,克隆,清除,設(shè)置打開(kāi)模式)。
》當(dāng)連接到所謂的“根”(root)時(shí),CDB管理員來(lái)執(zhí)行這些操作。
》所有的PDB能被一次備份,但可以分別單獨(dú)恢復(fù)。
2.3、PDB的詳解
》每個(gè)PDB有自己的私有數(shù)據(jù)字典用于用戶創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象;另一方面,CDB作為一個(gè)整體也包含Oracle提供系統(tǒng)的數(shù)據(jù)字典,其中,每個(gè)數(shù)據(jù)字典定義自己的命名空間。換句話說(shuō),有全局?jǐn)?shù)據(jù)字典(CDB級(jí))和本地?cái)?shù)據(jù)字典(PDB級(jí))。
》有新的分開(kāi)的數(shù)據(jù)字典架構(gòu),該架構(gòu)允許一個(gè)PDB被快速?gòu)囊粋€(gè)CDB拔出并插入一個(gè)不同的CDB。
》每個(gè)PDB只能看到oracle提供系統(tǒng)的只讀定義。
》有全局?jǐn)?shù)據(jù)庫(kù)參數(shù),也有本地?cái)?shù)據(jù)庫(kù)參數(shù)。PDB參數(shù)僅僅屬于特定的PDB,并且拔出后,PDB參數(shù)也將保持不變。
》數(shù)據(jù)庫(kù)用戶可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用戶一開(kāi)始就在兩級(jí)DB中存在。如果你在CDB中創(chuàng)建了一個(gè)新用戶,那么你在PDB中也能看到這個(gè)用戶。在PDB中創(chuàng)建的用戶只能在該P(yáng)DB中使用。
》臨時(shí)表空間可以是全局或本地的。
》Redo日志和Undo表空間都是全局的(CDB級(jí))。
》Data Guard在CDB級(jí)作為一個(gè)整體發(fā)揮作用;RMAN調(diào)度的備份也作為一個(gè)整體在CDB級(jí)完成;任何時(shí)候,你可以只備份一個(gè)PDB。
》應(yīng)用連接PDB時(shí),不需做代碼修改;系統(tǒng)管理員可以連接CDB;連接串中的服務(wù)名確定目標(biāo)PDB。
》PDB允許更加清晰的聲明定義一個(gè)應(yīng)用;一個(gè)PDB對(duì)同一個(gè)CDB里的其他PDB一無(wú)所知;每個(gè)PDB是個(gè)密閉的容器。這保證了新層面DB的獨(dú)立和安全。
3、日常操作:
3.1、查看當(dāng)前的容器
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
------或:
SQL> select Sys_Context('Userenv', 'Con_Name') "current Container" from dual;
current Container
--------------------------------------------------------------------------------
CDB$ROOT
3.2、查看CDB中的PDB信息:
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
CON_ID DBID GUID NAME OPEN_MODE
---------- ---------- -------------------------------- ------------------------------ ----------
2 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY
3 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE ---feige就是一個(gè)PDB
3.3、創(chuàng)建一個(gè)新的PDB:
SQL> create pluggable database test_pdb admin user admin identified by admin;
SQL> alter pluggable database test_pdb open; ----將test_pdb 打開(kāi)
SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs; ---查看pdb的狀態(tài)
CON_ID DBID CON_UID GUID NAME OPEN_MODE CREATE_SCN TOTAL_SIZE BLOCK_SIZE
---------- ---------- ---------- -------------------------------- ------------------------------ ---------- ---------- ---------- ----------
2 427872663 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY 1594401 838860800 8192
3 1891424478 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE 1753608 865075200 8192
4 2998508999 2998508999 53F376E8715628BCE055000000000001 TEST_PDB READ WRITE 1757024 859832320 8192
(“admin user”子句是必須的,在擴(kuò)展格式,給新用戶賦予了權(quán)限和角色,該用戶僅在admin內(nèi)可以創(chuàng)建新會(huì)話。在創(chuàng)建完可插拔數(shù)據(jù)庫(kù)后,新的PDB處于MOUNTED模式)
3.4、克隆一個(gè)pdb
SQL> create pluggable database test2_pdb from test_pdb; ---test_pdb必須是打開(kāi)的,才可以被打開(kāi)
SQL> alter pluggable database test2_pdb open; ---然后打開(kāi)這個(gè)pdb
3.5、切換到PDB,或切換到CDB
SQL> alter session set container=test_pdb; ---切換到pdb中
SQL> alter session set container=cdb$root; ---切換到CDB中
3.6、關(guān)閉一個(gè)pdb和關(guān)閉所有的pdb
SQL> alter pluggable database test_pdb close; ---關(guān)閉test_pdb這個(gè)pdb數(shù)據(jù)庫(kù)
SQL> alter pluggable database all close; ---關(guān)閉數(shù)據(jù)庫(kù)中所有的pdb
3.7、插拔一個(gè)pdb數(shù)據(jù)庫(kù)
SQL> alter pluggable database feige close; ---先將feige這個(gè)pdb關(guān)閉
SQL> alter pluggable database feige unplug into '/opt/oracle/oradata/feige.xml';
(feige.xml:文件確定數(shù)據(jù)文件的名字和全路徑等信息。這些信息在插入操作時(shí)會(huì)用到。注意:PDB還是其從中拔出的CDB的一部分,只是現(xiàn)在狀態(tài)變?yōu)榱税纬觯║NPLUGGED)而已。)
SQL> drop pluggable database feige keep datafiles; ----在當(dāng)前的容器中刪除這個(gè)pdb
----如果在這個(gè)服務(wù)器上,有兩個(gè)容器,則進(jìn)入另一個(gè)容器,插入這個(gè)pdb
exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/opt/oracle/oradata/feige.xml'); --查看pdb和這個(gè)容器是否兼容,如果報(bào)錯(cuò)說(shuō)明不兼容
----開(kāi)始插入pdb,(using關(guān)鍵字后必須跟上PDB描述的絕對(duì)路徑,即,先前拔出操作時(shí)產(chǎn)生的.XML文件)
create pluggable database feige using '/opt/oracle/oradata/feige.xml' move file_name_convert = ('/cdb1/', '/cdb2/');
----最后打開(kāi)這個(gè)pdb
alter pluggable database feige open;
3.8、連接pdb數(shù)據(jù)庫(kù):
連接pdb其實(shí)和連接正常的單實(shí)例數(shù)據(jù)庫(kù)是一樣的,連接注冊(cè)的服務(wù)名即可,可以通過(guò)下面的方式:
①:使用監(jiān)聽(tīng)注冊(cè)的服務(wù)名連接,如下:
[oracle@localhost ~]$ lsnrctl status ---通過(guò)這個(gè)命令查找注冊(cè)的服務(wù)名
[oracle@localhost ~]$ sqlplus system/oracle@192.168.2.100:1521/feige ---這樣連接到PDB數(shù)據(jù)庫(kù)
②:通過(guò)tnsnames配置文件連接,如下:
feige =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = feige)
)
)
[oracle@localhost admin]$ sqlplus system/oracle@feige ----使用這種方式連接
---至此,cdb與pdb就先總結(jié)到這里,一些基礎(chǔ)的知識(shí)和操作都有介紹