【Oracle】redo与undo
一 、redo(重做信息)
是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务。Oracle中记录这些信息的文件叫做redo log file(重做日志文件)。
redo log file分online和archived两类,它们都用于恢复。
当实例失败时,Oracle会使用在线重做日志将系统恰好恢复到故障前的提交点;如果磁盘等介质失败时,Oracle会使用归档重做日志以及在线重做日志将该磁盘上的数据备份恢复到适当的时间点。当一张表被truncate或者表中的数据被误删除时,如果我们已经提交,此时可以利用在线和归档重做日志文件把它恢复到这个“意外”发生前的时间点。
每个Oracle数据库都至少有两个在线重做日志,每个组中至少有一个成员,这些在线重做日志组以循环方式使用,当满足如下任一条件时,数据会被LGWR进程写入到redo log file中:1. redo log buffer 满1/3;2.每3s;3.redo log buffer满1M;4.commit。
二 、undo(撤销信息)
是Oracle在undo段中记录的信息,用于取消或回滚事务。
从概念上讲,undo正好与redo相反。当我们对数据执行修改时,数据库会生成undo信息,以便回到更改前的状态。Oracle也是通过这一特性实现对版本已经读一致性。当我们执行的事务或语句由于某种原因失败了,或者如果你用一条rollback语句请求回滚,此时Oracle就会运用undo信息将数据放回到修改前的样子。redo用于在失败时重放事务(即恢复事务),undo则用于取消一条或一组语句。与redo不同,undo在数据库内部存储在一组特殊的段中,这个段叫做undo段(undo
segment)。
rollback segment和undo segment一般认为是同义词。
值得注意的是:当运用undo信息执行恢复时并不是将数据库物理的恢复到执行语句或者事务之前的样子,而是逻辑的恢复到原来的样子,所有的修改都会被逻辑的取消。当Oracle在做回滚的时候会做与之前操作相反的操作,如执行insert,那么数据库在恢复时会相应的执行delete;当执行delete,那么数据库在恢复时会执行insert;对于每个update操作,数据库会执行一个相反的update以完成回滚。
三 、redo和undo的协作
对undo的修改也会产生redo。在Oracle中遵循“日志先行”的原则,即当被修改的数据库刷出到磁盘之前,DBWR进程会要求LGWR进程将redo信息刷新输出。我们在执行系统恢复时,redo信息会先将数据库“前滚”到故障时间点,然后再利用“前滚”产生的undo,“回滚”掉没有提交的信息。
四 、redo log file 管理
1. 增加日志组
SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/drz/redo04a.log','/u01/app/oracle/oradata/drz/redo04b.log') size 50 M;
Database altered.
2. 增加日志组成员
SQL> alter database add logfile member '/u01/app/oracle/oradata/drz/redo04c.log' to group 4;
Database altered.
3. 删除日志组成员
SQL> alter database drop logfile member '/u01/app/oracle/oradata/drz/redo04c.log';
Database altered.
SQL> !rm -rf /u01/app/oracle/oradata/drz/redo04b.log
4.重命名日志文件
重命名之前必须确保操作系统中已经存在文件。
①关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
②操作系统上重命名文件
[oracle@lgr ~]$ mv /u01/app/oracle/oradata/drz/redo04b.log /u01/app/oracle/oradata/drz/redo04d.log
③启动数据库到mount状态,重命名控制文件中的日志组成员
SQL> startup mount;
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 536874104 bytes
Database Buffers 285212672 bytes
Redo Buffers 6586368 bytes
Database mounted.
SQL> alter database rename file '/u01/app/oracle/oradata/drz/redo04b.log' to '/u01/app/oracle/oradata/drz/redo04d.log';
Database altered.
④重启数据库
SQL> alter database open;
Database altered.
SQL> select group#,member from v$logfile order by 1;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/drz/redo01.log
2 /u01/app/oracle/oradata/drz/redo02.log
3 /u01/app/oracle/oradata/drz/redo03.log
4 /u01/app/oracle/oradata/drz/redo04d.log
4 /u01/app/oracle/oradata/drz/redo04a.log
⑤.最后,不要忘记备份控制文件
SQL> alter database backup controlfile to trace;
Database altered.
【Oracle】redo与undo的更多相关文章
- Oracle redo与undo
Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...
- Oracle redo与undo 第一弹
一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日 ...
- Oracle redo与undo浅析
http://liwenshui322.iteye.com/blog/1488949 一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着 ...
- Oracle redo与undo 第二弹
首先看一下undo与redo的字面意思: undo:撤销,也就是取消之前的操作. redo:重做,重新执行一遍之前的操作. 什么是REDO REDO记录transaction logs,分为o ...
- 【转】ORACLE的REDO与UNDO
一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...
- Oracle 9 - redo和undo
1.redo redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术. 每个Oracle数据库至少有2个在线重做日志组,循环写. 只有INSERT ...
- Oracle redo/undo 原理理解
一. 什么是redo(用于重做数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文 ...
- Oracle redo undo
通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...
- [Oracle] Redo&Undo梳理
Oracle Redo&undo Oracle中的redo和undo是关键技术的核心, 诸如实例恢复, 介质恢复, DataGuard, 闪回机制等都是给予redo和undo的, 所以很有必要 ...
随机推荐
- LeetCode 712. Minimum ASCII Delete Sum for Two Strings
Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...
- 00106_UDP通信
1.DatagramPacket (1)JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据: (2)在创建发送端和接收端的Dat ...
- controller 接口写法
import org.apache.commons.io.IOUtils; import javax.servlet.ServletInputStream; @RequestMapping(" ...
- NFS 文件系统的搭建
教程: 一.配置linux内核: 进入打过at91补丁的linux2.6内核源代码树的根目录 make menuconfig进入内核配置程序. 1. Networking ---> Netwo ...
- SecureCRT的设置和美化
一 . SecureCRT 7.1 的 安装 http://liufei888.blog.51cto.com/2625545/1306231 1.下载注册机SecureCRT.v.6.7. ...
- 51Nod——T 1113 矩阵快速幂
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 ...
- iOS中UITextView的操作技巧
刚才看了一篇textView实现placeholder的文章,有兴趣的同学们能够看下:__biz=MzA3NzM0NzkxMQ==&mid=211846438&idx=1&sn ...
- Android面试准备 第一天 第2-4例
參考:http://blog.csdn.net/lmj623565791/article/details/24015867. .假设有个100M大的文件.须要上传至server中.而serverfor ...
- BZOJ 1492 货币兑换 cdq分治或平衡树维护凸包
题意:链接 方法:cdq分治或平衡树维护凸包 解析: 这道题我拒绝写平衡树的题解,我仅仅想说splay不要写挂,insert边界条件不要忘.del点的时候不要脑抽d错.有想写平衡树的去看140142或 ...
- Facebook图搜索unicorn
unicorn(独角兽),里面类似于倒排链的reference list,相应的term如friend:2,表示entity 2的朋友列表,整个结构是shard的,上面是top aggregator, ...