Oracle 12c PDB迁移及ORA

最近迁移一台测试环境,准备整合到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

一遍感叹粗心大意,一边赶紧运行脚本。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bd06f2ee21ed7aae92de73ef031563f8.html