暂无图片
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗? 如果丢失的话,还能恢复么?
我来答
分享
黑色VF
2021-08-24
Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗? 如果丢失的话,还能恢复么?

Oracle log buffer里没写日志的数据在异常宕机的时候会丢失吗?
如果丢失的话,还能恢复么?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
每日一步

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
暂无图片
许玉冲

wal

暂无图片 评论
暂无图片 有用 0
wbcnestor

buffer在内存中肯定会丢失。

丢了没关系,提交了的会写入redo log,没提交会回滚。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏