标签:没有 undo 提交 png 一个 重做日志 ora style 物理
什么是重做?
redo有2种
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
|
标签:没有 undo 提交 png 一个 重做日志 ora style 物理
原文地址:http://www.cnblogs.com/scentpath/p/redo.html