测试案例 - 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?

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