日期:2014-05-16  浏览次数:20508 次

Oracle 不完全恢复命令在数据文件头修改了什么?
有时候我们经常碰到如下情况:
SQL> alter database open read only;
alter database open read only
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/lank/db/lank/system01.dbf'
ORA-01207: file is more recent than control file - old control file
但是检查数据文件头和控制文件头的checkpoint change和checkpoint count均处于一致状态,只有当发起如下命令之后,但并没有真正应用日志,数据库才能open read only。
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 10999733114786 generated at 10/13/2011 09:30:32 needed for
thread 1
ORA-00289: suggestion : /lank/db/arch/1_45_762364447.dbf
ORA-00280: change 10999733114786 for thread 1 is in sequence #45


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL> alter database open read only;

Database altered.

经过后台跟踪发现,原来数据库要read only或者read write打开,仅仅数据文件头和控制文件头的checkpoint change和checkpoint count均处于一致状态是不够的,还需要控制文件头的control seq大于数据文件头的control seq,而until cancel正是将数据文件头的control seq重置为0。
ub4 kccfhcsq                          @40       0x00000001
另外Oracle还会在数据文件头144号位置修改,但此处可以忽略
ub4 kcvfhrts                             @144      0x2d901a51
重置为0之后,需要注意的是数据库需要resetlogs打开了。