【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。
創建步驟
對於CDB root,使用CDB root的文件在CDB中創建PDB;
對於application root,使用application root的文件創建PDB;
對於沒有application root的容器,都使用CDB root的文件在CDB中創建PDB
創建PDB後,它處於mount模式,其狀態為NEW。 可以通過查詢V$ PDBS視圖中的OPEN_MODE列來查看PDB的打開模式。 通過查詢CDB_PDBS或DBA_PDBS視圖的STATUS列來查看PDB的狀態。
該過程PDB有一個新的默認服務被創建。該服務與PDB具有相同的名稱,可用於訪問PDB。 必須為客戶端正確配置Oracle Net Services才能訪問此服務
必須以read/write模式為Oracle數據庫打開新的PDB,以完成新PDB到CDB的集成。 如果嚐試在read only模式下打開PDB,則會返回錯誤。 在read/write模式下打開PDB後,其狀態為NORMAL。
隻有完成備份才能實現必要的恢複
最簡單的創建語法:
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磁盤中刪除。
文章轉自數據和雲公眾號,原文鏈接
最後更新:2017-07-18 10:33:31