PDB大致功能描述:
創建:
用create pluggable database的命令,
用file_name_convert的方式拷貝seed pdb的文件到對應的新pdb的路徑下。拷貝的是最基本system和sysaux表空間,
將新建的pdb從mount的狀態打開到read write的狀態。
建立pdb用戶的默認表空間。
拔出:
a)用dbca進行拔出有2種生成結果,一種是生成打包文件,一種是生成.xml文件和.DFB文件。
a .1)打包方式:
操作的時候,先close pdb,然后在$ORACLE_HOMEassistantsdbcatemplates,生成一個xml文件描述pdb原來文件的路徑和scn等信息;
將pdb的數據文件復制到$ORACLE_HOMEassistantsdbcatemplates路徑下;
生成一個pdb_info.txt描述本次pdb unplug的相關文件。
將上述3種類型的文件打包成一個gz包。
在cdb中,以drop pluggable database的方式,刪除pdb的信息和在物理上刪除pdb的數據文件。
a.2)生成.xml和.DFB文件的方式
也是類似,只是不打包成一個gz包,且pdb的多個數據文件也被整合在一個.DFB文件中。最后也刪除cdb中關于此pdb的信息。
插入:
如果用dbca,原來打包成gz包的來做plug就非常方便,只要選中gz包,直接plug即可。如果原來是分開文件的方式,也只需根據xml文件和.DFB文件,先restore數據文件,再create pluggable database using xml文件。
克隆:
將pdb至于read only模式,然后利用create pluggable database xxx from xxx…命令進行可克隆。注該方法需要將原pdb至于read only模式。可以常用在測試環境用克隆另外一個類似的環境。
PDB手工操作:
a)創建
SQL>?CREATE?PLUGGABLE?DATABASE?mypdb1?ADMIN?USER?pdbadmin?IDENTIFIED?BY?Orac1e_1981?ROLES=(CONNECT)
2??file_name_convert=(‘E:ORA12CAPPORACLEUSERORADATAORA12CPDBSEED’,’E:ORA12CAPPORACLEUSERORADATAORA12Cmypdb1′);
Pluggable?database?created.
SQL>
SQL>?alter?pluggable?database?mypdb1?open;
Pluggable?database?altered.
SQL>
b)拔出:
SQL>?ALTER?PLUGGABLE?DATABASE?mypdb1?CLOSE;
Pluggable?database?altered.
SQL>
SQL>?alter?pluggable?database?MYPDB1?unplug?into?‘E:ora12capporacleuserproduct12.1.0dbhome_1assistantsdbcatemplatesora12c_MYPDB1.xml’;
Pluggable?database?altered.
SQL>
SQL>?host?cp?-R?E:ora12capporacleuseroradataora12cmypdb1?E:ora12capporacleuseroradataora12cmypdb1_bak
SQL>?DROP?PLUGGABLE?DATABASE?mypdb1?including?datafiles;
Pluggable?database?dropped.
c)插入:
SQL>??–注:不需要拷貝回去temp?tablespace的文件。不然在下一個create?pluggable?database的時候會報錯ORA-01119。
SQL>?host?cp?E:ora12capporacleuseroradataora12cmypdb1_bak*.DBF??E:ora12capporacleuseroradataora12cmypdb1
SQL>
SQL>?create?pluggable?database?b_pdb1?using?‘E:ora12capporacleuserproduct12.1.0dbhome_1assistantsdbcatemplatesora12c_MYPDB1.xml’?nocopy;
Pluggable?database?created.
SQL>
SQL>?alter?pluggable?database?b_pdb1?open;
Pluggable?database?altered.
SQL>
d)克隆:
SQL>?select?dbid,name,open_mode?from?v$pdbs;
DBID?NAME???????????????????????????OPEN_MODE
———-?——————————?———-
4039091088?PDB$SEED???????????????????????READ?ONLY
2213957720?B_PDB1?????????????????????????READ?WRITE
4261134367?MYPDB2?????????????????????????READ?WRITE
SQL>
SQL>
SQL>
SQL>?alter?pluggable?database?mypdb2?close;
Pluggable?database?altered.
SQL>?alter?pluggable?database?mypdb2?open?read?only;
Pluggable?database?altered.
SQL>?create?pluggable?database?b_pdb2
2??from?MYPDB2
3??file_name_convert?=(‘E:ora12capporacleuseroradataora12cmypdb2′,’E:ora12capporacleuseroradataora12cb_pdb2’);
Pluggable?database?created.
SQL>?select?dbid,name,open_mode?from?v$pdbs;
DBID?NAME???????????????????????????OPEN_MODE
———-?——————————?———-
4039091088?PDB$SEED???????????????????????READ?ONLY
2213957720?B_PDB1?????????????????????????READ?WRITE
4261134367?MYPDB2?????????????????????????READ?ONLY
2540280635?B_PDB2?????????????????????????MOUNTED
SQL>?alter?pluggable?database?B_PDB2?open;
Pluggable?database?altered.
SQL>
常用檢查語句:
SQL>?SELECT?sys_context(‘userenv’,’con_name’)?MY_CONTAINER?FROM?dual;
MY_CONTAINER
——————–
CDB$ROOT
SQL>
SQL>?SHOW?con_name
CON_NAME
——————————
CDB$ROOT
SQL>
SQL>?SELECT
2??‘DB_NAME:?‘??||sys_context(‘userenv’,?‘db_name’)||
3??‘?/?CDB?:?‘?????||(select?cdb?from?v$database)||
4??‘?/?AUTH_ID:?‘??||sys_context(‘userenv’,?‘authenticated_identity’)||
5??‘?/?USER:?‘?????||sys_context(‘userenv’,?‘current_user’)||
6??‘?/?CONTAINER:?‘||nvl(sys_Context(‘userenv’,?‘con_Name’),?‘NON-CDB’)
7??as?“DB?DETAILS”
8??FROM?DUAL;
DB?DETAILS
—————————————————————————————————-
DB_NAME:?ora12c?/?CDB?:?YES?/?AUTH_ID:?HE-PCjijihe?/?USER:?SYS?/?CONTAINER:?CDB$ROOT
SQL>
SQL>?alter?session?set?container=MYPDB2;
Session?altered.
SQL>?SELECT
2??‘DB_NAME:?‘??||sys_context(‘userenv’,?‘db_name’)||
3??‘?/?CDB?:?‘?????||(select?cdb?from?v$database)||
4??‘?/?AUTH_ID:?‘??||sys_context(‘userenv’,?‘authenticated_identity’)||
5??‘?/?USER:?‘?????||sys_context(‘userenv’,?‘current_user’)||
6??‘?/?CONTAINER:?‘||nvl(sys_Context(‘userenv’,?‘con_Name’),?‘NON-CDB’)
7??as?“DB?DETAILS”
8??FROM?DUAL;
DB?DETAILS
————————————————————————————————
DB_NAME:?ora12c?/?CDB?:?YES?/?AUTH_ID:?HE-PCjijihe?/?USER:?SYS?/?CONTAINER:?MYPDB2
SQL>
SQL>?select?v.name,?v.open_mode,?nvl(v.restricted,?‘n/a’)?“RESTRICTED”,?d.status
2??from?v$PDBs?v?inner?join?dba_pdbs?d
3??using?(GUID)
4??order?by?v.create_scn
5??/
NAME???????????????????????????OPEN_MODE??RESTRICTED??????STATUS
——————————?———-?—————?————-
PDB$SEED???????????????????????READ?ONLY??NO??????????????NORMAL
MYPDB1?????????????????????????READ?WRITE?NO??????????????NORMAL
MYPDB2?????????????????????????READ?WRITE?NO??????????????NORMAL
SQL>?alter?pluggable?database?mypdb1?close;
Pluggable?database?altered.
SQL>?select?v.name,?v.open_mode,?nvl(v.restricted,?‘n/a’)?“RESTRICTED”,?d.status
2??from?v$PDBs?v?inner?join?dba_pdbs?d
3??using?(GUID)
4??order?by?v.create_scn
5??/
NAME???????????????????????????OPEN_MODE??RESTRICTED??????STATUS
——————————?———-?—————?————-
PDB$SEED???????????????????????READ?ONLY??NO??????????????NORMAL
MYPDB1?????????????????????????MOUNTED????n/a?????????????NORMAL
MYPDB2?????????????????????????READ?WRITE?NO??????????????NORMAL
SQL>?alter?pluggable?database?mypdb1?open?restricted;
Pluggable?database?altered.
SQL>?select?v.name,?v.open_mode,?nvl(v.restricted,?‘n/a’)?“RESTRICTED”,?d.status
2??from?v$PDBs?v?inner?join?dba_pdbs?d
3??using?(GUID)
4??order?by?v.create_scn
5??/
NAME???????????????????????????OPEN_MODE??RESTRICTED??????STATUS
——————————?———-?—————?————-
PDB$SEED???????????????????????READ?ONLY??NO??????????????NORMAL
MYPDB1?????????????????????????READ?WRITE?YES?????????????NORMAL
MYPDB2?????????????????????????READ?WRITE?NO??????????????NORMAL
SQL>
評:感覺PDB不像什么革命性的技術,只是將數據庫至于mount模式后,拷貝數據文件,做成一個備份,然后將此備份plug和unplug。這樣的技術,感覺跨平臺的遷移不太理想。
另外,由于一個cdb中可以掛多個pdb,資源的分配使用就變得非常重要了,在12c中,估計原來幾乎不常用的Resource Manager plan會逐步用起來。
關于redo,由于redo是可以多個pdb共享,因此cdb的管理者可以通過logmnr的方式去挖對應pdb的日志,從dump出來的redo log來看,redo log中含有container id(CON_ID,0為cdb,1為cdb$root, 2為pdb seed,3以上為pdb),pdbid和pxid,至少這些信息可以用于區分不同pdb中的事務。
我們一直都在努力堅持原創.......請不要一聲不吭,就悄悄拿走。
我原創,你原創,我們的內容世界才會更加精彩!
【所有原創內容版權均屬TechTarget,歡迎大家轉發分享。但未經授權,嚴禁任何媒體(平面媒體、網絡媒體、自媒體等)以及微信公眾號復制、轉載、摘編或以其他方式進行使用。】
微信公眾號
TechTarget
官方微博
TechTarget中國