在oracle中存在很多种scn,但是,只有如下几种是我们比较关注的。

commit scn/cleanout scn

database scn/on disk scn/thread scn/datafile checkpoint scn/start scn

offline scn/online scn

resetlogs scn

stop scn

low/high scn

下面我们通过实验来展示,描述上述几种scn:

++++++commit scn/cleanout scn

SQL> create table t1( a number);

Table created.

SQL> insert into t1 values(10);

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> commit;

Commit complete.

SQL> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) blk# from t1;

FILE#       BLK#

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

4      12430

4      12430

4      12430

4      12430

4      12430

4      12430

4      12430

SQL> oradebug setmypid

Statement processed.

SQL> alter system dump datafile 4 block 12430;

System altered.

SQL> oradebug tracefile_name

/home/oracle/app/diag/rdbms/oracleogg/oracleogg/trace/oracleogg_ora_6019.trc

*** 2015-09-14 13:17:04.448

Start dump data blocks tsn: 4 file#:4 minblk 12430 maxblk 12430

Block dump from cache:

Dump of buffer cache at level 4 for tsn=4 rdba=16789646

BH (0x853dc2d0) file#: 4 rdba: 0x0100308e (4/12430) class: 1 ba: 0x850a4000

set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 19,28

dbwrid: 0 obj: 87366 objn: 87366 tsn: 4 afn: 4 hint: f

hash: [0x8d52ee80,0x8d52ee80] lru: [0x853dc4f8,0x853dc288]

obj-flags: object_ckpt_list

ckptq: [0x82ff43f0,0x853dc540] fileq: [0x8dfcb918,0x853dc550] objq: [0x853dc520,0x853dc2b0] objaq: [0x853dc530,0x853dc2c0]

st: XCURRENT md: NULL fpin: 'ktspbwh2: ktspfmdb' tch: 4

flags: buffer_dirty redo_since_read

LRBA: [0x77.ee.0] LSCN: [0x0.1a0bd9] HSCN: [0x0.1a0be0] HSUB: [1]

Block dump from disk:

buffer tsn: 4 rdba: 0x0100308e (4/12430)

scn: 0x0000.001308e9 seq: 0x02 flg: 0x04 tail: 0x08e90602

frmt: 0x02 chkval: 0x240c type: 0x06=trans data

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

Dump of memory from 0x00007F36615B5A00 to 0x00007F36615B7A00

7F36615B5A00 0000A206 0100308E 001308E9 04020000  [.....0..........]

7F36615B5A10 0000240C 00000001 000154B0 001308E4  [.$.......T......]

Block header dump:  0x0100308e

Object id on Block? Y

seg/obj: 0x154b0  csc: 0x00.1308e4  itc: 3  flg: E  typ: 1 - DATA

brn: 0  bdba: 0x1003088 ver: 0x01 opc: 0

inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.001308e4

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

bdba: 0x0100308e

data_block_dump,data header at 0x7f36615b5a7c

===============

tsiz: 0x1f80

hsiz: 0xae

pbl: 0x7f36615b5a7c

76543210

flag=--------

ntab=1

nrow=78

frre=-1

fsbo=0xae

fseo=0x3f0

avsp=0x342

tosp=0x342

0xe:pti[0]      nrow=78 offs=0

0x12:pri[0]     offs=0x1f2e

0x14:pri[1]     offs=0x1ed3

0x16:pri[2]     offs=0x1e77

0x18:pri[3]     offs=0x1e1f

0x1a:pri[4]     offs=0x1dc6

0x1c:pri[5]     offs=0x1d69

0x1e:pri[6]     offs=0x1d06

0x20:pri[7]     offs=0x1ca3

0x22:pri[8]     offs=0x1c4a

0x24:pri[9]     offs=0x1beb

0x26:pri[10]    offs=0x1b8c

0x28:pri[11]    offs=0x1b34

0x2a:pri[12]    offs=0x1ada

0x2c:pri[13]    offs=0x1a7f

0x2e:pri[14]    offs=0x1a20

0x30:pri[15]    offs=0x19c0

0x32:pri[16]    offs=0x195e

0x34:pri[17]    offs=0x1907

0x36:pri[18]    offs=0x18a8

0x38:pri[19]    offs=0x1849

0x3a:pri[20]    offs=0x17f6

0x3c:pri[21]    offs=0x179c

0x3e:pri[22]    offs=0x1743

0x40:pri[23]    offs=0x16ed

针对上面的scn相关内容进行解释:

scn: 0x0000.001308e9 这其实就是block scn,转换为十进制为: 1247465

csc: 0x00.1308e4 这是cleanout scn,最后一次的full cleanout时的scn值,转换为10进制后为:1247460

Scn/Fsc 0x0000.001308e4 :这里表 commit scn或fast commit scn

我们来dump  controlfile和datafile header的信息,进行观察:

oradebug setmypid

alter session set events 'immediate trace name CONTROLF level 4';

alter session set events 'immediate trace name FILE_HDRS level 3';

+++++++++++offline scn/online scn

当表空间或数据文件被offline时,其对应的数据文件的scn会写入一个值,被称为offline scn.

archivelog模式下,当表空间offlline时,对对应的数据文件头stop scn会更新,同时controlfile中该datafile的stopscn信息也会更新。

当online后,对应的数据文件头的online scn等于datafile checkpoint scn值。

当online后,controlfile中关于该表空间对应的datafile和对应的数据文件头的stop scn都会重新被置于最大值。

+++++++++++++++什么是resetlogs scn?顾名思义就是open resetlogs方式打开数据库是对应的scn值。

stop scn,顾名思义是指数据库或数据文件在某个时刻处于停止状态时的scn值,当处于run状态时,该值是被设置为无穷大的。

转储控制文件的过程:

shudown immediate;

startup mount;

oradebug setmypid;

alter session set events 'immediate trace name CONTROLF level 4';

oradebug tracefile_name

oradebug close_trace

说明:level 1----dump controlfile header

level 2----level 1+datafile 文件头信息

level 3------level+可重用信息

level 10 ------level 3+其他全部信息

转储数据文件:

alter system dump datafile 1 block 59490;

alter system set events 'immediate trace name file_hdrs level 3';

+++++ high scn/low scn

日志文件的scn

oracle 的redo log日志文件中,其实也存在着一种scn,那就是high scn/low scn。我们首先通过视图来查询了解一下:

select recid,sequence#,first_change#,next_change# from v$log_history;

95         95       1470210      1495090

那什么是low scn 和high scn?如果上面的查询来解释,那么久可以简单的理解为:

first_change#就是low scn,而 next_change#值就是high scn.

简单的讲,redo log scn指redo log 在进行切换时刻对应的scn的值,而scn又对应着时间,在进行实例恢复时,是需要

通过该值来确认需要应用哪些archivelog或者redo log的。

oradebug setmypid;

alter session set events 'immediate trace name loghist level 1';

DUMP OF LOG HISTORY: 95 history records

Earliest record:

RECID #1 Recno 1 Record timestamp  07/23/15 15:44:00 Thread=1 Seq#=1 Link-Recid=0 kccic-Recid=1

Low scn: 0x0000.00000001 07/23/15 15:43:12 Next scn: 0x0000.00004c00

Latest record:

RECID #95 Recno 95 Record timestamp  09/06/15 14:44:04 Thread=1 Seq#=95 Link-Recid=94 kccic-Recid=1

Low scn: 0x0000.00166f02 08/29/15 22:08:03 Next scn: 0x0000.0016d032

我们看到95的这个low scn:1470210 netx scn:1495090

--------controlfile dump

LOG FILE #3:

name #3: /home/oracle/app/oradata/oracleogg/redo03.log

Thread 1 redo log links: forward: 0 backward: 2

siz: 0x19000 seq: 0x00000060 hws: 0x3 bsz: 512 nab: 0x6ce flg: 0x8 dup: 1

Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00166f02--这里的prev scn其实就对应上面查询的first change#值。

Low scn: 0x0000.0016d032 09/06/2015 14:44:04--这里的low scn对应上面的next change值(因为这里查看current log信息,前面是dump的redo log history)

Next scn: 0xffff.ffffffff 01/01/1988 00:00:00

这里的next scn其实有点类似datafile 的stop scn,对于current log来说,总是被设置为无穷大的。

阅读(3733) | 评论(0) | 转发(0) |

获取当前scn号scn1_深入理解SCN号相关推荐

  1. oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系

    天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...

  2. SCN(控制文件中的scn)

    控制文件中的scn很多,最重要的有3类:数据库SCN.数据文件SCN和Checkpoint progress record中的SCN.数据库SCN和数据文件SCN分别从V$DATABASE和V$DAT ...

  3. php公众号用户关注,微信公众号获取用户信息(用户关注公众号)

    一 获取用户基本信息 用户在关注公众号之后,你可以获取到用户的openID(加密后的微信号,每个用户对应每个公众号的openID是唯一的).通过openID可以获取到包括昵称.头像.性别.所在城市.语 ...

  4. oracle scn超了,Oracle安全 - SCN的可能最大值与耗尽问题

    在2012年第一季度的CPU补丁中,包含了一个关于SCN修正的重要变更,这个补丁提示,在异常情况下,Oracle的SCN可能出现异常增长,使得数据库的一切事务停止,由于SCN不能后退,所以数据库必须重 ...

  5. 获取当前月的 下一个月1号

    获取当前月的 下一个月1号 private static Date TimeTools(Date date) throws ParseException {Calendar calendar = Ca ...

  6. 线下活动抽奖PHP源码,对接公众号,实现关注公众号发送关键字获取抽奖码,通过平台进行摇号抽奖,可以二次开发(所有公众号都可对接)

    最近公司需要做一款通过公众号获取幸运码抽奖的程序 跟微信公众号对接肯定得去看公众号开发文档,我花了几分钟大致了阅览了一下,满足发送关键词然后获取抽奖码功能无需申请任何权限,所有公众号都拥有的这个权限, ...

  7. PHP 根据身份证号码,获取性别、获取生日、计算年龄、获取地址、获取生肖、获取星座、以及判断是否是身份证号

    PHP 根据身份证号码,获取性别.获取生日.计算年龄.获取地址.获取生肖.获取星座.以及判断是否是身份证号 方法教程: 1.PHP根据身份证号码,获取性别. 2.PHP根据身份证号码,获取生日. 3. ...

  8. linux查询网卡bdf信息,Linux获取pci设备的厂商号、设备号、class号

    要描述一个pci设备,就需要知道设备的厂商号(venderId).设备号(devId)和class号.那么,在Linux系统中,如何获取这三个数据呢? 既然是一个pci设备,那么首先就得知道BDF-- ...

  9. Unity实现在Android端获取Android手机的唯一ID(设备号)(亲测Android11可用)

    Unity实现在Android端获取Android手机的唯一ID(设备号)(亲测Android11可用) 备注:测试版本Unity2020,理论上Unity2018以上都可用,未做测试 - 文章初衷 ...

最新文章

  1. Java有线程安全的set吗?
  2. 关闭文件夹或打印机共享服务器,局域网共享打印机好用,但文件夹不能访问
  3. Annotation 注解
  4. 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
  5. tcp选项部分编码_学习编码中最难的部分也是最有趣的部分
  6. 字符ascii码值转换_没想到 Unicode 字符还能这样玩?
  7. maven学习笔记第一节一-maven install 模块之间相互引用
  8. 常用Feed流架构实现
  9. IntelliJ IDEA如何修改背景颜色样式
  10. caffe 使用笔记
  11. Atitit 定时器timer 总结 目录 1.1. Js定时器 window.setInterval 1 2. Java定时器 timer 1 1.1.Js定时器 window.setInter
  12. stmt php,PHP mysqli_stmt_free_result() 函数用法及示例
  13. 浙江海洋大学计算机 周斌,浙江海洋大学2018年硕士研究生调剂拟录取名单公示(一)...
  14. 档案+户口+租房,你都清楚了吗?
  15. Java 获取文件的真实类型,修改后缀名也能识别出来
  16. Thinkphp内核SEO按天关键词计费排名查询系统源码
  17. Git 之三 常用命令:仓库创建、提交、分支等
  18. c++/qt/opencv实现魔方复原【娱乐】
  19. 【该文章已被封禁】区块链钱包APP逆向分析及实现
  20. 二叉树的递归遍历(树UVa548 紫书p155)

热门文章

  1. openpyxl 的用法
  2. FPGA底层资源综述
  3. java 黑白皇后算法_不思议迷宫黑白皇后最后两个阶段怎么过
  4. java实验报告替换错别字,JavaScript replace new RegExp使用介绍
  5. 【UV打印机】波形开发-开发流程(四)
  6. html表格边框为void,将表格边框设置为THICK(Setting Table borders to THICK)
  7. 华虹USB-KEY for WinCE.NET驱动程序的编写
  8. 路径偏移定位不准确?华为定位SuperGNSS技术帮您解决这一难题!
  9. 龙之谷微信该服务器已爆满,微信一区爆满 还能进吗
  10. 如果程序员是士兵,那编程语言会是什么样的武器?