閱讀438 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

(題圖來自Oracle VP , Sally Piao的攝影佳作,感謝攝影師授權)

編輯手記:這一節我們將介紹多租戶中PDB的Plug-Out 與 Plug-In與備份恢複,這篇文章來自<深入解析Oracle>一書的摘錄。


將 Non-PDB 插入 CDB

 

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

 

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


這個數據庫中已經預先建立了一個數據庫用戶,並且有一個測試表:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

以下啟動數據庫到隻讀模式:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

執行 DBMS _PDB.DESCRIBE 過程,然後關閉數據庫:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


插入成功之後可以連接到數據庫進行數據驗證:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


UNPLUG 數據庫


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

以上命令生成一個 XML 文件,缺省存儲於 $ORACLE_HOME/dbs目錄下:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


XML 文件包含了數據文件的描述信息,用於轉移數據庫。UNPLUG 後 PDB 的狀態被變更為MOUNTED,數據庫被關閉:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


已經 UNPLUG 的數據庫不能在當前數據庫中直接打開:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


通過如下命令在當前數據庫中刪除一個已經 UNPLUG 的數據庫:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

如果要集聯刪除所有的數據文件,則可以將 keep datafiles 指令換成 including datafiles.


CDB 的視圖與原理

 

隨著 CDB、PDB 的引入一係列的視圖對應引入 ,用於數據庫信息的查詢和展現。

 

如在 CDB 層麵的用戶信息查詢,可以通過新的視圖 CDB_USERS 進行,通過這個視圖可以直觀的看到一個用戶在哪些容器中存在:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

查詢臨時文件可以通過視圖 CDB_TEMP_FILES 進行:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在數據庫的創建腳本中,還可以找到最核心的底層表 container$ 的創建語句,該底層表用於記錄各容器的信息,通過該表與其他對象的關聯,CDB 的內容可以被隔離和識別出來:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

通過數據庫創建的核心腳本 - cdcore.sql ,可以找到部分視圖的創建方式,如以下腳本記錄了 DBA_PDBS 視圖的創建方式,正是通過 container$ 和 obj$ 的關聯過濾出容器對象的:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

對於 PDB 的常規視圖創建,另外一個核心腳本是 -catcdbviews.sql,在這個腳本中創建了一個 PackageCDBView,通過這個程序包,根據現有的 DBA 視圖批量創建 CDB 所需要的內部視圖、同義詞並進行授權:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

接下來的包體中定義了詳細的操作步驟,其中最核心的是根據數據字典視圖批量的創建 CDB 所需要的視圖:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


PDB 為雲計算而生


在 Oracle 數據庫中,PDB 新特性的引入,被稱為是為雲計算而生的新技術,在雲數據庫平台上,需要將不同用戶的對象、權限等信息徹底分割開來,原有的 Schema 方式並不適合,而 PDB 完全滿足隔離與遷移的需要,徹底簡化了雲數據庫平台的管理和維護。

 

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


目前開放的雲數據平台,可以通請獲用的賬戶。在得了數據庫賬戶之後,可以通過 Oracle Application Express 行在用開布,後台的數據對象可以通過 APEX 內嵌的管理功能進行維護


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

在 Oracle SQL Developer 工具中,已集成了“Cloud Connection”模用於雲端的數據管理:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


然目前 Oracle 的雲數據看起來相當簡單,但是不如何,雲數據代已慢慢走來。


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 11:33:04

  上一篇:go  學習Oracle的三重境界
  下一篇:go  DBA生存警示:主備環境誤操作案例及防範建議