一. 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的一点研究.pdfBLOG_Oracle_lhr_Oracle SCN的一点研究.pdf
oracle scn修改工具,可以直接修改oracle scn,在极端情况下恢复使用,比如解决ORA-600 2662等类似错误,使用说明:https://www.xifenfei.com/2022/06/win-oracle-scn-patch.html
oracle scnOracle_SCN三篇文章Oracle_SCN三篇文章
SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。
福建电脑期刊2013年第2期的一篇论文 oracle scn增长过快问题研究和解决方案探索 易金旭
本文档主要对oracle中的scn相关概念作了详细的介绍何解释。 值得深入学习。
oracle scn分析及概念解释,及各种scn的查询sql语句
检查点SCN深入研究对检查点SCN有详细的描述,希望对大家有帮助。
在某些环境下,程序bug会引起ORACLE数据库SCN的异常增长,超出ORACLE设定的合理范围,该事件很可能导致宕机,并且由于企业内部存在众多的分布式事务,引起SCN的剧烈增长很容易出现扩散现象,导致更多的数据库宕机。...
Oracle数据库SCN号详解 系统检查点scn) 数据文件检查点(v$datafile) 数据文件终止scn) 数据文件中存放的检查点 启动scn
在一些情况下(特别是一些数据库非常规恢复场景中),需要修改oracle scn绕过一些错误,让数据库open成功,在以前的版本中我们可以通过event,隐含参数,oradebug等方法进行修改,在一些较新的版本中这些方法都被oracle屏蔽,...
关于oracle SCN工作机制的详细解读
Oracle系统改变号SCN详解.docx
关于“Oracle DB SCN 生成率过高” 的技术处理指南
ORACLE SCN增长过快问题研究和解决方案探索.pdf
oracle scn 详解 ,很不错的资源,欢迎大家下载啊
Oracle SCN详解
理解SCN的运作机制,可以帮助你更加深入地了解上述功能。 在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的: 1、事务开始; 2、在buffer cache中找到需要的数据块,如果没有找到,则从数据...
Oracle 数据库在2019年 6月23日自动生效了新的SCN 生成的量由以前的16K 涨导 32K,但还是没有根本上解决问题,历史遗留问题还有可能发生,所以我们需要继续监控数据库 SCN 问题