|
这一点很不爽啊,辛辛苦苦写了半天,结果提交时网络出问题,导致提交失败,返回到前一页,写的东西全没了,痛苦ing
又得重写。
新建datafile丢失,无备份,要恢复,得满足下面两个条件:
1.有建datafile以来的全部归档
2.能从早于datafile创建的某个时间点开始恢复,应用日志
第一个条件很容易理解,没有日志那一切免谈
第二个条件,从早于datafile创建的时间开始应用日志,才能读到创建datafile的记录,才能在控制文件中恢复出该dataflie的记录,才能使用alter database create datafile的重新创建该datafile的物理文件
对于使用创建datafile之前的备份的控制文件来做恢复的情况,明显可以符合上面的条件,所以之前我的实验可以成功
对于重建控制文件的情况,如果重建控制文件的脚本中的所有datafile是处于一致的状态的,那么重建控制文件后,是不会从早于丢失的datafile的某个时间点开始恢复的,也就应用不到创建datafile的日志,控制文件中也就恢复不出该datafile的记录,这个时间数据库可以open,但是该datafile丢失
为什么有些人重建控制文件也可以恢复?
1.非正常关闭数据库
2.创建datafile的日志还在online redo logfile中,在最后一次checkpoint之前
这种情况下,重建控制文件后,recover database until time,由于非正常关闭数据库,可以从最后一次checkpoint处开始应用日志,就能读取到创建datafile的记录,从而在controlfile中恢复出该datafile的记录,后面也就能alter database create datafile了
猜想另外一种情况:
如果有其他某个datafile早于丢失的这个datafile的创建时间点的备份文件,且有这个备份后的所有归档,将这个datafilerestore,然后重建控制文件后,再来recover database until time到创建datafile后的一个时间点,应该可以从备份的那个datafile的时间开始恢复,应当是可以恢复成功的。
等下午有空试验一下上面的猜想,有结果再贴出来 |
|