Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

shilei1發表於2017-02-12

將 Non-PDB 插入 CDB

 

在12c中,可以將一個非 CDB(也即NON-CDB)插入到 CDB 中,這個過程需要在只讀模式下進行。

 

以下測試首先啟動一個常規的 Non-CDB 資料庫:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


這個資料庫中已經預先建立了一個資料庫使用者,並且有一個測試表:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


在12c中,新增加的包 DBMS_PDB 可以用於進行遷移:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


在 OPEN 模式下執行 DESCRIBE 操作會出現錯誤,提示該操作只能在只讀模式下進行:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

以下啟動資料庫到只讀模式:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

執行 DBMS _PDB.DESCRIBE 過程,然後關閉資料庫:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

這個步驟在 $ORACLE_HOME/dbs 目錄下生成了一個 XML 檔案,用於描述需要遷移的資料檔案,其主要內容如下:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut
Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


在 CDB 中執行 PLUG,就可以將這個 NON-CDB 插入到 CDB 中,指定 COPY 引數,將檔案複製到 CDB 的相應目錄下,如果已經複製到特定目錄,則可以指定 NOCOPY 選項,就無需再複製一次。這也是對以前版本中傳輸表空間技術的增強:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


以下列表中可以看到,新的 PDB 資料庫已經被插入到 CDB 中:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


插入成功之後可以連線到資料庫進行資料驗證:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


UNPLUG 資料庫


透過 UNPLUG 命令可以拔出一個 PDB:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

以上命令生成一個 XML 檔案,預設儲存於 $ORACLE_HOME/dbs目錄下:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


也可以在以上命令中指定目錄,這樣 XML 檔案就可以儲存於特定位置:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


XML 檔案包含了資料檔案的描述資訊,用於轉移資料庫。UNPLUG 後 PDB 的狀態被變更為MOUNTED,資料庫被關閉:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


已經 UNPLUG 的資料庫不能在當前資料庫中直接開啟:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


透過如下命令在當前資料庫中刪除一個已經 UNPLUG 的資料庫:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

如果要集聯刪除所有的資料檔案,則可以將 keep datafiles 指令換成 including datafiles.


CDB 的檢視與原理

 

隨著 CDB、PDB 的引入一系列的檢視對應引入 ,用於資料庫資訊的查詢和展現。

 

如在 CDB 層面的使用者資訊查詢,可以透過新的檢視 CDB_USERS 進行,透過這個檢視可以直觀的看到一個使用者在哪些容器中存在:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

查詢臨時檔案可以透過檢視 CDB_TEMP_FILES 進行:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


對於常規的 DBA 類檢視,在 CDB 中都具有對應的檢視。下表列出了與常用資料庫檢視相對應的一些 CDB 檢視:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


在資料庫的建立指令碼中,還可以找到最核心的底層表 container$ 的建立語句,該底層表用於記錄各容器的資訊,透過該表與其他物件的關聯,CDB 的內容可以被隔離和識別出來:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

透過資料庫建立的核心指令碼 - cdcore.sql ,可以找到部分檢視的建立方式,如以下指令碼記錄了 DBA_PDBS 檢視的建立方式,正是透過 container$ 和 obj$ 的關聯過濾出容器物件的:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

對於 PDB 的常規檢視建立,另外一個核心指令碼是 -catcdbviews.sql,在這個指令碼中建立了一個 PackageCDBView,透過這個程式包,根據現有的 DBA 檢視批次建立 CDB 所需要的內部檢視、同義詞並進行授權:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

接下來的包體中定義了詳細的操作步驟,其中最核心的是根據資料字典檢視批次的建立 CDB 所需要的檢視:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut
Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

最終執行轉換成類似如下的一個系列 SQL:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


瞭解了這些內部過程,我們就可以對 CDB 的各類檢視結構有各大致的瞭解。



PDB 為雲端計算而生


在 Oracle 資料庫中,PDB 新特性的引入,被稱為是為雲端計算而生的新技術,在雲資料庫平臺上,需要將不同使用者的物件、許可權等資訊徹底分割開來,原有的 Schema 方式並不適合,而 PDB 完全滿足隔離與遷移的需要,徹底簡化了雲資料庫平臺的管理和維護。

 

我們先來看一看在 Oracle 11g 版本之上的 Oracle 雲資料庫平臺,下圖包含了銷售方式,Oracle 公司透過儲存空間不同來進行收費區分,銷售單位只能為1個 Schema,這是 Oracle Database 11g 版本的特性決定的,如果一個企業能否隨意建立 Schema,則資料庫會變得異常混亂,而 PDB 模式透過隔離可以徹底解決這一問題。


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


目前開放的雲資料庫平臺,可以透過申請獲得試用的賬戶。在獲得了資料庫賬戶之後,可以透過 Oracle Application Express 進行線上的應用開發和釋出,後臺的資料物件可以透過 APEX 內嵌的管理功能進行維護:


Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut

在 Oracle SQL Developer 工具中,已經整合了“Cloud Connection”模組用於雲端的資料庫管理:

Oracle 12c多租戶特性詳解:PDB 的出與入 InAndOut


雖然目前 Oracle 的雲資料庫看起來還相當簡單,但是不論如何,雲資料庫的時代已經慢慢走來。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-2133431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章