Oracle 数据库 打不开 oracle数据库打不开

数据库打不开,碰到日志丢失丢失,如果没有快速恢复的多路复用备份,那么可能就需要进行不完全恢复。
当进行不完全恢复时,就需要使用open resetlogs命令。

那么,什么是”不完全恢复“呢?
 
对于完全恢复:

  • 数据库正在运行,你执行了shutdown immediate命令 
    --> 在这种情况下,所有文件都会有一个相同的scn(数据文件,redo和控制文件),在重新打开库时,数据库将以一个一致的状态开启(Oracle会去确认在每个文件中的所有内部标记并予以确认)。
  • 如果你执行的命令是shutdown abort 
    --> 那么你的数据文件在关库时会还保持在模糊不清的状态下,你的数据文件、控制文件和redo的scn都不是一致的,因此当你启动数据库时会需要进行”crash recovery“即崩溃恢复处理,这会将所有文件恢复的一致的SCN后再运行以正常状态打开数据库。
  • 如果你执行restore和recover命令时 
    --> 如果数据文件被恢复、使用当前的控制文件和redo日志进行恢复,你会注意到(数据文件的SCN值低,而控制文件和redo日志则SCN较高,或者之间的SCN相同)在这种情况下需要进行recover操作经文件都恢复到一致状态下才能正常开库。

对于不完全恢复:
举个简单例子,如果你的恢复并非要恢复到最新状态,即recover到某个scn(或某个时间点,某个sequence)之前,那么你就需要open resetlogs,因为你需要将redo logs置为新的日志文件并以重置开始。


关于resetlogs释义:

  • 对当前在线重做日志进行归档(或是如果发现文件损坏或讹误则,则归档到受损之前的最新的redo记录),之后清理online redo logs内容,并将日志的sequence重置为1。
  • RMAN命令中的ALTER DATABASE OPEN RESETLOGS等同于SQL命令行下执行语句ALTER DATABASE OPEN RESETLOGS。
  • 不过在使用recovery catalog时,同样的命令在RMAN下发出后会隐式地在数据库打开后执行RESET DATABASE以赋予catalog中当前新的incarnation。
  • 如果是在SQL命令行下执行ALTER DATABASE OPEN RESETLOGS,那么你就需要手工执行RESET DATABASE命令来进行RMAN新incarnation设置了。

ALTER DATABASE OPEN RESETLOGS使用例子:

从备份中恢复控制文件,mount数据库后,进行recovery。最后resetlogs开库。

STARTUP FORCE NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RECOVER DEVICE TYPE DISK DATABASE;
ALTER DATABASE OPEN RESETLOGS;


这里有个经常会被讨论和思考的问题:
是否我们在恢复控制文件时也需要resetlogs(假设你有全部redo logs, 归档日志和数据文件也都在)?

  • 为什么认为需要进行open resetlogs?
  • 如果以NORESELOGS来create controlfile并打开database
  • 如果所有redo logs,归档日志和数据文件都在,那么恢复可以做完全恢复, 因此就没有必要一定要进行不完全恢复了。

猜你喜欢

转载自blog.csdn.net/liu_maclean/article/details/81506470