Oracle SCN 深入研究

php中文网
发布: 2016-06-07 17:31:30
原创
1146人浏览过

在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)。

LibLib AI
LibLib AI

中国领先原创AI模型分享社区,拥有LibLib等于拥有了超多模型的模型库、免费的在线生图工具,不考虑配置的模型训练工具

LibLib AI 647
查看详情 LibLib AI

为什么不设计成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 的结果:

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号