2021-08-24
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗? 如果丢失的话,还能恢复么?
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗?
如果丢失的话,还能恢复么?
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗?
如果丢失的话,还能恢复么?
1、当有Commit complete.或Rollback complete返回时,
A、都表示当前事务对应的在Log Buffer的数据,以写入到Redo Log日志中了;
B、已commit的事务,是不丢失的;
C、未commit的事务,会被回退的;
2、【异常宕机,只要Redo Log没有损坏,是不会丢失数据的】;
3、若出现Redo Log损坏,也存在3种情况:
1种:丢失Inactive的Redo Log–不会丢失数据
A、代表Redo Log所对应Buffer Cache中的脏块,都已经写到数据文件中。所以Inactive出现问题时,数据不会丢失;
B、恢复时,只需要重建对应Redo Log即可;
2种: 丢失Active的Redo Log–可能丢失数据
A、Active代表Redo Log所对应的Buffer Cache中的脏块,还没有完全写入到数据文件中;
B、【可能丢失数据】
3种: 丢失Current的Redo Log–可能丢失数据
A、当前Redo Log,所对应的的Buffer Cache数据可能还没有被刷新。
B、因为我们是先写Redo Log日志文件,在写Buufer Cache中的数据到数据文件中;
C、【可能丢失数据】
4、ACTIVE、CURRENT状态的Redo LOG日志组损坏,通常意味着【数据丢失、一致性丢失】
5、恢复
1种:利用备份恢复;
2种:无备份,可以参考以下方式
A、ACTIVE、CURRENT状态的Redo LOG的日志损坏是无法打开数据库的;
B、通过通过以下两个添加隐含参数,结合不完全恢复,将数据库打开
*._allow_resetlogs_corruption=true
*._allow_error_simulation=true
C、数据库打开后,若数据量比较小,建议再通过导出、导入的方式来,完成整个库的恢复;
D、当然:实际操恢复过程中,要清楚每一步操作及预期结果,不要做无把握的尝试。否则真的无法恢复!
6、预防
A、Redo Log的冗余机制是必选要有的;
B、每个日志日志组,每个2个成员,每个成员在不同磁盘。因为2个成员的内容是相同的,只要其中1个没有损坏,都能够避免;
评论
有用 2
墨值悬赏