oracle12c新特點之可插拔資料庫(Pluggable Database,PDB)
1. 12c PDB新特點的優勢
1) 可以把多個PDB整合進一個平臺。
2) 可以快速提供一個新的PDB或一個已有PDB的克隆。
3) 透過拔插技術,可以快速把存在的資料庫重新部署到一個新平臺上。
4) 多個PDB資料庫補丁或升級一次完成。
5) 透過把單個PDB拔插到較高版本的不同CDB,可以補丁或升級一個PDB。
6) 從同一個CDB中眾多PDB中分離出某個PDB的內容。
7) 分離這些PDB應用管理員的責任。
2. 12c PDB新特點的功能
1) 在一個CDB中,你可以擁有很多PDB。
2) PDB和12.1之前版本的普通資料庫是向後相容的。
3) PDB對應用是透明的——你不需要改變客戶端程式碼或資料庫物件。
4) RAC中每個例項作為一個整體開啟CDB(因此CDB和其中的PDB資料庫版本都是相同的)。
5) 會話僅僅看到它自己連線的那個PDB。
6) 你可以從一個CDB拔出一個PDB,然後插入另一個CDB。
7) 你可以在同一個CDB或不同CDB間克隆PDB。
8) 資源管理器隨著PDB的功能得以擴充套件。
9) 透過SQL語句實現了實體PDB的操作(建立,拔出,插入,克隆,清除,設定開啟模式)。
10) 當連線到所謂的“根”(root)時,CDB管理員來執行這些操作。
11) 所有的PDB能被一次備份,但可以分別單獨恢復。
3. 12c PDB的詳解
1) 每個PDB有自己的私有資料字典用於使用者建立的資料庫物件;另一方面,CDB作為一個整體也包含Oracle提供系統的資料字典,其中,每個資料字典定義自己的名稱空間。換句話說,有全域性資料字典(CDB級)和本地資料字典(PDB級)。
2) 有新的分開的資料字典架構,該架構允許一個PDB被快速從一個CDB拔出並插入一個不同的CDB。
3) 每個PDB只能看到Oracle提供系統的只讀定義。
4) 有全域性資料庫引數,也有本地資料庫引數。PDB引數僅僅屬於特定的PDB,並且拔出後,PDB引數也將保持不變。
5) 資料庫使用者可以是全域性的(CDB)或本地的(PDB)。SYS和SYSTEM使用者一開始就在兩級DB中存在。如果你在CDB中建立了一個新使用者,那麼你在PDB中也能看到這個使用者。在PDB中建立的使用者只能在該PDB中使用。
6) 臨時表空間可以是全域性或本地的。
7) Redo日誌和Undo表空間都是全域性的(CDB級)。
8) Data Guard在CDB級作為一個整體發揮作用;RMAN排程的備份也作為一個整體在CDB級完成;任何時候,你可以只備份一個PDB。
9) 應用連線PDB時,不需做程式碼修改;系統管理員可以連線CDB;連線串中的服務名確定目標PDB。
10) PDB允許更加清晰的宣告定義一個應用;一個PDB對同一個CDB裡的其他PDB一無所知;每個PDB是個密閉的容器。這保證了新層面DB的獨立和安全。
4. 連線到一個PDB
建立一個PDB時,一個服務也會被建立在該PDB內,並且,該服務被作為初始化容器。你可以透過下列語句顯示目前的容器:
selectSys_Context('Userenv', 'Con_Name') "current container" from dual;
在12.1 SQL*Plus提示符下,你能用SHOW con_name來顯式目前的容器。
在建立PDB時,也會啟動服務。雖然服務的後設資料被記錄在PDB中,但名字和PDB名字是一樣的。會話將被一個不能改變目前容器的使用者建立。
客戶端應用程式碼通常被設計成在程式碼外面確定連線描述資訊。例如:程式碼也許使用TNS別名,允許在不改變程式碼的情況下改變連線串。
當然,在一個PDB中可以有多個服務。每個將表示它被定義為PDB初始目前容器。可以用常規方法建立、維護、清除PDB中另外的服務,但一定不要清除PDB中預設的服務。建立初始容器是一個PDB的會話的唯一方法是確定一個服務。
下面的例子中,看如何用容易的語法連線到Orale12c中被叫做“cdb1”的CDB,並且連線到其中一個PDB:
sqlplusSys/Sys@localhost:1521/cdb1 AS SYSDBA
CONNECTScott/tiger@localhost:1521/My_PDB
5. 建立並開啟一個新的Oracle12c可插拔資料庫(PDB)
現在,我們將要建立並開啟一個名叫my_pdb新的可插拔資料庫(PDB)。每個CDB都有一個叫做 PDB$Seed 的標準的PDB模板。我們實際是透過克隆該模板來建立一個新PDB。看下面例子:
sqlplussys/pass@localhost:1521/cdb1 as sysdba
create pluggable database My_PDB
admin user App_Admin identified by pass
file_name_convert = ('/pdbseed/', '/my_pdb/');
“ file_name_convert”子句確定新檔名如何從模板庫派生出來,這點和我們知道的rman差不多。在PDB建立期間,Oracle僅複製system和sysaux表空間的兩個資料 檔案,undo,redo等其餘資料庫檔案是CDB全域性的檔案,並且它們屬於特定的叫做CDB$Root的容器。
“admin user”子句是必須的,在擴充套件格式,給新使用者賦予了許可權和角色,該使用者僅在my_pdb內可以建立新會話。
在建立完可插拔資料庫後,新的PDB處於MOUNTED模式。在新PDB中建立一個新會話前,必須先開啟它。因此,我們可以用下面的命令開啟它:
alter pluggabledatabase My_PDB open;
6. 檢查容器資料庫(CDB)和可插拔資料庫(PDB)檔案
select con_id,tablespace_name, file_name
fromcdb_data_files
where file_Namelike '%/cdb1/pdbseed/%'
or file_Namelike '%/cdb1/my_pdb/%'
order by 1, 2;
CON_IDTablespace_Name File_Name
------------------ -------------------------------------------------
2 SYSAUX /home/oracle/oradata/cdb1/pdbseed/sysaux01.dbf
2 SYSTEM /home/oracle/oradata/cdb1/pdbseed/system01.dbf
3 SYSAUX /home/oracle/oradata/cdb1/My_PDB/sysaux01.dbf
3 SYSTEM /home/oracle/oradata/cdb1/My_PDB/system01.dbf
7. Open all Oracle 12c Pluggable Databases (PDB)
RAC每個例項中的每個CDB中的PDB有它自己的開啟模式(Open_Mode )和限制狀態(Restricted status)。開啟模式的可能值為MOUNTED,READ ONLY,和 READ WRITE;當PDB開啟時,限制狀態可能的值為YES和NO,否則為null;
啟動一個例項(這回開啟這個CDB)並不會開啟PDB。“alterpluggable database”語句被用來設定PDB的開啟模式。在該SQL語句中,可以給一個特定PDB名或用關鍵字“all”,例如:
alter pluggabledatabase all open;
8. 關閉CDB中所有的Oracle12c可插拔資料庫
下列語句關閉CDB中所有的PDB:
alter pluggabledatabase all close;
9. 克隆同一個CDB中一個現有的Oracle12cPDB
下面,我們將克隆同一個CDB中的現有的PDB。為此,在開始克隆前,必須先關閉該PDB,然後以READ ONLY模式開啟:
alterpluggable database My_PDB close;
alterpluggable database My_PDB open read only;
createpluggable database My_Clone
fromMy_PDB
file_name_convert= ('/my_pdb', '/my_clone');
alterpluggable database My_PDB close;
alterpluggable database My_PDB open;
alterpluggable database My_Clone open;
10. 從容器資料庫(CDB)中拔出可插拔資料庫(PDB)
下面,展示如何從cdb1中拔出my_pdb。“into”關鍵字後必須跟PDB描述的全路徑,被該操作以XML格式產生:
alterpluggable database My_PDB
unpluginto '/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml';
“my_pdb.xml“檔案確定資料檔案的名字和全路徑等資訊。這些資訊在插入操作時會用到。注意:PDB還是其從中拔出的CDB的一部分,只是現在狀態變為了拔出(UNPLUGGED)而已。
拔出操作實際上對資料檔案做了一些改變,以便記錄PDB被正確成功的拔出。因為它還是CDB得一部分,你能給它做一個RMAN備份。這提供了一個歸檔拔出日誌的方便方法。
一旦你備份了它,你就可以把它從字典庫裡移走——但是,當然,為了今後的插入操作,你必須保留這些資料檔案。
droppluggable database My_PDB keep datafiles;
11. Oracle 12c可插拔資料庫——拔插和克隆操作
11.1. 把My_PDB插入cdb2
1) 連線到目標容器資料庫,這裡是目錄/home/oracle/oradata/cdb2下的cdb2
sqlplus sys/pass@localhost:1521/cdb2 as sysdba
2) 然後,確認將要被插入的PDB和新的主容器資料庫是相容的
exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml');
如果不相容,該過程會報錯。
3) 現在,插入PDB。using關鍵字後必須跟上PDB描述的絕對路徑,即,先前拔出操作時產生的.XML檔案。
create pluggable database My_PDB
using '/home/oracle/oradata/cdb1/my_pdb/my_pdb.xml'
move
file_name_convert = ('/cdb1/', '/cdb2/');
alter pluggable database My_PDB open;
11.2. 從拔出的PDB克隆建立一個PDB
該例子建議保留一個被拔出的PDB的備份,這會有很多應用場景,例如:
1) 在一個開發部門,允許研發者和測試者快速、重複的提供一個開始;
2) 支援自學;
3) 提供一個交付新應用的方法;
為了演示,假設你已經拔出了MY_PDB1,並把它放在了合適的目錄下,並設定為只讀。
create pluggable database MY_PDB1 as clone
using
'/home/oracle/oradata/bk_pdbs/my_pdb1/my_pdb1.xml'
copy
file_name_convert =
('/bk_pdbs/my_pdb1/', '/cdb1/my_pdb1/');
alter pluggable database my_pdb1 open;
“as clone”SQL子句確保新的PDB得到一個正確的、全域性的唯一標識。然後,你能看到你的GUIDs:
selectPDB_Name, GUID
fromDBA_PDBs
orderby Creation_scn;
注意:PBD被從CBD拔出後以及後來插入另一個CBD,DBA_PDBs.GUID就會一直伴隨著它。伺服器程式碼會強制CBD內PDB的唯一性,但並不強制CBD間的唯一性。
11.3. 把一個非CBD庫當做PDB插入一個已有的CBD庫
這裡,我將展示給你如何把12.1前的資料庫轉變為一個PDB。你共有幾個方法做到這點:
1) 可傳輸表空間/資料泵;
2) 複製;
3) 把原來的非CBD庫升級到12c,並把它插入12c CDB;
因為頭兩個方法曾經都是標準方法,我們這裡將只描述最後一個。
注意:不是一個升級步驟就能完成所有任務,它是一個兩階段操作:首先,把你現存的資料庫升級為12.1非CDB庫;接著,把你的非CDB庫插入現存的CDB中——僅僅插入PDB和接著完成一個插入後步驟。
? 第一步,先把12.1前的庫升級為12c版本;
? 第二步,連到非CDB庫,以便產生表示檔案,正如拔出一個PDB部分所示:
shutdownimmediate
startupmount
alterdatabase open read only;
begin
DBMS_PDB.Describe(PDB_Descr_File=> ‘/home/oracle/oradata/noncdb/noncdb.xml’);
end;
/
shutdownimmediate
? 下一步是連線到接收CDB庫——cdb2,並用表示檔案將非cdb庫的資料檔案插入。
createpluggable database noncdb_pdb
asclone
using'/home/oracle/oradata/noncdb/noncdb.xml'
source_file_name_convert= none
copy
file_name_convert= ('/noncdb/', '/cdb2/noncdb_pdb/')
storageunlimited;
? 現在開啟庫,最後完成插入,關閉,再開啟,把限制狀態設定為YES:
alterpluggable database noncdb_pdb open;
alterpluggable database noncdb_pdb close;
alterpluggable database noncdb_pdb open restricted;
? 最後,執行一個Oracle提供的SQL*Plus指令碼來移去現在本地字典中的資料,因為,在新版本中,定義Oracle系統的後設資料僅僅在整個CDB中儲存一次。
altersession set container = ExNonCDB;
@?/rdbms/admin/noncdb_to_pdb.sql
? 作為最後一步,開啟新被接收的先前的非CDB庫。
alterpluggable database noncdb_pdb open;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2118667/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳談Oracle12c新特點容器資料庫&可插拔資料庫(CDB&PDB)Oracle資料庫
- kettl連線oracle12c 可插拔資料庫pdbOracle資料庫
- Oracle12c中配置例項引數和修改容器資料庫(CDB)及可插拔資料庫(PDB)Oracle資料庫
- 多租戶:防止意外建立可插拔資料庫(PDB)- Lone-PDB資料庫
- Oracle Database 12c可插拔資料庫案例OracleDatabase資料庫
- Oracle12c中多宿主容器資料庫(CDBs)和可插拔資料庫(PDBs)新特性之執行指令碼Oracle資料庫指令碼
- 【PDB】Oracle 建立pdb說明(create pluggable database)OracleDatabase
- Oracle12cr1新特性之容器資料庫(CDB)和可插拔資料庫(PDB) 的啟動和關閉Oracle資料庫
- Oracle 12.2 新特性:線上PDB資料庫克隆(Pluggable Hot Clone)Oracle資料庫
- 【BUILD_ORACLE】在Oracle cloud資料庫“插拔”PDB的方法UIOracleCloud資料庫
- Oracle12c多租戶資料庫 - PDB資料庫的unplug及plug 2Oracle資料庫
- Oracle12c多租戶資料庫 - PDB資料庫的unplug及plug 1Oracle資料庫
- Oracle12c多租戶資料庫 - PDB資料庫的unplug及plug 3Oracle資料庫
- Oracle12c中多宿主環境(CDB&PDB)的資料庫觸發器(Database Trigger)Oracle資料庫觸發器Database
- Oracle12c多租戶資料庫 - PDB資料庫的unplug及plug 參考Oracle資料庫
- 【12C】Oracle 12C 新特性“可插拔資料庫”功能體驗Oracle資料庫
- 【12C】Oracle 12c 可插拔資料庫之資料泵功能體驗Oracle資料庫
- Oracle12c中功能及效能新特點之with子句的增強Oracle
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- Oracle 12c 新特性之 PDB 級別閃回資料庫Oracle資料庫
- PDB插拔操作手冊
- 【kingsql分享】Oracle 18c可插拔資料庫艦隊新玩法SQLOracle資料庫
- Oracle12c多租戶資料庫備份與恢復 - 僅備份一個PDB資料庫Oracle資料庫
- Oracle12c中資料刪除(delete)新特性之資料庫內歸檔功能Oracledelete資料庫
- 關於 RMAN 對於可插拔資料庫按時間點的恢復 (文件 ID 1984554.1)資料庫
- 雲時代資料庫的核心特點資料庫
- oracle之 oracle database vault(資料庫保險庫)OracleDatabase資料庫
- R12c 新特性:RMAN 可插拔資料庫的備份和恢復 (文件 ID 1945849.1)資料庫
- Oracle12c多租戶資料庫備份與恢復 - 恢復一個PDBOracle資料庫
- 12c-RECOVER PLUGGABLE DATABASEDatabase
- 崑崙分散式資料庫技術特點分散式資料庫
- 淺析列式資料庫的特點NR資料庫
- Oracle12c多租戶資料庫備份與恢復 - PDB中資料檔案的恢復Oracle資料庫
- 小丸子學Oracle 12c系列之——Oracle Pluggable DatabaseOracleDatabase
- 磁碟資料庫與記憶體資料庫的特點比較資料庫記憶體
- 分散式資料庫的定義和特點分散式資料庫
- Oracle 12c 新特性之 資料庫內歸檔(In-Database Archiving)Oracle資料庫Database
- 大資料的特點大資料