(題圖來(lái)自Oracle VP , Sally Piao的攝影佳作,感謝攝影師授權)
編輯手記:這一節我們將介紹多租戶(hù)中PDB的Plug-Out 與 Plug-In與備份恢復,這篇文章來(lái)自<深入解析Oracle>一書(shū)的摘錄。
在12c中,可以將一個(gè)非 CDB(也即NON-CDB)插入到 CDB 中,這個(gè)過(guò)程需要在只讀模式下進(jìn)行。
以下測試首先啟動(dòng)一個(gè)常規的 Non-CDB 數據庫:
這個(gè)數據庫中已經(jīng)預先建立了一個(gè)數據庫用戶(hù),并且有一個(gè)測試表:
在12c中,新增加的包 DBMS_PDB 可以用于進(jìn)行遷移:
在 OPEN 模式下執行 DESCRIBE 操作會(huì )出現錯誤,提示該操作只能在只讀模式下進(jìn)行:
以下啟動(dòng)數據庫到只讀模式:

執行 DBMS _PDB.DESCRIBE 過(guò)程,然后關(guān)閉數據庫:

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


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

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

插入成功之后可以連接到數據庫進(jìn)行數據驗證:

通過(guò) UNPLUG 命令可以拔出一個(gè) PDB:

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

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

XML 文件包含了數據文件的描述信息,用于轉移數據庫。UNPLUG 后 PDB 的狀態(tài)被變更為MOUNTED,數據庫被關(guān)閉:

已經(jīng) UNPLUG 的數據庫不能在當前數據庫中直接打開(kāi):

通過(guò)如下命令在當前數據庫中刪除一個(gè)已經(jīng) UNPLUG 的數據庫:

如果要集聯(lián)刪除所有的數據文件,則可以將 keep datafiles 指令換成 including datafiles.
隨著(zhù) CDB、PDB 的引入一系列的視圖對應引入 ,用于數據庫信息的查詢(xún)和展現。
如在 CDB 層面的用戶(hù)信息查詢(xún),可以通過(guò)新的視圖 CDB_USERS 進(jìn)行,通過(guò)這個(gè)視圖可以直觀(guān)的看到一個(gè)用戶(hù)在哪些容器中存在:

查詢(xún)臨時(shí)文件可以通過(guò)視圖 CDB_TEMP_FILES 進(jìn)行:

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

在數據庫的創(chuàng )建腳本中,還可以找到最核心的底層表 container$ 的創(chuàng )建語(yǔ)句,該底層表用于記錄各容器的信息,通過(guò)該表與其他對象的關(guān)聯(lián),CDB 的內容可以被隔離和識別出來(lái):

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

對于 PDB 的常規視圖創(chuàng )建,另外一個(gè)核心腳本是 -catcdbviews.sql,在這個(gè)腳本中創(chuàng )建了一個(gè) PackageCDBView,通過(guò)這個(gè)程序包,根據現有的 DBA 視圖批量創(chuàng )建 CDB 所需要的內部視圖、同義詞并進(jìn)行授權:

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


最終執行轉換成類(lèi)似如下的一個(gè)系列 SQL:

了解了這些內部過(guò)程,我們就可以對 CDB 的各類(lèi)視圖結構有各大致的了解。
在 Oracle 數據庫中,PDB 新特性的引入,被稱(chēng)為是為云計算而生的新技術(shù),在云數據庫平臺上,需要將不同用戶(hù)的對象、權限等信息徹底分割開(kāi)來(lái),原有的 Schema 方式并不適合,而 PDB 完全滿(mǎn)足隔離與遷移的需要,徹底簡(jiǎn)化了云數據庫平臺的管理和維護。
我們先來(lái)看一看在 Oracle 11g 版本之上的 Oracle 云數據庫平臺,下圖包含了銷(xiāo)售方式,Oracle 公司通過(guò)存儲空間不同來(lái)進(jìn)行收費區分,銷(xiāo)售單位只能為1個(gè) Schema,這是 Oracle Database 11g 版本的特性決定的,如果一個(gè)企業(yè)能否隨意創(chuàng )建 Schema,則數據庫會(huì )變得異?;靵y,而 PDB 模式通過(guò)隔離可以徹底解決這一問(wèn)題。

目前開(kāi)放的云數據庫平臺,可以通過(guò)申請獲得試用的賬戶(hù)。在獲得了數據庫賬戶(hù)之后,可以通過(guò) Oracle Application Express 進(jìn)行在線(xiàn)的應用開(kāi)發(fā)和發(fā)布,后臺的數據對象可以通過(guò) APEX 內嵌的管理功能進(jìn)行維護:

在 Oracle SQL Developer 工具中,已經(jīng)集成了“Cloud Connection”模塊用于云端的數據庫管理:

雖然目前 Oracle 的云數據庫看起來(lái)還相當簡(jiǎn)單,但是不論如何,云數據庫的時(shí)代已經(jīng)慢慢走來(lái)。
聯(lián)系客服