如果存在PDB模式需求,可以把非CDB转换为PDB,操作步骤如下。
1.创建新的CDB数据库
2.非CDB只读打开
shutdown immediate
startup open read only
3.非CDB生成xml文件
begin
dbms_pdb.describe(pdb_descr_file => '/tmp/orcldg.xml');
end;
/
4.关闭非CDB数据库
shutdown immediate
为了保持元数据文件和数据文件的一致性,不要再次打开数据库,否则会报错:
ORA-65139: Mismatch between XML metadata file and data file。
5.目标CDB检查兼容性
set serveroutput on;
declare
compatible constant varchar2(3) := case dbms_pdb.check_plug_compatibility(pdb_descr_file => '/tmp/orcldg.xml')
when true then 'yes'
else 'no'
end;
begin
dbms_output.put_line(compatible);
end;
/
可以通过 cdb 数据库的 PDB_PLUG_IN_VIOLATIONS 视图查看是否有错误,根据相关提示进行处理:
col cause for a20
col name for a20
col message for a35 word_wrapped
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创建PDB
create pluggable database pdb1 using '/tmp/orcldg.xml' copy file_name_convert = ('/oradata/orcldg/','/oradata/orcl/pdb1/');
非CDB路径在前,PDB路径在后。
7.切换到PDB,执行noncdb_to_pdb.sql脚本
alter session set container=apdb;
@$oracle_home/rdbms/admin/noncdb_to_pdb.sql
8.打开PDB并检查状态
SQL> alter pluggable database open;
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
---- ----------
PDB1 READ WRITE
参考文档:How to Convert Non-CDB to PDB Database on same local host machine in 12c - Testcase (Doc ID 2012448.1)