SCN学习初解_转载

SCN的意义?system change number

SCN其实就是时间 通过函数转换成数字

select dbms_flashback.get_system_change_number,
SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;

 

每个日志文件头部有2个SCN:frist scn 、next scn 记录的当前日志文件的scn号的范围。

select * from v$log;

 三种状态:active inactive current

日志文件active状态表示有脏块还未写入。不能被覆盖。

2、常见的SCN
 控制文件
  系统SCN(关闭数据库的时候更新)
   select checkpoint_change# from v$database;
  文件SCN(日志文件active状态改变的时候更新)
   select name,checkpoint_change# from v$datafile;
  结束SCN
   select name,last_change# from v$datafile;

同时在数据文件的头部还存在一个开始scn号

  开始SCN
   select name,checkpoint_change# from v$datafile_header;


一般情况下   系统SCN、  文件SCN、开始scn号是一致的

oracle实例恢复的时候只需要redolog


  检查点信息
   增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,
   而只是每3秒由CKPT进程去更新控制文件中的low cache rba信息,也就是检查点的位置。
并且记录checkpoint发生的时间点,
   
   从控制文件记录的scn跑到redolog的current的scn


col  LowRBA for a20

col  OndiskRBA for a20



select CPDRT,CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "LowRBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "OndiskRBA",

CPODS,CPODT,CPHBT from x$kcccp;


     CPDRT LowRBA               OndiskRBA            CPODS            CPODT                     CPHBT
---------- -------------------- -------------------- ---------------- -------------------- ----------
        40 15.75155.0           15.75250.0           2412258          07/25/2013 06:51:09   821622757
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0
         0 0.0.0                0.0.0                0                                              0

8 rows selected.


CPDRT列是检查点队列中的脏块数目.
CPODS列是on disk rba的scn
CPODT列是on disk rba的时间戳
CPHBT列是心跳

 数据文件头部
  开始SCN
   select name,checkpoint_change# from v$datafile_header;
 数据块头部ITL事务槽
 日志change vector中
  跑日志(提升数据文件SCN)、空跑日志(数据块的scn号比日志文件的scn号大)
 回滚段事务表中
 日志文件头部
  firstscn、nextscn==记录的日志范围
 select recid,sequence#,first_change#,next_change# from v$log_history where rownum<6;
 select * from v$log;
 select * from v$archived_log
3、实例恢复
 只是需要redo log:active、current
 实例恢复判断依据
 演示SCN变化

如果发生了实例崩溃,只需要在日志文件中找到检查点位置(low cache rba),
从此处开始应用所有的重做日志文件,就完成了前滚操作。
实例崩溃后,再次启动数据库,oracle会到控制文件中读取low cache rba,这就是检查点位置。
从此处开始应用重做日志,应用到on disk rba的位置。
on disk rba是磁盘中重做日志文件的最后一条重做记录的rba。

4、

SQL> show parameter fast_start_mttr_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fast_start_mttr_target               integer     0

SQL>

实例恢复的时候需要日志。前滚的时间取决了跑日志的时间。fast_start_mttr_target(单位秒)表示前滚时间的控制(通过加大dbwr写频率)



相关操作

select checkpoint_change# from v$database

alter system checkpoint

alter system switch logfile

select name,checkpoint_change# from v$datafile


select name,checkpoint_change# from v$datafile_header

select * from v$log;

begin
for i in 1..10000 loop
insert into  t2 values(1,'xkj');
commit;
end loop;
end;
select * from t2

alter system flush buffer_cache
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值