您好,欢迎访问一九零五行业门户网

Oracle SCN 深入研究

在oracle内部,scn分为两部分存储,分别称之为scn wrap和scn base。实际上scn长度为48位,即它其实就是一个48位的整数。只不过可
一. scn 说明
之前也整理过几遍oracle scn的文章,如下:
oracle db 服务器系统时间修改问题 与scn 关系的深入研究
oracle blockscn/commit scn/cleanout scn 说明
redologcheckpoint 和 scn关系
这里在稍微小总结一下。
我们可以使用如下sql 查看oracle 的scn:
sql> select current_scn from v$database;
current_scn
-----------
3713849
上述结果返回的是一串数字。
但实际上,oracle 在内部并不是用数字来存储scn的。
在oracle内部,scn分为两部分存储,分别称之为scn wrap和scn base。实际上scn长度为48位,即它其实就是一个48位的整数。只不过可能是由于在早些年通常只能处理32位甚至是16位的数据,所以人为地分成了低32位(scnbase)和高16位(scn wrap)。
为什么不设计成64位,这个或许是觉得48位已经足够长了并且为了节省两个字节的空间:)。那么scn这个48位长的整数,,最大就是2^48(2的48次方, 281万亿,281474976710656),很大的一个数字了。
这里有一个重要的公式:
scn= (scn_wrp * 4294967296) + scn_bas
根据上面的公式,可以计算出scn的数据值。
在很多与我们事务相关的记录中都是记录scn wrap 和 scn base.
sql> select start_scnb,start_scnw  from v$transaction;
sql> desc smon_scn_time
name                              null?    type
------------------------------------------------- ----------------------------
thread                                            number
time_mp                                          number
time_dp                                          date
scn_wrp                                          number
scn_bas                                          number
num_mappings                                      number
tim_scn_map                                      raw(1200)
scn                                        number
orig_thread                                        number
包括在我们data block 的内部,也是使用scn wrp 和 scn base的。
二.测试案例
我们这里用data file 1 上的datablock 92967为例。
bbed> show
file#          1
block#          92967
offset          0
dba            0x00416b27 (4287271 1,92967)
filename      /u01/app/oracle/oradata/dave/system.256.816661027
bifile          bifile.bbd
listfile        /u01/filelist.txt
blocksize      8192
mode            edit
edit            unrecoverable
ibase          dec
obase          dec
width          80
count          8192
logfile        log.bbd
spool          no
bbed> p kcbh
struct kcbh, 20 bytes                      @0
ub1 type_kcbh                            @0        0x06
ub1 frmt_kcbh                          @1        0xa2
ub1 spare1_kcbh                        @2        0x00
ub1 spare2_kcbh                        @3        0x00
ub4 rdba_kcbh                          @4        0x00416b27
ub4 bas_kcbh                            @8        0x003566cc
ub2 wrp_kcbh                            @12      0x0000
ub1 seq_kcbh                            @14      0x01
ub1 flg_kcbh                            @15      0x04 (kcbhfckv)
ub2 chkval_kcbh                        @16      0xc36e
ub2 spare3_kcbh                        @18      0x0000
block dump 的结果:
其它类似信息

推荐信息