暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 12C 将非CDB转换为PDB数据库

原创 章芋文 2019-12-19
2547

非CDB 数据库的名称是:12cNonPDB

  1. 要将 non-CDB 转换为 PDB,必须彻底关闭数据库:
. oraenv --将环境变量设置为 12cNonPDB sqlplus / as sysdba sql> shutdown immediate
复制
  1. 彻底关闭数据库后,以只读模式打开它:
sql> startup open read only
复制
  1. 描述数据库并生成 xml 文件:
BEGIN DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/12cNonPDB.xml'); END; /
复制
  1. 关闭数据库:
sql> shutdown immediate
复制
  1. 在目标 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 来修复。

  1. 连接到目标 CDB:
. oraen --将环境变量设置为 ACDB sqlplus / as sysdba
复制
  1. 创建 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/');
复制
  1. 切换到 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
复制
  1. 启动 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 的字符集。

参考:

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?
How to Convert Non-CDB to PDB Database in 12c - Testcase (Doc ID 2012448.1)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论