今天qq群上一位xd问关于alter database open read only的问题,自己也做了一个测试。
他描述的情况如下:
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
数据库装载完毕。
SQL> recover database;
完成介质恢复。
SQL> alter database open read only;
alter database open read only
*
第 1 行出现错误:
ORA-16005: 数据库需要恢复
为何还提示恢复呢?
我的测试如下:
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
数据库装载完毕。
SQL> recover database;
完成介质恢复。
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
749283
SQL> select nvl(last_change#,0),checkpoint_change# from v$datafile;
NVL(LAST_CHANGE#,0) CHECKPOINT_CHANGE#
------------------- ------------------
749454 749454
749454 749454
749454 749454
749454 749454
749454 749454
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
749454
749454
749454
749454
749454
可以看到系统检查点和数据文件检查点不一致,虽然recover database 把datafile的last_change#由null恢复成了checkpoint_change#,但 open read only 是会立即系统scn,datafile scn,datafile header scn冻结,由于本身三者就不一致,所以不能open read only。
下面是另外一段测试:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
数据库装载完毕。
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
769749
769749
769749
769749
769749
SQL> select nvl(last_change#,0),checkpoint_change# from v$datafile;
NVL(LAST_CHANGE#,0) CHECKPOINT_CHANGE#
------------------- ------------------
769749 769749
769749 769749
769749 769749
769749 769749
769749 769749
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
769749
SQL> alter database open read only;
数据库已更改。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9700459/viewspace-624288/,如需转载,请注明出处,否则将追究法律责任。