1. 程式人生 > 其它 >【Oracle12.2新特性掌上手冊】-第八卷 PDB的快速建立與移除

【Oracle12.2新特性掌上手冊】-第八卷 PDB的快速建立與移除

編輯手記:在Oracle12.2 中提供了多種建立PDB的方式,能夠更快速便捷地實現資料庫的擴充套件和變更。今天我們來介紹通過SQL*Plus管理的方式。

注:文件內容來自於官方文件翻譯,想了解更多資訊請參閱官方文件。

1

PDB的建立

在建立PDB之前,需要滿足以下條件:

  • CDB必須存在。
  • CDB必須處於讀/寫模式。
  • 操作使用者必須是當前CDB root或application container的公共使用者。
  • 操作使用者必須具有CREATE PLUGGABLE DATABASE的系統特權。
  • 必須為每個容器確定唯一的容器名稱。每個容器名稱在單個CDB中必須是唯一的,並且每個容器名稱在通過特定偵聽器訪問例項的所有CDB的範圍內必須是唯一的。
  • PDB名稱用於區分PDB與CDB中的其他PDB。 PDB名稱遵循與服務名稱相同的規則,其中包括不區分大小寫。
  • 如果要在具有物理standby資料庫的Oracle DG配置中建立PDB,則必須在建立PDB之前完成其他任務。
  • 如果要建立包含使用了透明資料加密過的資料的PDB,或者建立啟用了資料庫保險庫的PDB,則會有更多的前提條件

通過SQL*Plus 的方式建立PDB共有以下幾種方式。

Creating a PDB Using the Seed

可以使用CREATE PLUGGABLE DATABASE語句在CDB中使用CDB seed的檔案建立PDB。

實現過程如下:

還可以使用此語句在application container中使用application seed或CDB seed的檔案建立application PDB。

實現過程如下:

兩種方式的使用場景:

當application container包含application seed時,並且在application root目錄中執行CREATE PLUGGABLE DATABASE語句以從seed建立 application PDB時,將使用應用程式種子application seed 建立 application PDB。 但是,當application container不包含application seed,並且在application root 目錄中執行CREATE PLUGGABLE DATABASE語句以從seed 建立 application PDB時,將使用CDB種子(PDB $ SEED)建立 application PDB。

建立步驟

登入SQL *Plus,確保當前容器是CDBroot或者application root

對於CDB root,使用CDB root的檔案在CDB中建立PDB;

對於application root,使用application root的檔案建立PDB;

對於沒有application root的容器,都使用CDB root的檔案在CDB中建立PDB

執行CREATE PLUGGABLE DATABASE語句,併為PDB指定本地管理員。

建立PDB後,它處於mount模式,其狀態為NEW。 可以通過查詢V$ PDBS檢視中的OPEN_MODE列來檢視PDB的開啟模式。 通過查詢CDB_PDBS或DBA_PDBS檢視的STATUS列來檢視PDB的狀態。

該過程PDB有一個新的預設服務被建立。該服務與PDB具有相同的名稱,可用於訪問PDB。 必須為客戶端正確配置Oracle Net Services才能訪問此服務

將建立好的PDB以read/write模式開啟

必須以read/write模式為Oracle資料庫開啟新的PDB,以完成新PDB到CDB的整合。 如果嘗試在read only模式下開啟PDB,則會返回錯誤。 在read/write模式下開啟PDB後,其狀態為NORMAL。

備份新 建的PDB

只有完成備份才能實現必要的恢復

最簡單的建立語法:

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password;

預定義PDB管理員的建立語法:

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password ROLES=(DBA);

指定儲存、表空間、檔案位置等相關內容的建立語法:

CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE sales  DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON 
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');

Creating a PDB by Cloning an Existing PDB or Non-CDB

可以使用CREATE PLUGGABLE DATABASE語句從源PDB或從非CDB克隆PDB。通過克隆,將源PDB或非CDB克隆為新的PDB,並自動將克隆插入CDB。要使用該技術,需要在建立語句中包含有from子句指定源。

源可以是本地CDB中的PDB,遠端CDB中的PDB或Non-CDB。 CREATE PLUGGABLE DATABASE語句將與源關聯的檔案複製到新位置,並將檔案與目標PDB關聯。 當CDB處於ARCHIVELOG模式和本地撤消模式時,源PDB可以在讀/寫模式下開啟,並在操作期間完全起作用。 因此支援熱PDB克隆。

克隆的一個用途是測試。 通過克隆,可以建立一個或多個PDB或Non-CDB,並單獨安全地進行測試。 例如,在將application與production PDB一起使用之前,可以在克隆的PDB上測試新的application或修改過的的application。

本地PDB的克隆

遠端PDB的克隆

若源PDB在遠端CDB中,必須使用DBlink克隆PDB,在CDB中建立包含克隆的PDB的DBlink。

從包含新PDB的CDB root目錄發出CREATE PLUGGABLE DATABASE語句時,必須指定到包含正在FROM子句中克隆PDB的遠端CDB的DBlink。 DBlink連線到遠端CDB的根目錄,或從包含新PDB的CDB連線到遠端源PDB。

Non-CDB的克隆

當源為Non-CDB時,必須在FROM子句中指定指向非CDB的DBlink。

在所有克隆方案(本地,遠端和Non-CDB)中,當application root目錄是執行CREATE PLUGGABLE DATABASE語句時的當前容器時,將在application container中建立克隆的PDB。 在這種情況下,源PDB的application名稱和版本必須與克隆的應用程式名稱和應用程式容器的版本相匹配。

application container中PDB的克隆

如果目標CDB沒有具有相同名稱的公共使用者,則該使用者帳戶被鎖定在目標PDB中。 對於每個鎖定的使用者,可以選擇以下選項處理:

1、關閉PDB,連線到根目錄,並建立具有相同名稱的公共使用者。 當PDB在讀/寫模式下開啟時,共同授予使用者的角色和特權的差異將得到解決,可以解鎖使用者。 在此過程中,本地授予使用者的許可權和角色保持不變。 2、在PDB中建立新的本地使用者,並使用資料泵將鎖定的使用者資料匯出/匯入到新的本地使用者模式中。 3、保留使用者鎖定。 4、刪除使用者。

Creating a PDB by Relocating It

可以使用CREATE PLUGGABLE DATABASE語句將PDB從一個CDB重定位到另一個CDB。必須包括指定PDB的當前位置的FROM子句;包括RELOCATE子句以指定正在移動PDB而不是克隆。在操作完成之後,PDB被新增到PDB被重定位到的CDB。使用這種技術是以最少停機時間重定位PDB的最快方式,被重定位的PDB可以在讀/寫模式下開啟並且在重定位過程期間完全起作用。

第一種情況,在CDB之間relocate PDB。

第二種情況是relocate 一個PDB到application container。

當PDB重新定位時,有以下兩個選項:AVAILABILITY MAX和AVAILABILITY NORMAL。使用AVAILABILITY MAX子句將連線從PDB的舊位置重定向到新位置。

也可以通過以下的間接方式將連線從PDB的舊位置重定向到新位置。

  • 如果系統使用Oracle Internet Directory(Oracle的LDAP目錄服務),則可以在中央位置更新連線資訊,而不是在多個客戶端配置檔案中更新。
  • 如果在舊位置和新位置為PDB使用相同的偵聽器,則在重新定位完成時,新連線將自動路由到PDB的新位置。
  • 如果PDB使用不同的偵聽器,並且通過local_listener和remote_listener引數的配置使用它們各自偵聽器的交叉註冊,則重新定位是無縫的,因為PDB的服務的可用性和位置將被自動註冊到偵聽器。

第三種情況是從遠端CDB relocate PDB。

在這種情況下,執行CREATE PLUGGABLE DATABASE語句時,新PDB所屬的root取決於當前容器:

  • 若當前容器是CDB root時,會在CDB根目錄中建立新的PDB。
  • 若當前容器是application container的application目錄時,新的PDB將作為application PDB建立。

Creating a PDB by Plugging an Unplugged PDB into a CDB

該技術使用描述PDB的XML元檔案和相關的資料庫檔案將PDB插入到CDB中。這些檔案可以單獨使用,也可以壓縮為一個.pdb字尾的檔案。如以下兩種情況:

第二種情況,將PDB插入到application root。如下圖所示:

可以使用CREATE PLUGGABLE DATABASE語句插入PDB,必須包括一個USING子句,指定描述PDB或.pdb歸檔檔案的XML元檔案。源CDB是從其拔下PDB的CDB。 目標CDB是要插入PDB的CDB。 源CDB和目標CDB可以是相同的CDB或不同的CDB。

插入步驟如下:

1、登入SQL*Plus,確保當前的容器是目標CDB或者目標application container。 若當前容器是目標CDB root的時候,會建立PDB並插入CDB,若當前容器是application container,則會建立相應的application PDB。 2、執行DBMS_PDB.CHECK_PLUG_COMPATIBILITY包,確保PDB與CDB相容; 3、如果PDB還未從源CDB拔下,先拔下來。 4、執行 CREATE PLUGGABLE DATABASE包,使用Using語句指定XML元檔案、.pdb歸檔檔案及其他相關引數。 5、將新的PDB以read/write模式開啟 6、對新的PDB進行備份。

Creating a PDB as a Proxy PDB

代理PDB提供對遠端CDB中的另一個PDB的訪問。可以使用CREATE PLUGGABLE DATABASE語句通過引用其他PDB來建立代理PDB。

當需要遠端PDB的本地上下文環境時,可以使用代理PDB。 另外,當不同CDB中的application container具有相同的application時,它們的application 肉體可以與代理PDB保持同步。

代理PDB建立圖解如下:

第二種情況,建立application container中的代理PDB

在建立代理PDB的過程中,始終需要DBlink。建立完成之後,該DBlink不再被使用,代理PDB直接與被引用的PDB通訊。

直接通訊需要包含引用的PDB的CDB的偵聽器的埠號和主機名,預設情況下,代理PDB使用以下值:

  • 偵聽器埠號:1521

如果引用的PDB的偵聽器不使用預設埠號,則必須使用PORT子句指定偵聽器的埠號。 您可以在建立代理PDB時指定埠號,也可以更改代理PDB以更改埠號。

  • 偵聽器主機名:包含引用的PDB的CDB的主機名

如果引用的PDB的偵聽器不使用預設主機名,則必須使用HOST子句指定偵聽器的主機名。 您可以在建立代理PDB時指定主機名,也可以更改代理PDB以更改主機名。

Creating a PDB Using a Non-CDB

使用Non-CDB建立PDB的時候,有以下幾種方式:

1、通過建立Non-CDB的庫建立PDB

該方法是使用Non-CDB建立PDB的最簡單的方法,但它需要將Non-CDB的檔案複製到新位置。前提條件是無論是Non-CDB還是將要用於PDB插入的新的CDB,必須是12.1或者更新的版本。

2、使用DBMS_PDB的包建立XML元檔案

XML元檔案描述Non-CDB的資料庫檔案,此方法需要比通過克隆Non-CDB建立PDB更多的步驟,但它允許在某些情況下使用Non-CDB建立PDB而不移動Non-CDB檔案。

3、使用Oracle DataPump 的匯入的匯出功能建立PDB。

從一個Non-CDB中匯出相關檔案,並匯入到PDB中,在執行匯入時,在使用者名稱後面指定PDB的連線識別符號。 例如,如果PDB的連線識別符號是hrpdb,則在執行Oracle Data Pump Import實用程式時輸入以下內容:

impdp user_name@hrpdb ...

4、通過ogg複製建立PDB

將來自Non-CDB的資料複製到PDB, 當新建的PDB與源Non-CDB同步時,可以故障轉移到PDB。

2

將PDB從CDB中拔出

要拔出PDB,需要連線到其CDB root或application root目錄,並使用ALTER PLUGGABLE DATABASE語句指定XML檔案或.pdb檔案。

  • 當指定XML檔案(.xml副檔名)時,它將包含有關PDB的元資料,被拔除後, SQL語句建立XML檔案,並且它包含在目標CDB上啟用CREATE PLUGGABLE DATABASE語句以插入PDB所需的資訊。
  • 指定.pdb檔案時,它包含描述PDB和PDB使用的檔案(例如資料檔案和元檔案)的XML檔案的壓縮歸檔。 .pdb檔案允許您將單個壓縮檔案(而不是多個檔案)複製到新位置,以將PDB插入CDB。

該過程圖解如下:

第二種情況,從application container中拔出:

必須關閉PDB,然後才能出。 當拔下PDB時,同一CDB中的其他PDB處於mount模式。 拔除操作會在PDB的資料檔案中進行一些更改以記錄。 因為它仍然是CDB的一部分,所以被拔出的PDB包含在整個CDB的RMAN備份中。以備將來需要時使用。

當然,也可以從CDB中完全刪除PDB。 在拔出的PDB上支援的唯一操作是 dropping PDB。如果需要將PDB插回到同一個CDB中, 必須先從CDB中刪除該PDB,並且 PDB只有在插入CDB時才可用。

在Drop PDB的過程中,可以使用一下語句指定要不要保留PDB的檔案。

1、keep datafiles選項保留PDB的檔案 2、Including datafiles則將PDB檔案一起從CDB磁碟中刪除。

Oracle 12.2新特性掌上手冊系列

第一卷 Availability

第二卷 In-Memory的增強

第三卷 Core Improvements

第四卷 Sharding

第五卷 RAC and Grid

第六卷 ADG的效能與診斷

第七卷 Big Data and Data Warehousing