如何將 PDB 插入 Oracle12c 容器資料庫
Summary: 我們的章程是透過提供資料庫解決方案、自訂開發過程、動態資料中心,以及彈性運算,以提供能簡化 IT 的解決方案
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Symptoms
適用於:
資料庫:Oracle 12cR1
作者:
Mahesh Reddy
問題:
如何將 PDB 插入 Oracle12c 容器資料庫?
溶液:
您可以通過以下方式建立可插式資料庫:
使用 SEED 資料庫建立 PDB。此方法將與種子關聯的檔複製到新位置,並關聯到新的 PDB。您可以使用建立可插式資料庫語句,從 SEED 輕鬆建立新的 PDB。
您可以指定以下子句,以不同的方式從 SEED 建立新的 PDB:
注意: 僅當從種子創建 PDB 時,才能使用 ROLES 子句。
範例:
1 SQL> 建立可插拔資料庫 PDBNAME 管理員使用者 PDBUSR 由 PASSWORD 標識;
上述語句使用本地使用者 PDBUSR 建立 PDB。 此語句將PDB_DBA角色授予 PDB 管理員“pdbusr”,並將指定的預定義 Oracle 角色授予 PDB 中的本地PDB_DBA角色。
例:
2 SQL> 建立可插拔資料庫 PDBNAME 管理員使用者 pdbusr 由 PASSWORD 識別 儲存 (最大大小 5G) 預設表空間 使用者 數據檔 '+DATA_NEW' 大小 100M 自動擴展 path_prefix = '+DATA_NEW' file_name_convert = ('+DATA', 'DATA_NEW');
上述語句創建大小有限的 pdb,它指定屬於 PDB 的所有表空間不得超過 5 GB,並在新位置為非管理員使用者創建預設表空間使用者是“+DATA_NEW”。
2. 透過複製現有 PDB 來建立新 PDB:
克隆生產資料庫是用於開發和測試對應用程式和相關環境的更改的常用技術。在生產環境中安裝新的作業系統版本、儲存軟體或應用程式版本之前,需要使用生產資料進行全面測試。這通常是通過將生產資料庫複製到測試環境來實現的。
在 Oracle12c 中,您可以使用 CREATE PLUGGABLE DATABASE 語句來克隆 PDB。此語句克隆源 PDB,並將克隆插入同一 CDB 或遠端 CDB。
創建可插式資料庫語句將與源 PDB 關聯的檔複製到新位置,並將這些檔與目標 PDB 相關聯。
不同類型的條款:
1. 使用無子句
克隆本地 PDB 無子句意味著沒有結構更改。
例如:sql> 從 pdb 創建可插拔資料庫clone_pdb;
在這裡,克隆 pdb 已在預設磁碟群組中以相同的大小和相同的角色建立不同的 GUID。
2. 使用 PATH_PREFIX 和 FILE_NAME_CONVERT 子句
克隆本地 PDB 需要 FILE_NAME_CONVERT 子句來指定複製檔的目標位置。在此範例中,檔從一個位置複製到另一個位置。
例如: > SQL 從 PDB 建立可插拔資料庫clone_pdb PATH_PREFIX= '+BRLOAD' FILE_NAME_CONVERT = ('+DATA', '+BRLOAD');
在這裡,源 pdb 數據檔存儲在“+DATA”磁碟組中,克隆 pdb 數據檔放置在不同的磁碟組“+BRLOAD”中,您可以使用FILE_NAME_CONVERT子句將數據檔位置從“+DATA”轉換為“+BRLOAD”。
3. 使用 FILE_NAME_CONVERT 和 STORAGE 子句複製本機 PDB。
必須強制執行 PDB 的儲存限制。因此,存儲子句是必需的。具體而言,屬於 PDB 的所有表空間不得超過 2 GB,並且 PDB 會話在共用臨時表空間中使用的存儲不得超過 100 MB。
例如:SQL> 從 PDB FILE_NAME_CONVERT=(“+數據”、“+BRLOAD”)存儲(最大大小 2G MAX_SHARED_TEMP_SIZE 100M)創建可插式資料庫clone_pdb;
複製本機 PDB 的步驟:
本節說明如何複製本機 PDB。克隆本地 PDB 後,源和目標 PDB 位於同一 CDB 中。
您可以使用下列步驟複製 PDB:
步驟 1:檢查源 pdb 狀態
SQL>顯示 pdbs;
CON_ID CON_NAME 開放模式受限
2 PDB$SEED 唯讀
無 3 PDB1 讀寫 要克隆的
PDB 無須為唯讀狀態,如果存在讀寫模式,請使用以下命令
變更狀態 SQL> 變更可插拔資料庫 pdbname 關閉實例=全部;
此處,instances=all 表示關閉所有節點中的 PDB。
Sql> alter pluggable database pdb open read read instance = all;
SQL>顯示 pdbs;
CON_ID CON_NAME 開啟模式受限制
2 PDB$SEED 唯讀無
3 PDB1 唯讀無
步驟 2: 從第 2 節中提到的不同克隆子句中選擇所需選項,
SQL> 從 pdb1 創建可插拔資料庫clone_pdb1;(無條款)
其中 pdb1 是來源,clone_pdb1是目標
步驟 3:複製的 PDB 將處於掛接模式,且其狀態為「NEW」。您可以通過查詢CDB_PDBS或DBA_PDBS檢視的「狀態」列來查看 PDB 的狀態。
之後,使用 alter pluggable database 變更 pdb 的狀態,然後您需要在所有節點的 tnsnames.ora 中新增 PDB 服務。
3.拔下 PDB 並將其插入 CDB:
拔下 PDB:
拔下 PDB 會取消 PDB 與 CDB 的關聯。拔除會對 PDB 的資料檔案進行一些變更,以記錄 PDB 已成功拔除。由於它仍然是 CDB 的一部分,因此拔出的 PDB 會包含在整個 CDB 的 RMAN 備份中。這樣的備份提供一種便捷的方式來歸檔拔除的 PDB,以備日後需要使用。PDB 必須先闔上,才能拔下。從CDB拔下PDB時,拔下的PDB處於掛載模式
拔下PDB的步驟:
檢查源 pdb 狀態
SQL>顯示 pdbs;
CON_ID CON_NAME 開啟模式受限制
2 PDB$SEED 唯讀
3 PDB1 讀取寫入否
如果來源 PDB 處於讀取寫入模式,您應將 PDB 狀態變更為掛接狀態。
SQL> alter pluggable database PDBNAME close instances=all;
連線至根容器並執行以下命令
SQL> alter pluggable database pdb1 unplug into /u01/app/oracle/pdb1.xml';
此處會在 /u01/app/oracle 目錄中
建立 pdb1.xml 中繼資料檔案使用 XML 元數據檔,您可以將 PDB 插入 3.1。 相同的 CDB
3.2. 遠端CDB
您可以使用創建可插拔資料庫將 PDB 插入 CDB,並使用不同的子句指定 XML 檔。
不同類型的子句:
使用 source_file_name_convert,沒有 copy 子句:
SOURCE_FILE_NAME_CONVERT:XML 檔不顯示當前檔位置。那時候我們可以使用這個子句。XML 指示檔位於 +DATA 中,但實際檔位於 +DATA1 中。
Source_file_name_convert = ('+DATA','+DATA1')
+DATA= string1 +DATA1=string2
在這裡,string2 檔名模式取代了 string1 檔名模式。
2. 使用path_prefix、複製file_name_convert子句:
PATH_PREFIX:此子句用於指定數據檔位置的絕對路徑。
FILE_NAME_CONVERT:當檔不在目標位置,然後想要在 PDB 創建期間複製或移動它們時,可以使用此子句。
3. 使用FILE_NAME_CONVERT,MOVE,SOURCE_FILE_NAME_CONVERT子句:
Xml檔不描述當前檔的位置,因此需要源檔名轉換。示例:xml 檔指示檔位於“+數據”中,但檔位於“/u01/app”中。
需要轉換檔案名稱,才能將檔案從「/u01/app」移至「+DATA1」。
3.1. 將拔下的 PDB 插入同一個 CDB:
PDB 必須先從 CDB 中移除,然後才能重新插入同一個 CDB。
使用具有不同方法的 XML 檔創建可插入資料庫。
a) NOCOPY 方法
SQL>使用 '/u01/app/oracle/pdb1.xml' nocopy 建立可插拔資料庫 pdb1;
b) 複製方法
SQL> 使用 '/u01/app/oracle/pdb1.xml' copy file_name_convert=('+DATA/pdb1/','+DATA1'/pdb1/') 建立可插拔資料庫 pdb1;
C) 作為克隆移動方法
SQL> 使用“/U01/APP/ORACLE / pdb1.xml”移動創建可插拔資料庫 PDB1 作為克隆file_name_convert=(“+DATA/pdb1/','+DATA1'/pdb1/');
3.2.將拔下的 PDB 插入遠端 CDB:
先決條件:
A) 它們必須具有相同的位元組格式。
B) 它們必須安裝同一組資料庫選項。
資料來源:
1. 拔下 PDB 後,使用 ASMCMD cp 或 DATA_FILE_NAME_CONVERT 命令,將 XML 傳輸至目標位置,同時將資料庫檔案從磁碟群組 (+DATA) 傳輸到作業系統位置 (/home/)。
2. 將資料庫檔案從來源傳輸到目標作業系統位置。
目標:
從原始程式碼獲取 XML 和資料庫檔後,可以使用DBMS_PDB。CHECK_PLUG_COMPATIBILITY用於確定拔出的 PDB 是否與目標 CDB 相容的功能。
如果輸出「是」,則表示 PDB 相容。
如果輸出「否」,則表示 PDB 不相容,請檢查檢視PDB_PLUG_IN_VIOLATIONS是否有錯誤。
建立遠端 PDB 時,請從第3,EX
節中選擇所需的子句:SQL> 使用 '/home/oracle/pdbname.xml'
建立可插式資料庫 pdbname Source_file_name_convert = ('+SOURCE_DATA','/home/oracle/datafiles')
移動
File_name_convert = ('/home/oracle/datafiles','+TARGET_DATA');
描述: XML 檔根據 ASM 磁碟指定 PDB 資料檔位置,但實際檔駐留在“/home/oracle”位置。Source_file_name_convert子句有助於替換檔名模式並指向實際的源位置。file_name_convert子句有助於將數據從操作系統位置移動到 ASM 磁碟。
4.將 12c-noncdb 遷移至 PDB:
請參閱此 白皮書。
資料庫:Oracle 12cR1
作者:
Mahesh Reddy
問題:
如何將 PDB 插入 Oracle12c 容器資料庫?
溶液:
您可以通過以下方式建立可插式資料庫:
- 使用種子創建新的 PDB。
- 複製現有 PDB 以建立新 PDB
- 將拔下的 PDB 插入 CDB
- 從 12c 非 CDB 建立新的 PDB
使用 SEED 資料庫建立 PDB。此方法將與種子關聯的檔複製到新位置,並關聯到新的 PDB。您可以使用建立可插式資料庫語句,從 SEED 輕鬆建立新的 PDB。
您可以指定以下子句,以不同的方式從 SEED 建立新的 PDB:
- 儲存:您可以指定儲存限制
- 預設表空間:它創建一個小檔表空間,並將其分配給非系統使用者。
- path_prefix :它指定絕對路徑
- file_name_convert:它指定源檔中 PDB 檔的新位置。
- 臨時檔重用:它指定,從目標位置重用臨時檔。
- 角色:要授予PDB_DBA角色的預定義 Oracle 角色。
注意: 僅當從種子創建 PDB 時,才能使用 ROLES 子句。
範例:
1 SQL> 建立可插拔資料庫 PDBNAME 管理員使用者 PDBUSR 由 PASSWORD 標識;
上述語句使用本地使用者 PDBUSR 建立 PDB。 此語句將PDB_DBA角色授予 PDB 管理員“pdbusr”,並將指定的預定義 Oracle 角色授予 PDB 中的本地PDB_DBA角色。
例:
2 SQL> 建立可插拔資料庫 PDBNAME 管理員使用者 pdbusr 由 PASSWORD 識別 儲存 (最大大小 5G) 預設表空間 使用者 數據檔 '+DATA_NEW' 大小 100M 自動擴展 path_prefix = '+DATA_NEW' file_name_convert = ('+DATA', 'DATA_NEW');
上述語句創建大小有限的 pdb,它指定屬於 PDB 的所有表空間不得超過 5 GB,並在新位置為非管理員使用者創建預設表空間使用者是“+DATA_NEW”。
2. 透過複製現有 PDB 來建立新 PDB:
克隆生產資料庫是用於開發和測試對應用程式和相關環境的更改的常用技術。在生產環境中安裝新的作業系統版本、儲存軟體或應用程式版本之前,需要使用生產資料進行全面測試。這通常是通過將生產資料庫複製到測試環境來實現的。
在 Oracle12c 中,您可以使用 CREATE PLUGGABLE DATABASE 語句來克隆 PDB。此語句克隆源 PDB,並將克隆插入同一 CDB 或遠端 CDB。
創建可插式資料庫語句將與源 PDB 關聯的檔複製到新位置,並將這些檔與目標 PDB 相關聯。
不同類型的條款:
1. 使用無子句
克隆本地 PDB 無子句意味著沒有結構更改。
例如:sql> 從 pdb 創建可插拔資料庫clone_pdb;
在這裡,克隆 pdb 已在預設磁碟群組中以相同的大小和相同的角色建立不同的 GUID。
2. 使用 PATH_PREFIX 和 FILE_NAME_CONVERT 子句
克隆本地 PDB 需要 FILE_NAME_CONVERT 子句來指定複製檔的目標位置。在此範例中,檔從一個位置複製到另一個位置。
例如: > SQL 從 PDB 建立可插拔資料庫clone_pdb PATH_PREFIX= '+BRLOAD' FILE_NAME_CONVERT = ('+DATA', '+BRLOAD');
在這裡,源 pdb 數據檔存儲在“+DATA”磁碟組中,克隆 pdb 數據檔放置在不同的磁碟組“+BRLOAD”中,您可以使用FILE_NAME_CONVERT子句將數據檔位置從“+DATA”轉換為“+BRLOAD”。
3. 使用 FILE_NAME_CONVERT 和 STORAGE 子句複製本機 PDB。
必須強制執行 PDB 的儲存限制。因此,存儲子句是必需的。具體而言,屬於 PDB 的所有表空間不得超過 2 GB,並且 PDB 會話在共用臨時表空間中使用的存儲不得超過 100 MB。
例如:SQL> 從 PDB FILE_NAME_CONVERT=(“+數據”、“+BRLOAD”)存儲(最大大小 2G MAX_SHARED_TEMP_SIZE 100M)創建可插式資料庫clone_pdb;
複製本機 PDB 的步驟:
本節說明如何複製本機 PDB。克隆本地 PDB 後,源和目標 PDB 位於同一 CDB 中。
您可以使用下列步驟複製 PDB:
步驟 1:檢查源 pdb 狀態
SQL>顯示 pdbs;
CON_ID CON_NAME 開放模式受限
2 PDB$SEED 唯讀
無 3 PDB1 讀寫 要克隆的
PDB 無須為唯讀狀態,如果存在讀寫模式,請使用以下命令
變更狀態 SQL> 變更可插拔資料庫 pdbname 關閉實例=全部;
此處,instances=all 表示關閉所有節點中的 PDB。
Sql> alter pluggable database pdb open read read instance = all;
SQL>顯示 pdbs;
CON_ID CON_NAME 開啟模式受限制
2 PDB$SEED 唯讀無
3 PDB1 唯讀無
步驟 2: 從第 2 節中提到的不同克隆子句中選擇所需選項,
SQL> 從 pdb1 創建可插拔資料庫clone_pdb1;(無條款)
其中 pdb1 是來源,clone_pdb1是目標
步驟 3:複製的 PDB 將處於掛接模式,且其狀態為「NEW」。您可以通過查詢CDB_PDBS或DBA_PDBS檢視的「狀態」列來查看 PDB 的狀態。
之後,使用 alter pluggable database 變更 pdb 的狀態,然後您需要在所有節點的 tnsnames.ora 中新增 PDB 服務。
3.拔下 PDB 並將其插入 CDB:
拔下 PDB:
拔下 PDB 會取消 PDB 與 CDB 的關聯。拔除會對 PDB 的資料檔案進行一些變更,以記錄 PDB 已成功拔除。由於它仍然是 CDB 的一部分,因此拔出的 PDB 會包含在整個 CDB 的 RMAN 備份中。這樣的備份提供一種便捷的方式來歸檔拔除的 PDB,以備日後需要使用。PDB 必須先闔上,才能拔下。從CDB拔下PDB時,拔下的PDB處於掛載模式
拔下PDB的步驟:
檢查源 pdb 狀態
SQL>顯示 pdbs;
CON_ID CON_NAME 開啟模式受限制
2 PDB$SEED 唯讀
3 PDB1 讀取寫入否
如果來源 PDB 處於讀取寫入模式,您應將 PDB 狀態變更為掛接狀態。
SQL> alter pluggable database PDBNAME close instances=all;
連線至根容器並執行以下命令
SQL> alter pluggable database pdb1 unplug into /u01/app/oracle/pdb1.xml';
此處會在 /u01/app/oracle 目錄中
建立 pdb1.xml 中繼資料檔案使用 XML 元數據檔,您可以將 PDB 插入 3.1。 相同的 CDB
3.2. 遠端CDB
您可以使用創建可插拔資料庫將 PDB 插入 CDB,並使用不同的子句指定 XML 檔。
不同類型的子句:
使用 source_file_name_convert,沒有 copy 子句:
SOURCE_FILE_NAME_CONVERT:XML 檔不顯示當前檔位置。那時候我們可以使用這個子句。XML 指示檔位於 +DATA 中,但實際檔位於 +DATA1 中。
Source_file_name_convert = ('+DATA','+DATA1')
+DATA= string1 +DATA1=string2
在這裡,string2 檔名模式取代了 string1 檔名模式。
2. 使用path_prefix、複製file_name_convert子句:
PATH_PREFIX:此子句用於指定數據檔位置的絕對路徑。
FILE_NAME_CONVERT:當檔不在目標位置,然後想要在 PDB 創建期間複製或移動它們時,可以使用此子句。
3. 使用FILE_NAME_CONVERT,MOVE,SOURCE_FILE_NAME_CONVERT子句:
Xml檔不描述當前檔的位置,因此需要源檔名轉換。示例:xml 檔指示檔位於“+數據”中,但檔位於“/u01/app”中。
需要轉換檔案名稱,才能將檔案從「/u01/app」移至「+DATA1」。
3.1. 將拔下的 PDB 插入同一個 CDB:
PDB 必須先從 CDB 中移除,然後才能重新插入同一個 CDB。
使用具有不同方法的 XML 檔創建可插入資料庫。
a) NOCOPY 方法
SQL>使用 '/u01/app/oracle/pdb1.xml' nocopy 建立可插拔資料庫 pdb1;
b) 複製方法
SQL> 使用 '/u01/app/oracle/pdb1.xml' copy file_name_convert=('+DATA/pdb1/','+DATA1'/pdb1/') 建立可插拔資料庫 pdb1;
C) 作為克隆移動方法
SQL> 使用“/U01/APP/ORACLE / pdb1.xml”移動創建可插拔資料庫 PDB1 作為克隆file_name_convert=(“+DATA/pdb1/','+DATA1'/pdb1/');
3.2.將拔下的 PDB 插入遠端 CDB:
先決條件:
A) 它們必須具有相同的位元組格式。
B) 它們必須安裝同一組資料庫選項。
資料來源:
1. 拔下 PDB 後,使用 ASMCMD cp 或 DATA_FILE_NAME_CONVERT 命令,將 XML 傳輸至目標位置,同時將資料庫檔案從磁碟群組 (+DATA) 傳輸到作業系統位置 (/home/)。
2. 將資料庫檔案從來源傳輸到目標作業系統位置。
目標:
從原始程式碼獲取 XML 和資料庫檔後,可以使用DBMS_PDB。CHECK_PLUG_COMPATIBILITY用於確定拔出的 PDB 是否與目標 CDB 相容的功能。
如果輸出「是」,則表示 PDB 相容。
如果輸出「否」,則表示 PDB 不相容,請檢查檢視PDB_PLUG_IN_VIOLATIONS是否有錯誤。
建立遠端 PDB 時,請從第3,EX
節中選擇所需的子句:SQL> 使用 '/home/oracle/pdbname.xml'
建立可插式資料庫 pdbname Source_file_name_convert = ('+SOURCE_DATA','/home/oracle/datafiles')
移動
File_name_convert = ('/home/oracle/datafiles','+TARGET_DATA');
描述: XML 檔根據 ASM 磁碟指定 PDB 資料檔位置,但實際檔駐留在“/home/oracle”位置。Source_file_name_convert子句有助於替換檔名模式並指向實際的源位置。file_name_convert子句有助於將數據從操作系統位置移動到 ASM 磁碟。
4.將 12c-noncdb 遷移至 PDB:
請參閱此 白皮書。
Article Properties
Article Number: 000146520
Article Type: Solution
Last Modified: 21 Feb 2021
Version: 3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.