Oracle Database 12c 新特色(1) by oradba | CodeData
top

Oracle Database 12c 新特色(1)

分享:

自從Oracle CEO Larry Ellison 於去年秋季的OpenWorld 大會中(Sep. 2012 San Francisco),透露出Oracle Database 12c 的新架構:Pluggable Database之後。許多企業的資訊人員(尤其是資料庫管理人員),對此先進之觀念都抱持著濃厚的興趣。直到2013六月底,Oracle 終於正式發布Oracle Database 12c 並且於網路上開放資料庫軟體(Oracle Database 12c – 12.1.0.1.0)及其文件供下載測試及研究。

Oracle Database 12c包含了數百細項的新特色,要一一消化及運用,對於大部分的Oracle 相關從業人員都是一大挑戰。所幸Oracle 大師 Thomas Kyte在上述大會中主持會議:“yeah! Top 12 features in 12c” ,會議中他列出了12項 Oracle Database 12c 的重要新特點,讓我們可快速掌握及運用相關特點。其中最吸引我們的還是”Pluggable Database”這個觀念,我們趁熱為大家介紹

(註:Thomas Kyte 為知名網站asktom.oracle.com之主筆。)

Oracle多租戶環境 Multitenant Environment (Pluggable Database) 基本觀念

Oracle 在其新一代旗艦資料庫 12c中,導入了相當進步的觀念:可插拔資料庫(Pluggable Database)或者叫做多租戶環境。Oracle資料庫之客戶可以採用此架構,管理許多不同應用系統(AP. )之資料,藉此降低硬體資源之需求及資料庫管理之成本。

許多Oracle資料庫之客戶會在企業資訊系統中,提供多個資料庫服務給不同之AP使用。其選擇約有下列幾種方式:

一、在多部主機中建立多個資料庫,給每一應用系統分別使用。

oracle-database-12c-new-features-1-1

(有時會將這些主機安裝於虛擬主機中)

缺點:

1. 軟、硬體資源無法分享,造成投資浪費 (Oracle rdbms, Instance, DB Data Dictionary, CPU, Memory, Storage…)。
2. 每個DB 都要儲存一份Oracle DB 提供的物件(例如,dbms_sql, dbms_xxx),所以儲存空間(storage)也就比較浪費。

二、在一部主機中建立多個資料庫,給每一應用系統分別使用 。

oracle-database-12c-new-features-1-2

缺點:

1. 每個資料庫仍需要有自己的Instance,所以記憶體無法由Oracle 資料庫管理系統自動調配。
2. 每個DB 都要儲存一份Oracle DB 提供的物件(例如,dbms_sql, dbms_xxx),所以儲存空間(storage)也就比較浪費。

三、建立一個大型資料庫,將不同之應用系統之資料集中管理。

oracle-database-12c-new-features-1-3

(也可透過Oracle Real Application Cluster提供High Availability及Load Balancing 之好處)

缺點:

1. 各AP 之資料無法獨立管理,每個AP之資料綱要(schema)或是資料的擁有者(owner)名稱,需適當規劃,避免重複。
2. 無法快速將某一AP之資料轉移到其他資料庫。

不管採用哪種方式都無法同使擁有資源分享及管理獨立之好處。但Oracle database 12c 之客戶可以有新的選擇:多租戶環境。

oracle-database-12c-new-features-1-4

多租戶架構允許我們將好幾個可插拔資料庫(pluggable database , PDB) 存入一個多租戶容器資料庫(multitenant container database, CDB)中。

採用多租戶架構有下列好處:

a. 多個PDB 共用一個CDB (data dictionary, …) 及Instance,所以軟、硬體資源可分享,亦可達到節省儲存空間之效果。
b. 只需針對單一資料庫及Instance進行資源分配或調整,效能調校較容易。
c. 可針對CDB將所有的PDB一起備份或回復,減少管理成本。另外,亦可單獨將一個PDB回復至過去時間,不影響其他PDB之使用。
d. 可快速建立新的PDB或重新配置或複製PDB至另外一個CDB。
e. 針對CDB更新或升級,就可以同時完成所有PDB之更新或升級,可減少升級或更新所需處理之動作及時間。

Multitenant架構

Oracle Multitenant Environment 有兩個主要組成部分:多租戶容器資料庫( multitenant container database, CDB) 及可插拔資料庫(pluggable database, PDB)。

oracle-database-12c-new-features-1-5

實體上, CDB 是由一個Oracle 資料庫所組成,可由一個或多個 Instance( RAC) 所管理。每個CDB 可包含三種容器(container):

  1. root container (CDB$ROOT)。
  2. seed pluggable database container (PDB$SEED)。
  3. pluggable database container。

root container (CDB$ROOT)

每個CDB一定要有一個root container而且也只能有一個,名為CDB$ROOT,為建立CDB時第一個建立的container。root container 存放Oracle提供之物件(Oracle supplied objects),如Data Dictionary , PLSQL 物件之程式碼等, 讓CDB內所有PDB分享。 CDB$ROOT 也儲存每個PDB(包括未來新增的PDB)都有相同名稱的通用使用者 (common user)之帳戶資料。common user 可登入或管理每個它有適當權限的PDB。

seed pluggable database container (PDB$SEED)

seed PDB是一特殊之可插拔資料庫,名為PDB$SEED,每個CDB只會有一個seed PDB,於建立CDB時產生。在CDB中建立其他額外的PDB時,Oracle 會將PDB$SEED之資料檔複製到指定之檔案位置,即可快速新建一個空的PDB,主要時間花在複製檔案。使用者無法新增或異動PDB$SEED內之物件。

pluggable database container (PDB s)

每個CDB可包含零個至最多252 個額外建立的PDB。每個PDB內可存放一個或一些應用系統之資料及其他相關物件(如資料字典、DB Link…等)。資料庫管理者可建立只能登入該PDB之區域使用者(local user)。邏輯上,應用系統或終端使用者可將PDB 當作Oracle 11g以前一般的資料庫 (non-CDB)。 所以應用系統之資料若要搬移到別台主機,並不需要進行任何修改,只需將PDB搬移到別的CDB即可。

分割資料字典

Oracle 12c database 允許我們針對PDB進行下列動作:

  1. 快速建立空的資料庫。(create PDB from PDB$SEED)
  2. 將non-CDB 資料庫匯入PDB。 (透過export/import或是DBMS_PDB)
  3. 快速複製PDB。(clone PDB)
  4. 快速搬移PDB至其他CDB。(unplug and plug-in PDB)

要做到上述操作,必須讓應用系統之資料及其相關物件,視為一單獨之資料庫。Oracle 將資料庫系統本身之資料字典(data dictionary)及其他物件與應用系統之資料字典及物件徹底分開,分別存放於root , CDB$ROOT 及 各自Pluggable Database, PDB中。如此,每一應用系統完整的將系統本身的資料、資料字典及程式碼..等物件,存放於各自PDB之資料檔案中,方便拔除(unplug)及插入(plug-in)。

Oracle 資料庫 在11g以前的版本,都不提供多租戶環境功能,稱之為非多租戶資料庫(non-CDB)。 12c 以後,DBA可選擇建立CDB 或 non-CDB之資料庫。

在non-CDB環境中(如圖5),Oracle 資料庫管理系統將所有物件之資料字典及程式碼,集中存放於資料庫內部核心之表格中 (如 TAB$, COL$, SOURCE$…等)。例如,當我們建立應用系統表格SALES時,Oracle 資料庫管理系統會將該表格之描述資料(metadata),記錄到資料庫內部之核心表格中(如 TAB$, OBJ$, COL$ 等),與Oracle 提供之表格,如 AUDIT_ACTIONS,共用相同之核心表格。而當我們建立應用系統所使用之PL/SQL 物件 qry_total時,Oracle會將其程式碼與資料庫管理系統所提供之PL/SQL 物件 dbms_xxx之程式碼一起存放於 同一個內部核心表格SOURCE$ 中。

oracle-database-12c-new-features-1-6

因此,即使我們將應用系統之資料單獨存放於某一表格空間中(Tablespace),透過傳輸表格空間(Transport tablespace)之方式,要將該系統資料搬移至其他資料庫時。還是須要將資料字典中與該表格空間有關資料匯出後,再匯入其他資料庫。當然,還要將其他物件(如程式碼…等)匯出並匯入至目的資料庫,所需處理步驟較CDB繁瑣,時間自然就比較久。

在12c 之CDB中,Oracle 會將各PDB之metadata存放於自己的資料檔中,不與Oracle提供之物件一起存放。

oracle-database-12c-new-features-1-7

每一個PDB 都會有自己的SYSTEM tablespace,存放自己有關之Data Dictionary…等資料。例如,當我們針對PDB_AP 建立一表格SALES時,其metadata 會被儲存在該PDB自己的TAB$等核心表格中。而Oracle 提供給各PDB共享之物件之metadata就存放於CDB$ROOT之核心表格中(TAB$)。為了方便各PDB使用Oracle提供之物件,各PDB會記錄Metadata之連結(Metadata-Linked Object)。因此,各PDB即可透過這些連結存取Oracle 提供之物件。另外針對CDB中提供給所有PDB共享之物件(如 AUDIT_ACTIONS),每個PDB會記錄各物件之連結(Object-Linked Object),藉此所有PDB即可共用該物件。

在此架構下,如要更新或升級資料庫就只需針對CDB$ROOT進行,就會一起更新該CDB中所有的PDB。相對的,若我們要將某一AP 之相關資料搬移到另一資料庫主機時,只需將AP相關之PDB資料檔案搬到新的CDB中,再重建共享物件之連結即可(透過unplug 及 plug-in或 clone PDB之方法)。所以,所需的動作及時間就可節省許多。

Oracle 12c Multitenant 基本觀念及架構先介紹到此,下次我們再介紹CDB與PDB之建立與實際管理等語法。

後續 >> Oracle Database 12c 新特色(2)

 

分享:
按讚!加入 CodeData Facebook 粉絲群

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

Oracle 特約講師,多年的 Oracle DBA 工作及相關課程的教學經驗,想藉此園地與大家分享 Oracle Database 的一些觀念及心得。

熱門論壇文章

熱門技術文章