- C:/Documents and Settings/Administrator>sqlplus /nolog
- SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 6月 30 14:21:20 2011
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
- SQL> conn / as sysdba
- 已连接。
- SQL> startup mount;
- ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
- SQL> shutdown immediate;
- ORA-01109: 数据库未打开
- 已经卸载数据库。
- ORACLE 例程已经关闭。
重读日志文件的恢复必须在SQL PLUS上面进行
[c-sharp] view plaincopyprint?
- SQL> startup mount;
- ORACLE 例程已经启动。
- Total System Global Area 535662592 bytes
- Fixed Size 1334380 bytes
- Variable Size 331350932 bytes
- Database Buffers 197132288 bytes
- Redo Buffers 5844992 bytes
- 数据库装载完毕。
[c-sharp] view plaincopyprint?
- SQL> recover database until cancel;
- 完成介质恢复。
[c-sharp] view plaincopyprint?
- SQL> alter database open resetlogs;
- 数据库已更改。
在SQLPLUS进行了 ALTER DATABASE OPEN RESETLOGS操作后,因为日志文件已经被修改了,所以需要做一个重新的全备份,不然仍沿用原来的备份文件进行恢复会有问题的
缺省状态:alter database open(no resetlogs).而数据库打开时候,会比较控制文件和数据文件的scn是否一致,一致才会打开,否则不打开。
而在执行了数据库的不完全恢复后,在打开数据库之前,这时候一般情况下,数据文件的scn是小于控制文件的scn的,因此需要以resetlogs打开数据库,目的就是reset scn,这样两者的scn一致,就可以打开,否则打不开的。执行了resetlogs命令之后,数据库的操作是:将没归档的日志都归档;然后将联机日志组都置为新的,序号从0开始。
问题解决:
先要弄清楚alterdatabase open resetlogs是什么意思,为什么要用resetlogs打开数据库,这个命令发出后oracle都做了什么?
alterdatabase open resetlogs是要打开数据时,重置重做日志,即将重做日志的sequence置零,为什么要重置重做日志呢?
不完全恢复后,原来的onlineredo log里面包含的是未做恢复前的数据,而这些数据对于恢复后的数据库不再有效,所以数据库会要求在Open之前先对online redo log的sequence置零。
Resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用Resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容。