当前位置:操作系统 > Unix/Linux >>

redolog switch会发生完全检查点还是增量检查点

redolog switch会发生完全检查点还是增量检查点
 
    网上有很多资料都没有说清楚发生log switch的时候,到底完全检查点还是增量检查点。有人说是完全检查点,也有人说是增
量检查点。其实如果你深入了解完全检查点和增量检查点的的区别,就应该知道log switch到底是增量检查点还是完全检查点。
 
     在8i以前,log switch的时候oracle确实是会做完全检查点;但从8i开始,oracle在log switch的时候做的是增量检查点,但
从严格意义上来说并不能完全算是增量检查点,因为在log switch的时候,不仅会像增量检查点那样更新控制文件,而且还会像完
全检查点那样会更新数据文件头。
 
    下面我们来一起来做做测试:证明了在log switch的时候,发生的既不是完全检查点,也不是严格意义上的增量检查点。
 
一、我们首先来验证在log switch的时候,发生的不是完全检查点:
 
查几个跟日志切换检查点相关的参数
idle> @?/rdbms/admin/show_para
Enter value for p: _dbwr_scan_interval
old  12:     AND upper(i.ksppinm) LIKE upper('%&p%')
new  12:     AND upper(i.ksppinm) LIKE upper('%_dbwr_scan_interval%')
P_NAME                                   P_DESCRIPTION                                      P_VALUE                
ISDEFAULT ISMODIFIED ISADJ
---------------------------------------- -------------------------------------------------- 
------------------------------ --------- ---------- -----
_dbwr_scan_interval                      dbwriter scan interval                             300                    
TRUE      FALSE       FALSE
idle> @?/rdbms/admin/show_para
Enter value for p: _disable_selftune_checkpointing
old  12:     AND upper(i.ksppinm) LIKE upper('%&p%')
new  12:     AND upper(i.ksppinm) LIKE upper('%_disable_selftune_checkpointing%')
P_NAME                                   P_DESCRIPTION                                      P_VALUE                
ISDEFAULT ISMODIFIED ISADJ
---------------------------------------- -------------------------------------------------- 
------------------------------ --------- ---------- -----
_disable_selftune_checkpointing          Disable self-tune checkpointing                    FALSE                  
TRUE      FALSE       FALSE
idle> show parameter log_checkpoint_timeout
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_checkpoint_timeout               integer     1800
没修改参数之前:
idle>  select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE
idle> alter system switch logfile;
idle> !date
Sun May 12 19:43:20 CST 2013
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 ACTIVE
         2 CURRENT
         3 INACTIVE
idle> !date
Sun May 12 19:49:25 CST 2013
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 INACTIVE
1号日志组从ACTIVE变成INACTIVE大约要5分钟左右
 
修改参数可以命alter system switch logfile;时redo log file的状态一直是active(保持一天):
_dbwr_scan_interval=24*3600
log_checkpoint_timeout=24*3600
_disable_selftune_checkpointing=TRUE
idle> alter system set "_dbwr_scan_interval"=86400;
System altered.
idle> alter system set log_checkpoint_timeout=86400;
System altered.
idle> alter system set "_disable_selftune_checkpointing"=true;
System altered.
哈哈。。。可以观察一下是不是一直是ACTIVE
idle> !date
Sun May 12 19:55:54 CST 2013
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT
idle> ALTER SYSTEM SWITCH LOGFILE;
System altered.
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 ACTIVE
 
 
执行完上述switch logfile操作后等待12小时,然后再次执行上述查询语句:
idle> !date
Sun May 13 7:56:58 CST 2013
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 ACTIVE
从结果里我们可以看到现在redo log group 3还是处于active状态,我现在的这个库是测试库只有我一个人在用,所以很空闲,如
果switch logfile的时候发生的是full checkpoint,则当我等待24小时后再次查询v$log的时候redo log group 3必然是处于
inactive状态:
即现在我们已经证明了在log switch的时候,发生的不是完全检查点。
idle> !date
Sun May 13 20:56:58 CST 2013
idle> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE
哈哈。。。你可以试试,那些参数的威力。。牛B的一比。。。
现在我们来证明在log switch的时候,发生的不是严格意义上的增量检查点。增量检查点只会更新control file,不会更新
datafile header,知道这个那就很好验证了,利用BBED恢复神器:
hr@OCP>  select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,