史上最全,呕心沥血总结oracle推进SCN方法(一)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

在Oracle内部,SCN分为两部分存储,分别称之为scn wrap和scn base。实际上SCN长度为48位,即它其实就是一个48位的整数。只不过可能是由于在早些年通常只能处理32位甚至是16位的数据,所以人为地分成了低32位(scnbase)和高16位(scn wrap)
SCN= (SCN_WRP * 4294967296) + SCN_BAS

一些字典表中记录SCN_WRP 和SCN_BAS的值 ,如 v$transaction、smon_scn_time

在数据库异常恢复中,遇到ora-600[2662],scn不一致又没有日志的时候,我们首先想到的就是去推进数据库的scn。这样能够让数据库open起来,抢救其中的数据,常用方法如下:

(1) event 10015 来增加 scn 的值
(2) _minimum_giga_scn 来增加 scn 的值
(3) gdb/dbx 来直接修改内存中的值
(4) oradebug poke 直接修改内存中的值
(5) 修改控制文件来修改 scn 的值
(6) 修改数据文件头来修改 scn 的值
(7) adjust_scn 来增加scn(数据库open状态下)
(8) event 21307096推进scn(12.2版本新增)

但是在2012年时,Oracle通过补丁更新,导致1、2方法失效(2012年1月后的PSU中包含隐含参数_external_scnrejection_threshold_hours,此时隐含参数_minimum_giga_scn和10015事件会失效),目前只有3、4、5、6方法生效。在这几种方法中,我们常常使用方法4来修改scn的值,但是此方法在12C中,Oracle也已经屏蔽,还可以继续使用3,5,6的方法来实现修改SCN。在12.2中,Oracle多了一个新的EVENT 21307096也可以实现增加SCN的值。

接下来,我将为您介绍方法1,使用event 10015 来增加 scn 的值

在数据库无法打开,mount状态下,通过10015事件增加SCN。

alter session set events ‘10015 trace name adjust_scn level x’;

注:level 1为增进SCN 10亿 (1 billion) (102410241024),通常Level 1已经足够。也可以根据实际情况适当调整。

LEVEL的计算规则:

ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
ORA-00600: internal error code, arguments: [2662], [a], [b], [c], [d], [e], [], []
A CRUUENT SCN WRAP
B–CURRENT SCN BASE
C–DEPENDENT SCN WRAP
D–DEPENDENT SCN BASE
E–where present this is the dba where the dependent scn came from. (就是Arg [d] 的值是从哪个block中找到的,通常是一个data block address)
d< 102410241024=1073741824 时,需要的LEVEL为:c4+1
d< 1024
102410242= 2147483648 时,需要的LEVEL为:c4+2
d< 1024
102410243= 3221225472 时,需要的LEVEL为:c*4+3
以此类推

如上面提示的d值为898092653 < 1073741824 时,需要的LEVEL=c4+1=04+1=1,所以设置alter session set events ‘10015 trace name adjust_scn level 1’ 即可。

startup mount;
alter session set events '10015 trace name adjust_scn level 1';
recover database;
alter database open;

史上最全,呕心沥血总结oracle推进SCN方法(一)
史上最全,呕心沥血总结oracle推进SCN方法(二)
史上最全,呕心沥血总结oracle推进SCN方法(三)
史上最全,呕心沥血总结oracle推进SCN方法(四)

关注我,不迷路,将为您持续oracle如何推进SCN的方法

请添加图片描述

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值