您的位置:首页 > 数据库 > Oracle

SCN学习初解_转载

2013-07-17 16:25 155 查看
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

[b]col  OndiskRBA for a20
[/b]

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库