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使用。其選擇約有下列幾種方式: 一、在多部主機中建立多個資料庫,給每一應用系統分別使用。 (有時會將這些主機安裝於虛擬主機中) 缺點: 1. 軟、硬體資源無法分享,造成投資浪費 (Oracle rdbms, Instance, DB Data Dictionary, CPU, Memory, Storage…)。 二、在一部主機中建立多個資料庫,給每一應用系統分別使用 。 缺點: 1. 每個資料庫仍需要有自己的Instance,所以記憶體無法由Oracle 資料庫管理系統自動調配。 三、建立一個大型資料庫,將不同之應用系統之資料集中管理。 (也可透過Oracle Real Application Cluster提供High Availability及Load Balancing 之好處) 缺點: 1. 各AP 之資料無法獨立管理,每個AP之資料綱要(schema)或是資料的擁有者(owner)名稱,需適當規劃,避免重複。 不管採用哪種方式都無法同使擁有資源分享及管理獨立之好處。但Oracle database 12c 之客戶可以有新的選擇:多租戶環境。 多租戶架構允許我們將好幾個可插拔資料庫(pluggable database , PDB) 存入一個多租戶容器資料庫(multitenant container database, CDB)中。 採用多租戶架構有下列好處: a. 多個PDB 共用一個CDB (data dictionary, …) 及Instance,所以軟、硬體資源可分享,亦可達到節省儲存空間之效果。 Multitenant架構Oracle Multitenant Environment 有兩個主要組成部分:多租戶容器資料庫( multitenant container database, CDB) 及可插拔資料庫(pluggable database, PDB)。 實體上, CDB 是由一個Oracle 資料庫所組成,可由一個或多個 Instance( RAC) 所管理。每個CDB 可包含三種容器(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進行下列動作:
要做到上述操作,必須讓應用系統之資料及其相關物件,視為一單獨之資料庫。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$ 中。 因此,即使我們將應用系統之資料單獨存放於某一表格空間中(Tablespace),透過傳輸表格空間(Transport tablespace)之方式,要將該系統資料搬移至其他資料庫時。還是須要將資料字典中與該表格空間有關資料匯出後,再匯入其他資料庫。當然,還要將其他物件(如程式碼…等)匯出並匯入至目的資料庫,所需處理步驟較CDB繁瑣,時間自然就比較久。 在12c 之CDB中,Oracle 會將各PDB之metadata存放於自己的資料檔中,不與Oracle提供之物件一起存放。 每一個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)
|