一 、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的更多相关文章

  1. Oracle redo与undo

    Undo and redo Oracle最重要的两部分数据,undo 与redo,redo(重做信息)是oracle在线(或归档)重做日志文件中记录的信息,可以利用redo重放事务信息,undo(撤销 ...

  2. Oracle redo与undo 第一弹

      一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日 ...

  3. Oracle redo与undo浅析

    http://liwenshui322.iteye.com/blog/1488949 一. 什么是redo(用于前滚数据) redo也就是重做日志文件(redo log file),Oracle维护着 ...

  4. Oracle redo与undo 第二弹

    首先看一下undo与redo的字面意思:   undo:撤销,也就是取消之前的操作.   redo:重做,重新执行一遍之前的操作. 什么是REDO REDO记录transaction logs,分为o ...

  5. 【转】ORACLE的REDO与UNDO

    一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...

  6. Oracle 9 - redo和undo

    1.redo redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术. 每个Oracle数据库至少有2个在线重做日志组,循环写. 只有INSERT ...

  7. Oracle redo/undo 原理理解

    一. 什么是redo(用于重做数据) redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文 ...

  8. Oracle redo undo

    通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...

  9. [Oracle] Redo&Undo梳理

    Oracle Redo&undo Oracle中的redo和undo是关键技术的核心, 诸如实例恢复, 介质恢复, DataGuard, 闪回机制等都是给予redo和undo的, 所以很有必要 ...

随机推荐

  1. hdu 5174 Ferries Wheel

    摩天轮是一个环,周围围绕着一些缆车.每个缆车按顺序编号为1,2,3...K-1,K1,2,3...K−1,K而且每个缆车也拥有一个唯一的值且保证A[i-1] < A[i] < A[i+1] ...

  2. 单层gmetad高可用

    虽然gmetad可以多层,但是层层gmetad都需要开启gweb,还是很麻烦.如果只是担心一个gmetad不安全,可以做成gmetad高可用,但是我还不知道有没有想hadoop ha那样自动failo ...

  3. 华为USG6350防洪墙SNMP最简单功能配置

    https://www.cnblogs.com/vincent-liang/p/7785089.html

  4. iOS: 将OC的NSMutableArray转为Swift的Array

    一句话: YourSwiftObject convertedArray = your_MutableArray as NSArray as [YourSwiftObject]

  5. 《python源代码剖析》笔记 Python虚拟机框架

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1. Python虚拟机会从编译得到的PyCodeObject对象中依次读入每一条字节码指令 ...

  6. jenkins+jmeter+ant+jmeter在Jenkins上报告

    1.jmeter+ant 参考 http://www.cnblogs.com/dieyaxianju/p/8268802.html 2.在jenkins上配置 3.执行成功 4.配置报告  参考 下载 ...

  7. vbs socket

    http://www.bathome.net/thread-423-1-1.html http://files.cnblogs.com/files/developer-ios/mswinsck.ocx ...

  8. HTML导航 - 点击更改背景

    步骤一: 在须要添加效果的<li>标签中添加onclick事件:<li onclick="setcurrent(this)"> 步骤二: 加入JS代码: f ...

  9. LeetCode 234 Palindrome Linked List(回文链表)(*)(?)

    翻译 给定一个单链表,确定它是否是回文的. 跟进: 你能够在O(n)时间和O(1)空间下完毕它吗? 原文 Given a singly linked list, determine if it is ...

  10. pat1013:数素数

    https://www.patest.cn/contests/pat-b-practise/1013 #include "stdio.h" #include "math. ...