知识大全 Oracle中为什么会产生回滚与前退

Posted 文件

篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中为什么会产生回滚与前退相关的知识,希望对你有一定的参考价值。

Oracle中为什么会产生回滚与前退  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle概念问题 假如数据没有提交 但是却被dbwn进程写入了数据文件 会怎么样呢?

  案例分析

  首先说明的是dbwn写脏数据跟mit提交没有关系!

  在一个transaction发生的过程中 online redo log首先记录transaction中修改的数据块相关信息 修改的数据块会被缓存在database buffer cache中 由于database buffer cache写满或者checkpoint等等条件触发dbwn进程 会导致这些缓存的数据块写入数据文件 但此时可能该transaction仍然还没有提交 所以在数据文件中 可能会有mited 和 unmited 的数据块 而原有的数据块镜像会存放在undo segment

  IXDBA NET社区论坛

  然而 dbwn写脏数据时不管这个要写的transaction是否提交

  也没有必要去管

  这样就发生了所谓的已经提交的数据 但是还没有写入数据文件的现象

  还有一种情况 数据没有提交 但是已经被写入数据文件 此时发生回退 撤销没有提交的数据

  那么 引发Oracle前滚与回退的根本原因就是什么呢?

  根本原因是mit后写redo buffer和触发lgwr写 redo buffer的区别

  事务在执行完毕后 随即会被写入redo buffer和undo中 同时在redo buffer和undo中对该事务都有一个是否提交的标记 两者的默认状态都是active的 即没有提交时刻处于激活状态

  mit操作执行时刻把此前的所有事务操作全部写入redo log file mit成功后 redo buffer信息全部写入redo file 同时修改两者中的事务提交标识为inactive 表示此前事务已经递交

  oracle的前滚和回退根据就是依据事务是否提交而进行的

  在触发lgwr进程后 oracle同样把此前的redo buffer信息写入redo file 但是与mit触发写日志不同的是 redo file本身对lgwr写日志操作不记录任何信息标识 lgwr写到那里就是那里 就算此时掉电也无妨 redo file就记录到掉电时刻的信息

  lgwr是一个Oracle后台执行的进程 具体的日志写操作都有oracle去控制 这对于oracle来说是透明的 因此不用在redo file中写入任何标记信息 这也是正常的

  mit操作是唯一一个可以前台操作与oracle后台通信的指令 因此当加入这个操作以后 oracle本身必须要了解各个事务的读写状况 那么怎么了解整个状况 在redo以及undo中加入是否递交的标识 对于已经提交的操作 但是还没有写入数据文件 那么就要前滚 相反 对于没有提交 执行回退!

  于是 Oracle崩溃恢复步骤如下

  首先rolling forward 前滚 由于oracle failure sga中的内存信息丢失了 但是online redo log中还是存储了transaction信息 包括mited or unmited data 可能这些修改信息并没有被oracle正确的来处理 包含两种情况 已经提交的还没有写入数据文件 或者没有提交的却被写入了数据文件 针对已经提交的还没有写入数据文件就要发生前滚 在前滚过程中 smon会根据online redo log中的记录来完成对datafile的修改 保证已经提交的数据已经写入数据文件

  接下来 前滚结束后 数据库正常open 此时用户可以正常连接 可以访问已经recover的mited data 但是对于那些属于unrecoverable transaction的unmited data 会被oracle 加锁 是不可以访问的

cha138/Article/program/Oracle/201311/16619

相关参考

知识大全 Oracle回滚段学习

Oracle回滚段学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文详细介绍了Oracle

知识大全 Oracle回滚段空间回收步骤

Oracle回滚段空间回收步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  是谁偷偷的用了那么

知识大全 Oracle回滚表空间丢失或损坏处理方法(1)

Oracle回滚表空间丢失或损坏处理方法(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问

知识大全 Oracle回滚表空间丢失或损坏处理方法(2)

Oracle回滚表空间丢失或损坏处理方法(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  I

知识大全 Oracle回滚段的概念,用法和规划及问题的解决

Oracle回滚段的概念,用法和规划及问题的解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 回滚段问题

  回滚段管理一直是ORACLE数据库管理的一个难题本文通过实例介绍ORACLE回滚段的概念用法和规划及问题的解决      回滚段概述      回滚段用于存放数据修改之前的值(包括数据修改之前的位

知识大全 Oracle数据库中事物与回滚的一点研究

Oracle数据库中事物与回滚的一点研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Ora

知识大全 Oracle8i中回滚段使用和ORA-1555

Oracle8i中回滚段使用和ORA-1555  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  回

知识大全 oracle的事务与锁与回滚段block的一点研究

  SQL> createtableaasselectrownuma fromtwhererownum<;     表已创建     SQL

知识大全 查看哪些session正在使用哪些回滚段

  系统环境操作系统Windows  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    测试方法打开多个SQL*Plus窗口一些做一些需要回滚的操作如insertde