您好,登錄后才能下訂單哦!
Oracle 中的12C新特性-容器數(shù)據(jù)庫(kù)
---12.1.0.2_GI_RAC_Create_CDB_Blog
三月份的時(shí)候杰哥跟我講有時(shí)間部署
Oracle
12C-容器數(shù)據(jù)庫(kù),參考公司的遷移文檔,做個(gè)測(cè)試。這個(gè)事一直拖,最近有空嘗試了一下,還是蠻不錯(cuò)的,就是非常的燒內(nèi)存。
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)系圖。
其實(shí)大家如果對(duì)SQL SERVER比較熟悉的話,這種CDB與PDB是不是感覺和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í)就是那么一回事。
一個(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è)人感覺非常類似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ú)一無二的的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ǔ)句來設(shè)置PDB的參數(shù)。對(duì)參數(shù)文件執(zhí)行 操作時(shí),必須使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP來連接數(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表空間??梢詾閞oot和每一個(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í),無法通過數(shù)據(jù)字典視圖查看撤銷表空間,只能通 過動(dòng)態(tài)性能視圖。
》可以把多個(gè)PDB集成進(jìn)一個(gè)平臺(tái)。
》可以快速提供一個(gè)新的PDB或一個(gè)已有PDB的克隆。
》通過拔插技術(shù),可以快速把存在的數(shù)據(jù)庫(kù)重新部署到一個(gè)新平臺(tái)上。
》多個(gè)PDB數(shù)據(jù)庫(kù)補(bǔ)丁或升級(jí)一次完成。
》通過把單個(gè)PDB拔插到較高版本的不同CDB,可以補(bǔ)丁或升級(jí)一個(gè)PDB。
》從同一個(gè)CDB中眾多PDB中分離出某個(gè)PDB的內(nèi)容。
》分離這些PDB應(yīng)用管理員的責(zé)任。
》在一個(gè)CDB中,你可以擁有很多PDB。
》PDB和12.1之前版本的普通數(shù)據(jù)庫(kù)是向后兼容的。
》PDB對(duì)應(yīng)用是透明的——你不需要改變客戶端代碼或數(shù)據(jù)庫(kù)對(duì)象。
》RAC中每個(gè)實(shí)例作為一個(gè)整體打開CDB(因此CDB和其中的PDB數(shù)據(jù)庫(kù)版本都是相同的)。
》會(huì)話僅僅看到它自己連接的那個(gè)PDB。
》你可以從一個(gè)CDB拔出一個(gè)PDB,然后插入另一個(gè)CDB。
》你可以在同一個(gè)CDB或不同CDB間克隆PDB。
》資源管理器隨著PDB的功能得以擴(kuò)展。
》通過SQL語(yǔ)句實(shí)現(xiàn)了實(shí)體PDB的操作(創(chuàng)建,拔出,插入,克隆,清除,設(shè)置打開模式)。
》當(dāng)連接到所謂的“根”(root)時(shí),CDB管理員來執(zhí)行這些操作。
》所有的PDB能被一次備份,但可以分別單獨(dú)恢復(fù)。
》每個(gè)PDB有自己的私有數(shù)據(jù)字典用于用戶創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象;另一方面,CDB作為一個(gè)整體也包含Oracle提供系統(tǒng)的數(shù)據(jù)字典,其中,每個(gè)數(shù)據(jù)字典定義自己的命名空間。換句話說,有全局?jǐn)?shù)據(jù)字典(CDB級(jí))和本地?cái)?shù)據(jù)字典(PDB級(jí))。
》有新的分開的數(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用戶一開始就在兩級(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一無所知;每個(gè)PDB是個(gè)密閉的容器。這保證了新層面DB的獨(dú)立和安全。
1. 查看數(shù)據(jù)庫(kù)是否為CDB
[root@vastdata11 ~]# su - oracle [oracle@vastdata11 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Sat Jun 1 21:42:21 2019 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> select name,cdb,open_mode,con_id from v$database; NAME CDB OPEN_MODE CON_ID ------------------ ------ ---------------------------------------- ---------- CDB YES READ WRITE 0
SQL> show con_name; CON_NAME ------------------------------ CDB$ROOT SQL> select Sys_Context('Userenv', 'Con_Name') "current Container" from dual; current Container -------------------------------------------------------------------------------- CDB$ROOT
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs; CON_ID DBID GUID NAME OPEN_MODE ---------- ---------- -------------------------------- ------------------------------------------------------------ -------------------- 2 2382420430 8A33449DBB2C529AE0530B38A8C0899C PDB$SEED READ ONLY 3 1983375270 8A337E167FD16986E0530B38A8C0632A PDB1 READ WRITE 4 2621964339 8A33890C63336EADE0530B38A8C02ED2 PDB2 READ WRITE 5 4092698095 8A3390728AB570E0E0530B38A8C0006E PDB3 READ WRITE SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 MOUNTED 4 PDB2 MOUNTED 5 PDB3 MOUNTED
SQL> alter pluggable database pdb1 open; Pluggable database altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 READ WRITE NO 4 PDB2 MOUNTED 5 PDB3 MOUNTED SQL> alter pluggable database pdb1 close; Pluggable database altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 MOUNTED 4 PDB2 MOUNTED 5 PDB3 MOUNTED ----------也可以通過sqlplus使用傳統(tǒng)的startup和shutdown命令來啟動(dòng)和關(guān)閉PDB----------- SQL> alter session set container=pdb1; Session altered. SQL> startup Pluggable Database opened. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 PDB1 READ WRITE NO SQL> shu immediate; Pluggable Database closed. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 PDB1 MOUNTED SQL> alter session set container=CDB$ROOT; Session altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 MOUNTED 4 PDB2 MOUNTED 5 PDB3 MOUNTED
[oracle@vastdata11 admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. CDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = vastdata-scan.us.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cdb) ) ) PDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = vastdata-scan.us.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) ) [oracle@vastdata11 admin]$ tnsping pdb1 TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 01-JUN-2019 23:16:33 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = vastdata-scan.us.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1))) OK (0 msec) [oracle@vastdata11 admin]$ sqlplus system/oracle@pdb1 SQL*Plus: Release 12.1.0.2.0 Production on Sat Jun 1 23:14:15 2019 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> select name,cdb,open_mode,con_id from v$database; NAME CDB OPEN_MODE CON_ID ------------------ ------ ---------------------------------------- ---------- CDB YES READ WRITE 0 SQL> show con_name CON_NAME ------------------------------ PDB1 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- +DATA/CDB/DATAFILE/undotbs1.280.1009718515 +DATA/CDB/8A337E167FD16986E0530B38A8C0632A/DATAFILE/system.292.1009719563 +DATA/CDB/8A337E167FD16986E0530B38A8C0632A/DATAFILE/sysaux.293.1009719563 +DATA/CDB/8A337E167FD16986E0530B38A8C0632A/DATAFILE/users.295.1009719733 SQL>
oracle12C中在啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候, PDB 并不會(huì)隨著 CDB 而啟動(dòng)。
不過我們可以通過創(chuàng)建一個(gè)觸發(fā)器讓 PDB 能夠隨 CDB 啟動(dòng)。如下:
SQL> SHOW CON_NAME CON_NAME ------------------------------ CDB$ROOT SQL> CREATE OR REPLACE TRIGGER open_pdbs 2 AFTER STARTUP ON DATABASE 3 BEGIN 4 EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN'; 5 END open_pdbs; 6 / Trigger created. SQL> shu immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL>startup ORACLE instance started. Total System Global Area 1560281088 bytes Fixed Size 2924784 bytes Variable Size 570429200 bytes Database Buffers 973078528 bytes Redo Buffers 13848576 bytes Database mounted. Database opened. SQL>show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 READ WRITE NO 4 PDB2 READ WRITE NO 5 PDB3 READ WRITE NO
7.創(chuàng)建一個(gè)新的PDB
SQL> create pluggable database pdb4 admin user admin identified by admin; SQL> alter pluggable database pdb4 open; SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs; 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 PDB4 READ WRITE 1757024 859832320 8192
“admin user”子句是必須的,在擴(kuò)展格式,給新用戶賦予了權(quán)限和角色,該用戶僅在admin內(nèi)可以創(chuàng)建新會(huì)話。
在創(chuàng)建完可插拔數(shù)據(jù)庫(kù)后,新的PDB處于MOUNTED模式.
8.克隆一個(gè)新的PDB
SQL> create pluggable database pdb5 from pdb4; SQL> alter pluggable database pdb5 open; 切換到PDB,或切換到CDB SQL> alter session set container=pdb4; SQL> alter session set container=cdb$root; 關(guān)閉一個(gè)pdb和關(guān)閉所有的pdb SQL> alter pluggable database pdb4 close; SQL> alter pluggable database all close;
9.插入一個(gè)pdb數(shù)據(jù)庫(kù)
pdb5.xml:文件確定數(shù)據(jù)文件的名字和全路徑等信息。這些信息在插入操作時(shí)會(huì)用到。
注意:PDB還是其從中拔出的CDB的一部分,只是現(xiàn)在狀態(tài)變?yōu)榱税纬觯║NPLUGGED)而已。
SQL> alter pluggable database pdb5 close; SQL> alter pluggable database pdb5 unplug into '/opt/oracle/oradata/pdb5.xml';
----在當(dāng)前的容器中刪除這個(gè)pdb
SQL> drop pluggable database pdb5 keep datafiles;
----查看pdb和這個(gè)容器是否兼容,如果報(bào)錯(cuò)說明不兼容
exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/opt/oracle/oradata/pdb5.xml');
----開始插入pdb
(using關(guān)鍵字后必須跟上PDB描述的絕對(duì)路徑,即,先前拔出操作時(shí)產(chǎn)生的.XML文件)
create pluggable database pdb5 using '/opt/oracle/oradata/pdb5.xml' move file_name_convert = ('/cdb1/', '/cdb2/');
----最后打開這個(gè)pdb
alter pluggable database pdb5 open;
---至此,
cdb與pdb的一些基礎(chǔ)的知識(shí)和操作都有介紹,
就先總結(jié)到這里。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。