> 데이터 베이스 > MySQL 튜토리얼 > Oracle SCN 深入研究

Oracle SCN 深入研究

WBOY
풀어 주다: 2016-06-07 17:31:30
원래의
1002명이 탐색했습니다.

在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 的结果:

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿