【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的, 所以很有必要 ...
随机推荐
- 亚马逊免费服务器搭建Discuz!论坛过程(四)
上述命令还可能因缺少包引发其他错误: 如果出错则安装对应的包即可. 以下供参考: yum install libxml2 yum install libxml2-devel -y yum instal ...
- 举枪消灭"烂代码"的实战案例
前言 之前我写过一篇如何少写PHP "烂"代码 https://segmentfault.com/a/11...感觉很多新人对此不太理解.今天以打卡功能为例,去讲解其中的奥秘.那篇 ...
- python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影
我们在之前的文章谈到了高效爬虫 在 python 中 多线程下的 GIL 锁会让多线程显得有点鸡肋 特别是在 CPU 密集型的代码下 多线程被 GIL 锁搞得效率不高 特别是对于多核的 CPU 来说 ...
- 第十二节:pandas缺失数据处理
1.isnull():检查是否含有确实数据 2.fillna():填充缺失数据 3.dropna() :删除缺失值 4.replace():替换值
- GlobalSign 域名型 SSL 证书
GlobalSign 域名型 SSL 证书,支持通配符型,只验证域名所有权,属于DV 域名验证级SSL证书,无须递交书面审查资料,网上申请便捷有效率.提供40位/56位/128位,最高256位自适 ...
- 【Codeforces 158A】Next Round
[链接] 我是链接,点我呀:) [题意] 让你找到排名的前k名,并列的话,如果分数大于0那么就算晋级 问你最后有多少人可以晋级. [题解] 按照题意模拟就好, 先按照a[max] = a[k]的规则找 ...
- Hibernate基于注解annotation的配置
Annotation在框架中是越来越受欢迎了,因为annotation的配置比起XML的配置来说方便了很多,不需要大量的XML来书写,方便简单了很多,只要几个annotation的配置,就可以完成我们 ...
- [poj1698]Alice's Chance[网络流]
[转]原文:http://blog.csdn.net/wangjian8006/article/details/7926040 题目大意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固 ...
- nyoj_187_快速查找素数_201312042102
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 ...
- 移动端 javascript 计算html font-size
直接上代码 (function(doc, win) { var docEl = doc.documentElement, resizeEvt ...