场景:通过rman做一个数据库的异机恢复,进行到最关键的一步,打开数据库的时候报了错误,详细如下
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 resetlogs;
alter database open resetlogs;
*
第 1 行出现错误:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
进程 ID: 3650
会话 ID: 292 序列号: 5
问题原因:进行数据库报错的时候才突然想起犯了一个错误原数据库的版本是11.2.0.1,但是目标数据库的版本是11.2.0.3,所以在打开的时候就提示了0RA-39700。
解决方法:通过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
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql;
其中运行catupgrd.sql脚本花费了30分钟,完成后会自动关闭数据库,就可以正常打开了。
原理:当数据库的升级的时候,数据库内部的基表进行了变更,数据字典也需要进行相应的更新,运行catupgrd.sql会进行相应对象更新;