測試案例 - 12c 版本,如何將 Non-CDB 轉換爲 PDB 數據庫 (Doc ID 2610618.1)

適用於:

Oracle Database - Enterprise Edition - 版本 12.1.0.1 到 12.1.0.2 [發行版 12.1]
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
本文檔所含信息適用於所有平臺

目標

將 Non-CDB 數據庫轉換爲 PDB 的步驟。

解決方案

步驟如下:

在此測試案例中:

Non-CDB 數據庫的名稱是:12cNonPDB

1. 要將 non-CDB 轉換爲 PDB,必須徹底關閉數據庫:
. oraenv
將環境變量設置爲 12cNonPDB
sqlplus / as sysdba
sql> shutdown immediate


2. 徹底關閉數據庫後,以只讀模式打開它:
sql> startup open read only

3. 描述數據庫並生成 xml 文件:
BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/12cNonPDB.xml');
END;
/

4. 關閉數據庫:

sql> shutdown immediate

5. 在目標 CDB 環境中執行下面的操作來檢查兼容性:

SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/12cNonPDB.xml')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/

如果有報錯,可以通過 cdb 數據庫的 PDB_PLUG_IN_VIOLATIONS 查看。

SQL> col cause for a20
SQL> col name for a20
SQL> col message for a35 word_wrapped
SQL> select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='<noncdb database name>';

如果出現以下錯誤:

ERROR PSU bundle patch 1 (PSU Patch 12345): Installed in the CDB but not in the PDB.

ERROR PSU bundle patch 1 (PSU Patch 12345): Installed in the PDB but not in the CDB.

您需要參考 Note 1935365.1 來修復。

6. 連接到目標 CDB:

. oraen
將環境變量設置爲 ACDB
sqlplus / as sysdba

7. 創建 pluggable database:
CREATE PLUGGABLE DATABASE APDB USING '/tmp/12cNonPDB.xml'
COPY
FILE_NAME_CONVERT = ('/u01/app/oracle/12c/oradata/12cNonPDB/', '/u01/app/oracle/oradata/12c/ACDB/APDB/');

8. 切換到 PDB container 並運行 "$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql"

sql> ALTER SESSION SET CONTAINER=APDB;

sql> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

9. 啓動 PDB 並檢查 open mode:

ALTER PLUGGABLE DATABASE OPEN;

SELECT name, open_mode FROM v$pdbs;

NAME OPEN_MODE
------------------------------ ----------
APDB READ WRITE

1 row selected.

SQL>

源數據字符集(NLS_CHARACTERSET)需要與目標環境 CDB 的 NLS_CHARACTERSET 相同,或者源數據庫字符集是目標環境 CDB 的 NLS_CHARACTERSET 的二進制子集,源和目標的 NLS_NCHAR_CHARACTERSET 需要相同。

如果 PDB 是 Unicode 字符集,建議創建字符集爲 AL32UTF8 的 CDB。請注意,我們無法使用 DMU 遷移 CDB 的字符集。


參考:

12c Multitenant Container Databases (CDB) and Pluggable Databases (PDB) Character set restrictions / ORA-65116/65119: incompatible database/national character set ( Character set mismatch: PDB character set CDB character set ) (Doc ID 1968706.1)

Changing Or Choosing the Database Character Set ( NLS_CHARACTERSET ) (Doc ID 225912.1) [Section E]

 

參考

NOTE:1935365.1 - Multitenant Unplug/Plug Best Practices
NOTE:1564657.1 - How to migrate an existing pre-12c database (non-CDB) to 12c CDB database?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章