知识大全 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回滚段学习 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文详细介绍了Oracle
Oracle回滚段空间回收步骤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 是谁偷偷的用了那么
Oracle回滚表空间丢失或损坏处理方法(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 问
Oracle回滚表空间丢失或损坏处理方法(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! I
Oracle回滚段的概念,用法和规划及问题的解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
回滚段管理一直是ORACLE数据库管理的一个难题本文通过实例介绍ORACLE回滚段的概念用法和规划及问题的解决 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位
Oracle数据库中事物与回滚的一点研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Ora
Oracle8i中回滚段使用和ORA-1555 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 回
知识大全 oracle的事务与锁与回滚段block的一点研究
SQL> createtableaasselectrownuma fromtwhererownum<; 表已创建 SQL
系统环境操作系统Windows 数据库 OracleiR()forNT企业版 安装路径C:\\ORACLE 测试方法打开多个SQL*Plus窗口一些做一些需要回滚的操作如insertde