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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1882516.html

(0)
上一篇 2025年2月22日 11:30:31
下一篇 2025年2月22日 11:33:36

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用navicat为数据库表建立索引?

    下面介绍如何使用Navicat为数据库表建立索引的具体操作方法。 推荐教程:MySQL数据库入门视频教程 1、打开Navicat 2、打开数据表所在的数据库,右击需要新增索引的数据库表,然后点击【设计表】 3、此时进入表设计界面 4、点击【…

    2025年2月23日 数据库
    100
  • navicat 怎么连接服务器上的数据库

      本来没有开启秘钥的远程服务器端数据库连接非常方便,就在新建连接上填入数据就ok了,但是开启SSH秘钥后的服务器连接有一个大坑,下面来详细讲讲navicat怎么连接服务器上的数据库。 推荐教程:navicat图文教程  其实开启了秘钥,在…

    2025年2月23日 数据库
    100
  • 如何使用navicat为数据库表增加新记录

    下面介绍如何使用Navicat为数据库表增加新记录的具体操作方法。 推荐教程:navicat图文教程 1、打开Navicat 2、打开数据表所在的数据库,右击需要新增记录的数据库表,然后点击【打开表】 3、此时显示数据库表已有数据,例中并无…

    2025年2月23日 数据库
    100
  • navicat不显示数据库

    最近,发现自己半年前在navicat里建立的数据库不见了,查本地mysql发现 此数据库完好的还在,就是在navicat里隐藏不显示了。下面就为大家讲解一下问题的原因几解决办法。 推荐教程:Navicat图文教程 解决过程:开始怀疑是MyS…

    2025年2月23日
    100
  • navicat怎么连数据库

      Navicat中文版可谓是强大的可视化数据库管理工具,其中包含了多个数据库组件,可以满足与不同的数据库软件相连接。就比如其中的Navicat for MySQL组件,该组件可以与任何3.21或以上版本的MySQL一起工作,并支持大部分的…

    2025年2月23日 数据库
    100
  • navicat怎么连别人的数据库

        做项目期间,项目组成员之间需要相互访问对方的数据库,连接对方Mysql数据库需要以下几个步骤: 推荐教程:navicat图文教程 0)前提条件      两台电脑必须处于同一网段下; 1)查询双方IP地址      方法1:打开cm…

    2025年2月23日
    100
  • navicat怎么导出整个数据库

      我们在开发网站,或者运营网站的时候,要养成经常备份数据库的习惯,因为这样可以预防数据的丢失。常见的数据库备份操作就是数据库的导入与导出。可以把数据库导出来,放在一个地方保存。下面就由小编教你如何用Navicat for mysql操作数…

    2025年2月23日 数据库
    100
  • 怎么把数据库导入navicat

    在开发时,数据库的设计与程序的设计是分开进行的。你在开发时经常会需要导入别的给你的数据库到你的电脑上进行调试。下面我们就为大家介绍一下navicat如何导入数据库文件。 推荐教程:navicat使用图文教程 1、首先打开navicat软件。…

    2025年2月23日 数据库
    100
  • 怎么用navicat创建数据库

    1、首先登陆Navicat,然后顺利连接数据库,如下图所示: 相关推荐:《Navicat for mysql使用图文教程》 2、在IP地址为192.168.255.131数据库上右键,然后点击“新建数据库”,如下图所示: 3、之后弹出“新建…

    2025年2月23日 数据库
    100
  • 怎么向navicat导入一个数据库

    首先我们打开Navicat,并且连接上本地数据库,选中连接,右键打开连接,直接双击也可以的。 在本地数据库中我们新建一个数据库用于存放导入的sql文件。 相关推荐:《Navicat for mysql使用图文教程》 设置编码,排序规则。 接…

    2025年2月23日 数据库
    100

发表回复

登录后才能评论