先要弄清楚alter database open resetlogs是什么意思,为什么要用resetlogs打开数据库,这个命令发出后oracle都做了什么?


alter database open resetlogs是要打开数据时,重置重做日志,即将重做日志的sequence置零,为什么要重置重做日志呢?


不完全恢复后,原来的online redo log里面包含的是未做恢复前的数据,而这些数据对于恢复后的数据库不再有效,所以数据库会要求在Open之前先对online redo log的sequence置零。


Resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用Resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容。


Oracle把这个数据库逻辑生存期称为incarnation

每次使用resetlogs打开数据库,就会使incarnation + 1,也就是产生一个新的incarnation;

如果想要恢复到之前incarnation的scn/time,就需要先恢复到之前的incarnation;


对于上面的案例,具体就是先要

Reset database to incarnation 2;

再做不完全恢复试试