SCN

SCN是唯一、单向增长的,除非重建数据库,否则不会归零。

oracle在很多地方都有记录SCN:

1 controlfile

(可以使用:alter system set events='immediate trace name controlf level 10';命令dump出控制文件)

***************************************************************************
DATABASE ENTRY
***************************************************************************
 (blkno = 0x1, size = 192, max = 1, in-use = 1, last-recid= 0)
 DF Version: creation=0x9200000 compatible=0x8000000, Date  04/21/2006 08:46:01
 DB Name "ORA92"
 Database flags = 0x00404001
 Controlfile Creation Timestamp  04/21/2006 08:46:02
 Incmplt recovery scn: 0x0000.00000000
 Resetlogs scn: 0x0000.0002e872 Resetlogs Timestamp  04/21/2006 08:46:03
 Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp  05/12/2002 16:16:56
 Redo Version: creation=0x9200000 compatable=0x9200000
 #Data files = 14, #Online files = 14
 Database checkpoint: Thread=1 scn: 0x0000.3c1234fc    系统最后一次checkpoint的SCN
 Threads: #Enabled=1, #Open=1, Head=1, Tail=1
 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000

...

***************************************************************************
DATA FILE RECORDS
***************************************************************************
 (blkno = 0x6, size = 180, max = 100, in-use = 15, last-recid= 160)
DATA FILE #1:
  (name #8) E:/ORACLE/ORADATA/ORA92/SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=8 tail=8 dup=1
 tablespace 0, index=6 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:232 scn: 0x0000.3c1234fc 07/03/2006 14:36:58 记录数据文件头的checkpoint SCN 也叫start SCN
 Stop scn: 0xffff.ffffffff 07/03/2006 12:33:20  数据库打开时为无穷大(infinity),关闭后修改为start SCN 
 Creation Checkpointed at scn:  0x0000.0000000b 05/12/2002 16:17:58
 thread:0 rba:(0x0.0.0)

***************************************************************************
LOG FILE RECORDS 日志文件包含两个SCN(高低)表示记录的redo 信息的范围
***************************************************************************
 (blkno = 0x5, size = 72, max = 50, in-use = 3, last-recid= 3)
LOG FILE #1:
  (name #3) E:/ORACLE/ORADATA/ORA92/REDO01.LOG
 Thread 1 redo log links: forward: 2 backward: 0
 siz: 0x32000 seq: 0x00000050 hws: 0x5 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1
 Archive links: fwrd: 0 back: 3 Prev scn: 0x0000.3c0d7dfe
 Low scn: 0x0000.3c12040a 07/03/2006 11:16:01
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00 next scn为无穷大表示是当前日志文件

2 datafile

 数据文件的头部也记录着checkpoint SCN ,当发生checkpoint时(我们可以使用alter system checkpoint;强制系统checkpoint),检查点通知 DBWR 写数据文件,写完后ckpt更新控制文件和数据文件头,当DBWR 写 数据块的时候若发现数据块的相关RDBA (位于日志文件的位置) 的 log block 还没有被写入日志文件,则在dbwr写块之前必须通知llgwr把log buffer 中日志写入日志文件。

SQL> select to_char(checkpoint_change#,'xxxxxxxx') from v$datafile;

TO_CHAR(C
---------
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7
 3c1522c7

在数据库启动时,比较数据文件头的checkpoint scn(也叫start scn) 和控制文件记录的关于此数据文件的checkpoint scn ,若前者大于后者,表示控制文件“老”,反之,数据文件“老”,若两者相等再比较start scn 和 stop scn 是否一致,不一致则该表明数据文件需要恢复 。

3 block

data block 里面的SCN是当 block 被更改的时候的 SCN ,不同block的scn也不相同。

块中包含 block scn 和 ITL 中的commit SCN,block SCN 又在块头和块位都有,若不一致意味着block损坏。而ITL 中的 commit SCN 则跟 consistent gets and delay block cleanout 有关

4 redo log

记录redo 对应SCN  用于恢复 ,没什么好讲的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值