Oracle 12c PDB迁移及ORA(2)

运行的过程中查看PDB的状态是MIGRATE

SQL> SQL> show pdbs     CON_ID CON_NAME                      OPEN MODE  RESTRICTED ---------- ------------------------------ ---------- ----------         2 PDB$SEED                      READ ONLY  NO         。。。         8 ACTVDB                        MIGRATE    YES

但是让我有些意外的是这个脚本执行失败了,而且抛出了ORA-00600的错误。

SQL> DECLARE   2    threads pls_integer := &&1;   3  BEGIN   4    utl_recomp.recomp_parallel(threads);   5  END;   6  / DECLARE * ERROR at line 1: ORA-04045: errors during recompilation/revalidation of SYS.DBMS_QOPATCH ORA-00600: internal error code, arguments: [kql_tab_diana:new dep], [0x4C7382A68], [0x7F97536569A0], [1], [2], [], [], [], [], [], [], [] ORA-06512: at "SYS.DBMS_UTILITY", line 1294 ORA-06512: at line 1

因为也不大确定这个的影响范围,查看PDB的状态,发现是受限的会话连接。

SQL> show pdbs;     CON_ID CON_NAME                      OPEN MODE  RESTRICTED ---------- ------------------------------ ---------- ----------         2 PDB$SEED                      READ ONLY  NO         。。。         8 ACTVDB                        READ WRITE YES

尝试反复启停,还是同样的错误,眼看升级迁移的时间越来越紧,尽管是测试环境,还是不能麻痹大意。

对于这个问题,真是让我一头雾水,查看MOS也没有找到直接的解答,而查看OTN的问答,发现有些朋友也确实碰到了。有人找到了根上,那就是编译一个包的时候会抛出ORA-00600的错误。

我试了下,确实如此。

SQL> ALTER PACKAGE "SYS"."DBMS_QOPATCH" COMPILE BODY REUSE SETTINGS ; ALTER PACKAGE "SYS"."DBMS_QOPATCH" COMPILE BODY REUSE SETTINGS * ERROR at line 1: ORA-00600: internal error code, arguments: [kql_tab_diana:new dep], [0x149CF37C0], [0x7F9BEA79DBD0], [1], [2], [], [], [], [], [], [], []

有些人尝试重新创建编译这个包,我在本地尝试,发现还是抛出了ORA-00600的错误。

SQL> @?/rdbms/admin/prvtqopi.plb Session altered. CREATE OR REPLACE PACKAGE BODY DBMS_QOPATCH wrapped * ERROR at line 1: ORA-00600: internal error code, arguments: [kql_tab_diana:new dep], [0x149CF37C0], [0x7F9BEAB683B8], [1], [2], [], [], [], [], [], [], []

这个问题越发严峻,而我似乎只能找到一个有些相关的bug

Bug 20981713 : ORA-600 [KQL_TAB_DIANA:NEW DEP] DURING NONCDB_TO_PDB.SQL
过了一会儿之后,我再次尝试停库,然后重新启动,发现竟然可以了。

当然我的内心是忐忑的,我深深知道很可能这个库再停了之后就无法正常open了。

但是应用的连接能够正常进来,也算是躲过了一劫,而马上我就发现这个问题不是一般的纠结。因为我碰到了另外一个棘手的问题,那就是主库虽然可以正常open了,忽略了里面的警告,但是备库的这个PDB却偏偏无法正常open到read only状态。

对于灾备而言,这是极为严重,而且不合格的。但是问题的原因是什么呢。

为了进一步实验,我在备库开启了snapshot Standby,这样备库可读可写,就能够模拟测试了,但是我发现问题是接二连三。

马上发现这个PDB在open的时候报出了其它的ORA-00600错误。

Errors in file /home/U01/app/oracle/diag/rdbms/testdb2/testdb/trace/testdb_p005_24365.trc  (incident=140313) (PDBNAME=ACTVDB): ORA-00600: internal error code, arguments: [kqlobjlod-no-result-from-proc$], [1403], [888], [], [], [], [], [], [], [], [], [] Incident details in: /home/U01/app/oracle/diag/rdbms/testdb2/testdb/incident/incdir_140313/testdb_p005_24365_i140313.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details.

查看MOS 找到了文章,但是还是没有解决的方法。

ORA-600 [kqlobjlod-no-result-from-proc$] (Doc ID 1613402.1)

在查看了不少的文章之后,隐隐发现是在这个Patch上。

因为我在Snapshot Standby中测试了下面的命令,发现似乎容器的Patch没有生效。

$  ./datapatch -verbose .... Installing patches... Patch installation complete.  Total patches installed: 7

所以在做了一个艰难的决定之后,我决定在主库重新给这个PDB部署Patch,然后运行noncdb_to_pdb.sql

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

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