背景:用rman异机恢复源库为11g,新库为19c。恢复完数据库,打开时报错。
问题原因:若原数据库的版本是11.2.0.1,但是目标数据库的版本是19.0.0.3 (在12.2版本中,客户在升级数据库字典时必须使用并行升级实用程序catctl.pl来调用catupgrd.sql。不再支持直接从sQL*Plus运行catupgrd.sql。)
SQL> alter database open;
alter database open
* ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
Process ID: 24442
Session ID: 919 Serial number: 35136
解决方法:通过upgrade的方式打开数据库,如下
[oracle@ekptest001 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期三 12月 24 15:31:16 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 6797832192 bytes
Fixed Size 2241264 bytes
Variable Size 3523218704 bytes
Database Buffers 3254779904 bytes
Redo Buffers 17592320 bytes
数据库装载完毕。
SQL> alter database open upgrade;
数据库已更改。
SQL> select status from v$Instance;
STATUS
------------------------------------
OPEN MIGRATE
目标库版本在12以上用该命令:
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
目标库版本在12以下用该命令:
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql;
其中运行catupgrd.sql脚本花费了1小时45分钟,完成后会自动启动数据库。
原理:当数据库的升级的时候,数据库内部的基表进行了变更,数据字典也需要进行相应的更新,运行catupgrd.sql会进行相应对象更新;