ITPub博客

首页 > 数据库 > Oracle > oracle备份恢复--redo log中为何有uncommit数据

oracle备份恢复--redo log中为何有uncommit数据

原创 Oracle 作者:Junrs 时间:2016-05-08 17:41:16 0 删除 编辑
为了防止日渐衰退的记忆力以及到处乱写的笔记,最近一直在研究基础知识,看到盖哥恢复这一章,尚有许多不明确地方,怕以后忘记,做个总结,方便以后查漏补缺。具体编写原因,为何online redo log中为何会有uncommited的数据。只是个人的一些理解及总结,有错误之处欢迎请指出,共同学习。 

环境:linux 5.4+oracle 11g

一、备份恢复
1、备份类型:逻辑备份与物理备份
2、逻辑备份:
即通过导出的方法对数据库进行备份。对于故障点与备份点间的数据恢复无能为力。
3、物理类型:热备与冷备。
冷备:是指在数据库关闭的情况下(mount状态下是否也可以),对数据库进行全库拷贝。此时数据库处于一致的状态。恢复的时候,需要将全部文件都恢复即可。
热备:
条件:数据库处于open状态且为归档模式.。
验证过在不归档,mount模式下进行alter tablespace users begin backup,会提示数据库尚未open。
二、为何需要前滚和回滚
首先,commit的时候做了哪些操作。
①、系统为commit生成一个scn。
②、LGWR将在redo log buffer中的redo log entries连同此时的scn写入到online redo log。
官方文档:The log writer(LGWR) process writes remaining redo log entries in the redo log buffer to the online redo log and writes the transaction scn to the online redo log.
③、释放表与行的锁
④、删除savepoints
 
所以在commit的时候,LGWR会将redo log buffer 中的剩余的redo log entries全部写入到online redo log中,也即说,此刻重做日志中就包含了commit和uncommit的数据。所以在数据库发生crash的时候,在恢复的时候为什么要进行前滚与回滚,因为online redo log中包含了uncommit的数据,这部分数据是不需要 写入到数据文件中的,所以要通过回滚将其去掉。 

在commit的操作后,undo segment 的状态会变为inactive,故可在回退中知道哪些数据未提交需回退。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30824085/viewspace-2095930/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2016-01-29

  • 博文量
    6
  • 访问量
    17115