`
369540808
  • 浏览: 196588 次
文章分类
社区版块
存档分类
最新评论

Oracle SCN 深入研究

阅读更多


一. SCN 说明

之前也整理过几遍Oracle SCN的文章,如下:

Oracle DB 服务器系统时间修改问题 与SCN 关系的深入研究

http://blog.csdn.net/tianlesoftware/article/details/6163859

Oracle Blockscn/commit scn/cleanout scn 说明

http://blog.csdn.net/tianlesoftware/article/details/6660530

Oracle SCNheadroom、ORA-19706 和_external_scn_rejection_threshold_hours 参数 说明

http://blog.csdn.net/tianlesoftware/article/details/8164455

RedoLogCheckpoint 和 SCN关系

http://blog.csdn.net/tianlesoftware/article/details/5251916

这里在稍微小总结一下。

我们可以使用如下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

------------------------------------------------- ----------------------------

THREADNUMBER

TIME_MPNUMBER

TIME_DPDATE

SCN_WRPNUMBER

SCN_BASNUMBER

NUM_MAPPINGS NUMBER

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

Start dump data blocks tsn: 0 file#:1minblk 92967 maxblk 92967

Block dump from cache:

Dump of buffer cache at level 4 for tsn=0rdba=4287271

Block dump from disk:

buffer tsn: 0 rdba: 0x00416b27 (1/92967)

scn: 0x0000.003566cc seq: 0x01 flg: 0x04 tail: 0x66cc0601

frmt: 0x02 chkval: 0xc36e type: 0x06=transdata

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007FBE18328A00 to0x00007FBE1832AA00

7FBE18328A00 0000A206 00416B27 003566CC04010000 [....'kA..f5.....]

7FBE18328A10 0000C36E 00000001 00012965003566B8 [n.......e)...f5.]

......

7FBE1832A9F0 0144494C 014E014E 02C1024E66CC0601 [LID.N.N.N......f]

这里的SCN 是:0x0000.003566cc

初看这里估计很晕,在联系一下我们上面BBED的结果,就应该明白了。

ub4 bas_kcbh @8 0x003566cc

ub2 wrp_kcbh @12 0x0000

这里的SCN 格式是: SCNWRAP.SCN BASE.

我们用第一节讲的公式计算一下SCN:

SQL>select to_number('3566cc','xxxxxxx') from dual;

TO_NUMBER('3566CC','XXXXXXX')

-----------------------------

3499724

--系统当前的SCN 是:

SQL> select CURRENT_SCN from v$database;

CURRENT_SCN

-----------

3715593

我们的block修改时的SCN 是:

SCN= (0 * 4294967296) + 3499724 = 3499724

即,我们的block:92967 在修改时,对应的SCN 是3499724。

--------------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

QQ: 251097186

Skype: tianlesoftware

Email: tianlesoftware@gmail.com

Blog: http://blog.csdn.net/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware


分享到:
评论

相关推荐

    BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf

    BLOG_Oracle_lhr_Oracle SCN的一点研究.pdfBLOG_Oracle_lhr_Oracle SCN的一点研究.pdf

    oracle patch scn--修改oracle scn工具(oracle异常恢复利器)

    oracle scn修改工具,可以直接修改oracle scn,在极端情况下恢复使用,比如解决ORA-600 2662等类似错误,使用说明:https://www.xifenfei.com/2022/06/win-oracle-scn-patch.html

    oracle scn

    oracle scnOracle_SCN三篇文章Oracle_SCN三篇文章

    Oracle SCN机制解析

    SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。

    ORACLE SCN异常增长处理

    福建电脑期刊2013年第2期的一篇论文 oracle scn增长过快问题研究和解决方案探索 易金旭

    oracle SCN 祥解

    本文档主要对oracle中的scn相关概念作了详细的介绍何解释。 值得深入学习。

    oracle scn概念解析

    oracle scn分析及概念解释,及各种scn的查询sql语句

    检查点SCN深入研究

    检查点SCN深入研究对检查点SCN有详细的描述,希望对大家有帮助。

    ORACLE SCN问题解析

    在某些环境下,程序bug会引起ORACLE数据库SCN的异常增长,超出ORACLE设定的合理范围,该事件很可能导致宕机,并且由于企业内部存在众多的分布式事务,引起SCN的剧烈增长很容易出现扩散现象,导致更多的数据库宕机。...

    个人经验总结:Oracle数据库SCN号详解

    Oracle数据库SCN号详解 系统检查点scn) 数据文件检查点(v$datafile) 数据文件终止scn) 数据文件中存放的检查点 启动scn

    修改oracle scn小工具(patch scn)

    在一些情况下(特别是一些数据库非常规恢复场景中),需要修改oracle scn绕过一些错误,让数据库open成功,在以前的版本中我们可以通过event,隐含参数,oradebug等方法进行修改,在一些较新的版本中这些方法都被oracle屏蔽,...

    oracle SCN机制详解

    关于oracle SCN工作机制的详细解读

    Oracle系统改变号SCN详解

    Oracle系统改变号SCN详解.docx

    Oracle DB SCN 生成率过高技术处理

    关于“Oracle DB SCN 生成率过高” 的技术处理指南

    ORACLE SCN增长过快问题研究和解决方案探索.pdf

    ORACLE SCN增长过快问题研究和解决方案探索.pdf

    oracle scn 详解

    oracle scn 详解 ,很不错的资源,欢迎大家下载啊

    Oracle SCN详解

    Oracle SCN详解

    浅谈oracle SCN机制

    理解SCN的运作机制,可以帮助你更加深入地了解上述功能。 在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的: 1、事务开始; 2、在buffer cache中找到需要的数据块,如果没有找到,则从数据...

    数据库SCN 监控-new.txt

    Oracle 数据库在2019年 6月23日自动生效了新的SCN 生成的量由以前的16K 涨导 32K,但还是没有根本上解决问题,历史遗留问题还有可能发生,所以我们需要继续监控数据库 SCN 问题

Global site tag (gtag.js) - Google Analytics