什么是重做?

  • 重做日志包含所有数据产生的历史改变记录.
  • 重做日志目的是保证数据的安全,如果数据因特殊原因没有写到磁盘上,可以通过重做日志来恢复.
  • 重做日志文件通常用于
    • 恢复(实例恢复和介质恢复)
    • 日志挖掘:可以通过oracle工具分析日志里面的内容
    • 流:通过分析redo,从redo获取实时数据,应用到远程数据库.
  • 数据库产生的每个改动:
    • 写入数据库缓存之前,先写入重做日志--内存
    • 写入数据文件之前先写入日志文件 ----数据文件
  • 内存里操作,重做日志的内存区叫Redo buffer
  • 当提交后,日志缓冲被刷入重做文件里.还有其他触发条件.

redo有2种

  • undo产生的redo
  • 数据块本身产生的redo

REDO写入过程

轮询

从上到下写,第一个写完后就写第二个,第二个写完后就写第三个,第三个写满后就写第一个.如果第一个还没有写入到磁盘,此时会报错,不允许覆盖.

REDO-- 日志组

DISK A DISK B

GROUP1里面有2个redo log,作用是冗余.

LGWR同时写入一个组的log文件中..

REDO 和归档

LGWR写第一个组,第一个组写完后,就会写第二个组,然后ARCH会将第一个组归档成一个归档文件.

REDO 的内容 ---改变向量

redo的内容并不是sql语句,他是放的一些改变,叫改变向量.

数据库恢复的时候并不是执行sql语句,而是一个物理的过程,是一个数据块的覆盖.是改变数据块的大小.

创建2个表

SQL> create table t1(x char(1));

SQL> create table t2(x char(2000));

获取当前会话的sid:

SQL> select distinct sid from v$mystat;

开三个会话

SQL> select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.statistic#=b.statistic# and b.name='redo size' and sid in(475,241);

表1中字符长度为1,表2长度为2000,所以他产生的redo更多一些.

所以redo里面保存的不是sql语句,也不是插入的数据值,只是和数据块改变的大小/多少有关系.

SQL> create table t1(x char(1));

Table created.

SQL> create table t2(x char(2000));

Table created.

SQL> select distinct sid from v$mystat;

SID

----------

475

SQL> select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.statistic#=b.statistic# and b.name='redo size' and sid in(475,241);

SID NAME

---------- ----------------------------------------------------------------

VALUE

----------

241 redo size

0

475 redo size

27280

SQL> col name for a10;

SQL> select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.statistic#=b.statistic# and b.name='redo size' and sid in(475,241);

SID NAME            VALUE

---------- ---------- ----------

241 redo size           0

475 redo size       27280

这两个会哈的redo size不一样大,我们quit退出,重新进一下

SQL> select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.statistic#=b.statistic# and b.name='redo size' and sid in(475,241);

SID NAME            VALUE

---------- ---------- ----------

241 redo size           0

475 redo size           0

同时向2张表插入数据

SQL> select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.statistic#=b.statistic# and b.name='redo size' and sid in(475,241);

SID NAME            VALUE

---------- ---------- ----------

241 redo size        2668

475 redo size         672

REDO --undo 的redo

Oracle重做日志REDO的更多相关文章

  1. Oracle重做日志恢复数据模拟实验

    一 系统环境: 1.操作系统:oracle Linux 5.6 2.数据库: Oracle 11g 二 Oracle 重做日志的作用: [模拟介质恢复] 1. 关闭数据库归档模式: [oracle@t ...

  2. Oracle重做日志和日志挖掘

    重做日志-Redo log 首先给出参考资料: 1.Oracle官网-Managing the Redo Log 为什么需要redo log 内存中数据修改后,不必立即更新到磁盘---效率 由日志完成 ...

  3. Oracle重做日志文件

    一.联机重做日志的规划管理 1.联机重做日志 记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等) 提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复) 可以被分组管理  11 ...

  4. 初识oracle重做日志文件

    转自 http://blog.csdn.net/indexman/article/details/7746948 以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习 ...

  5. ORACLE重做日志小结

    1.Redo log特点 重做日志以磁盘I/O为主,将数据库操作记录到日志文件.(磁盘I\O性能有可能成为瓶颈) 每个实例只有一个活动的LGWR(log writer)进程,至少有两个日志组(logf ...

  6. oracle重做日志文件硬盘坏掉解决方法

    rman target/ list backup; list backup summary; 删除数据库数据文件夹下的log日志,例如/u01/app/oracle/oradata/ORCL下的所有后 ...

  7. oracle 重做日志

    原创转载请注明出处 重做日志:记录数据库数据的变化(DDL,DML) 重做日志组:由一个或者多个完全一样的重做日志文件组成,如果一个日志组有多个日志文件,后台进程LGWR会把事务变化写到同一个日志组的 ...

  8. 修改oracle重做日志文件大小

    创建3个新的日志组 SQL> ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo06.log') SIZ ...

  9. ORACLE - 管理重做日志文件

    ORACLE重做日志文件用于在数据库崩溃等情况下用于恢复数据,默认情况下为三个文件redo01.log/redo02.log/redo03.log,文件组循环使用,在录入与更新操作比较多的应用中,日志 ...

随机推荐

  1. struts和spring整合

    开发流程: 1)引jar包,可以在配置工程中设置用户libarary,然后直接引入.如果在web-inf/lib没有用户导入的lib文件,可以参考问题0的解决方案 需要的是struts_core,sp ...

  2. Vivado的helloword程序:硬件工程部分

    硬件平台:ZedBoard软件平台:vivado2013.3 本示例通过综合.实现,生成比特流,发送到SDK实现.启动vivado并且创建一个项目根据提示操作一步步创建新项目的时候记得选择RTL Pr ...

  3. Xcode5下使用纯代码构建简单的HelloWorld程序

    转自:http://blog.csdn.net/developerxyf/article/details/12874935 新发布的Xcode5在使用模板创建工程的时候取消了以往是否要选择storyb ...

  4. Java中数据库连接的一些方法资料汇总

    Java中Connection方法笔记 http://www.cnblogs.com/bincoding/p/6554954.html ResultSet详解(转)  https://www.cnbl ...

  5. 使用Nginx Lua实现redis高性能http接口

    使用Nginx Lua实现redis高性能http接口 时间 -- :: 峰云就她了 原文 http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http ...

  6. 李洪强iOS开发之iOS好文章收集

    李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...

  7. 说说Java中的资源文件的读取

    最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 Resour ...

  8. Linux之IO Redirection

    一.引言 前几天使用一个linux下的内存检测工具valgrind,想要把检测的结果重定向到文件,结果总是没有任何内容,最后才发现是重定向的原因,它输出的信息是输出到stderr的,所以我使用 > ...

  9. JSON学习【转自慕课网】

    视频网址 从慕课网视频里的PPT截图过来的,因为是用PHP讲的,而且后面讲的一般,所以只截取了前两节课的基础内容,其实只看一下第一张PPT就可以了.

  10. 【复习】密码算法——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...