在多租戶(容器)數據庫中如何創建PDB:方法1 從種子創建PDB


基於版本:19c (12.2.0.3) AskScuti

創建方法:從零開始創建一個PDB(從PDB$SEED創建新的PDB)

對應路徑:Creating a PDB --> Creating From Scratch

 在容器數據庫CDB里面如何創建PDB,官方文檔給出了一張創建PDB技術選項圖,圖片如下:

內容總覽

1. 概述

2. 使用位置子句創建

  2.1 FILE_NAME_CONVERT

  2.2 CREATE_FILE_DEST

3. 不使用位置子句創建

  3.1 定義傳統OMF參數

  3.2 定義新參數

 

1. 概述

使用種子(PDB$SEED)創建新的PDB,過程是把PDB$SEED中的數據文件復制到 CREATE PLUGGABLE DATABASE 語句中定義的目標目錄中。如下圖:

整體過程為:

1). 從 PDB$SEED 中復制數據文件

2). 創建 SYSTEM 和 SYSAUX 表空間

3). 創建新目標目錄,並在根容器中記錄元數據進行關聯

4). 創建臨時表空間 TEMP

5). 創建公共用戶 SYS 和 SYSTEM

6). 創建默認服務

 

2. 使用位置子句創建

所謂使用位置子句的意思就是:在創建的語句中直接指定目標目錄

2.1 FILE_NAME_CONVERT

使用 FILE_NAME_CONVERT 參數,例如:

SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb2

SQL> create pluggable database pdb2 admin user henry identified by henry roles=(connect) file_name_convert=('/u01/app/oracle/oradata/CDB1/pdbseed','/u01/app/oracle/oradata/CDB1/pdb2');

查看創建的PDB2

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDB2 MOUNTED

注意:語句中的 roles=(connect)是直接授予了該用戶的 create session 系統權限,就是允許連接登陸(connect是角色權限,里面包含 create session 系統權限

2.2 CREATE_FILE_DEST

使用 CREATE_FILE_DEST 參數,例如:

SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb3

SQL> create pluggable database pdb3 admin user henry identified by henry roles=(connect) create_file_dest='/u01/app/oracle/oradata/CDB1/pdb3';

查看創建的PDB3

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDB2          MOUNTED
     5 PDB3 MOUNTED

注意:仔細觀察上面兩個參數的使用。一個參數指定兩個路徑(種子路徑,新路徑),一個參數指定一個路徑(新路徑)。

如果覺得在語句中指定路徑有些麻煩,可以提前定義好相關OMF參數。OMF具體使用在后續博文中,發布后連接更新在此處。現在只需了解OMF(Oracle Managed Files) 就是自動管理文件路徑名稱和大小的,可以簡化用戶管理的一種機制。

 

3. 不使用位置子句創建

如果在創建PDB時不指定路徑,則可以使用OMF提前定義好。

3.1 定義傳統OMF參數

數據庫有個傳統的OMF參數:DB_CREATE_FILE_DEST

SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb4

SQL> show parameter db_create_file_dest;

SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/CDB1/pdb4';

System altered.

SQL> create pluggable database pdb4 admin user henry identified by henry roles=(connect);

Pluggable database created.

查看創建的PDB4

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDB2          MOUNTED
     5 PDB3          MOUNTED
     6 PDB4 MOUNTED

SQL
> select name from v$datafile where con_id=6; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_system_gnz3rh9k_.dbf /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_sysaux_gnz3rh9m_.dbf /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_undotbs1_gnz3rh9n_.dbf

注意:觀察 db_create_file_dest 這個參數是如何管理PDB4文件的。另外,如果下次創建PDB,則需要繼續改這個參數到新的路徑下。

 

3.2 定義新參數

在12c中,引入了一個新的參數:PDB_FILE_NAME_CONVERT

這個參數的使用其實和 2.1 小節很類似,只不過這個參數是提前定義好的(種子路徑,新路徑)。

SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb5

SQL> show parameter pdb_file_name_convert

SQL> alter system set pdb_file_name_convert='/u01/app/oracle/oradata/CDB1/pdbseed','/u01/app/oracle/oradata/CDB1/pdb5';

System altered.

SQL> create pluggable database pdb5 admin user henry identified by henry roles=(connect);

Pluggable database created.

查看創建的PDB5

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDB2          MOUNTED
     5 PDB3          MOUNTED
     6 PDB4          MOUNTED
     7 PDB5 MOUNTED

SQL> select name from v$datafile where con_id=7;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
/o1_mf_system_gnz44ft4_.dbf

/u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
/o1_mf_sysaux_gnz44ft6_.dbf

/u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
/o1_mf_undotbs1_gnz44ft7_.dbf

注意:這里好像有個問題,仔細觀察數據文件的路徑,我們創建PDB5指定的 pdb_file_name_convert 這個參數好像沒用上,路徑依然使用的是我們創建PDB4時候的路徑。原因是因為 OMF 這個參數 DB_CREATE_FILE_DEST 進行了全局指定,因此也了解到,當這兩個參數同時定義的時候,使用的是 DB_CREATE_FILE_DEST。

嘗試取消DB_CREATE_FILE_DEST,創建PDB6。

SQL> alter system set DB_CREATE_FILE_DEST='';

System altered.

SQL> create pluggable database pdb6 admin user henry identified by henry roles=(connect);

Pluggable database created.

查看創建的PDB6

SQL> show pdbs

    CON_ID CON_NAME  OPEN MODE  RESTRICTED
---------- --------- ---------- ----------
     2 PDB$SEED      READ ONLY  NO
     3 PDB1          MOUNTED
     4 PDB2          MOUNTED
     5 PDB3          MOUNTED
     6 PDB4          MOUNTED
     7 PDB5          MOUNTED
     8 PDB6 MOUNTED

SQL> select name from v$datafile where con_id=8;

NAME
-----------------------------------------------
/u01/app/oracle/oradata/CDB1/pdb5/system01.dbf
/u01/app/oracle/oradata/CDB1/pdb5/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/pdb5/undotbs01.dbf

這時候,用上了我們創建的 pdb5 文件路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM