最近迁移一台测试环境,准备整合到12c的PDB,常规的思路是用Datapump导出导入,对于数据较大的环境来说这个时间会比较长,为此自己也尝试先升级这个测试库,然后加入到CDB中去。
升级的过程就不多说了,其实对于大多数常规的业务来说,本身不是难点。
把升级后的NON-CDB加入到CDB中,基本是下面的思路,先把数据启动到只读模式,然后到处一个配置文件,加载到CDB的重要地方就是使用这个配置文件。先做检查。
sqlplus / as sysdba SQL> select name, CDB from v$database; NAME CDB --------- --- TESTDB YES SET SERVEROUTPUT ON DECLARE compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/tmp/ncdb12c_actvdb.xml', pdb_name => 'NCDB12C') WHEN TRUE THEN 'YES' ELSE 'NO' END; BEGIN DBMS_OUTPUT.PUT_LINE(compatible); END; / NO PL/SQL procedure successfully completed.仔细一看这个地方竟然输出了NO,对于这种情况需要查看下面的数据字典来得到更多的信息。
select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where;比如会有下面的信息:
NAME CAUSE TYPE MESSAGE STATUS ---------- ------------------------------ --------- -------------------------------------------------- --------- NCDB12C Parameter WARNING CDB parameter optimizer_index_caching mismatch: PENDING Previous 90 Current 0 NCDB12C Parameter WARNING CDB parameter pga_aggregate_target mismatch: PENDING Previous 788M Current 6440M NCDB12C SQL patch error ERROR (PSU bundle patch 160719 (Database Patch Set PENDING Update : 12.1.0.2.160719 (23054246)): APPLY SUCCESS): with status in the PDB.警告的信息没有大的影响,关键就在于ERROR
但是这个地方我就比较奇怪了,使用opatch lsinventory查看,补丁是有的。而且其他的数据库已经都部署多套了。这个为什么就抛出了这个问题呢。
为了尽快修复这个问题,我打开生成的配置文件,把SQL Patch的这一段信息删除了,然后再次运行上面的检查脚本就没有问题了。
SQL> @a.sql
YES
PL/SQL procedure successfully completed.
基本的准备工作做完了,也算是有惊又险。
我们创建PDB,注意文件路径的映射。
SQL> CREATE PLUGGABLE DATABASE actvdb using '/tmp/ncdb12c_actvdb.xml' copy file_name_convert=('/U01/app/Oracle/oradata/actvdb','/home/U01/app/oracle/oradata/testdb/pdb/actvdb'); Pluggable database created.这个过程时间会持续稍长一些,不过因为是在本地,所以影响不大,创建好之后,尝试open这个PDB,发现不大对劲。
SQL> alter pluggable database actvdb open;
Warning: PDB altered with errors.
检查这个PDB的状态,发现是受限的会话连接。
SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 。。。 8 ACTVDB READ WRITE YES突然醒悟,还有一个重要的脚本没跑,那就是
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
一遍感叹粗心大意,一边赶紧运行脚本。