阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle推进SCN系列:使用oradebug在mount状态下推进SCN

197次阅读
没有评论

共计 2620 个字符,预计需要花费 7 分钟才能阅读完成。

环境:RHEL 6.5(x86-64) + Oracle 11.2.0.4
声明: 推进 SCN 属于非常规恢复范畴,不建议非专业人员操作,否则后果自负。
需求: 我这里演示下推进 SCN 10W 数量级,实际需求推进多少可以根据 ORA-600 [2662] [a] [b] [c] [d] [e] 具体值来确认。

ARGUMENTS:
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.

更多详情可参考:ORA-600 [2662] “Block SCN is ahead of Current SCN” (文档 ID 28929.1)

  • 1. 查看当前数据库的 Current SCN
  • 2. 重新启动数据库到 mount 阶段
  • 3. 使用 oradebug poke 推进 SCN
  • 4. 补充实际计算推进 SCN 的方法

1. 查看当前数据库的 Current SCN

SYS@orcl> select current_scn||'' from v$database;

CURRENT_SCN||''
--------------------------------------------------------------------------------
4563483988

可以看到当前 SCN 是 4563483988,我现在想推进 SCN,在 10w 级别,也就是 4563483988 标红数字修改为指定值。

2. 重新启动数据库到 mount 阶段

重新启动数据库到 mount 阶段:

SYS@orcl> shutdown abort
ORACLE instance shut down.
SYS@orcl> startup mount
ORACLE instance started.

Total System Global Area 1235959808 bytes
Fixed Size                  2252784 bytes
Variable Size             788529168 bytes
Database Buffers          436207616 bytes
Redo Buffers                8970240 bytes
Database mounted.

3. 使用 oradebug poke 推进 SCN

我这里直接把十万位的 ”4″ 改为 ”9″ 了,相当于推进了 50w 左右:
说明:实验发现 oradebug poke 推进的 SCN 值,既可以指定十六进制的 0x11008DE74,也可以直接指定十进制的 4563983988。

SYS@orcl> oradebug setmypid
Statement processed.
SYS@orcl> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001AB50 00000000
SYS@orcl> select to_char(checkpoint_change#, 'XXXXXXXXXXXXXXXX') from v$database;

TO_CHAR(CHECKPOINT_CHANGE#,'XXXXXX
----------------------------------
        110013C41

SYS@orcl> oradebug poke 0x06001AE70 8 4563983988
BEFORE: [06001AE70, 06001AE78) = 00000000 00000000
AFTER:  [06001AE70, 06001AE78) = 1008DE74 00000001

SYS@orcl> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [06001AE70, 06001AEA0) = 1008DE74 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001AB50 00000000

SYS@orcl> alter database open;

Database altered.

SYS@orcl> select current_scn||'' from v$database;

CURRENT_SCN||''
--------------------------------------------------------------------------------
4563984271

可以看到已经成功将 SCN 推进到 4563983988,SCN 不断增长,所以这里查到的值略大一些。

4. 补充实际计算推进 SCN 的方法

本文在 2018-12-16 进一步补充说明:
在实际这类工作中,我们实际应该是要认真计算好需要推进 SCN 的值,而不应图省事直接给一个很大的值。后者不但是技术水平不成熟的表现,而且是不负责任的行为。

--ORA-00600: internal error code, arguments: [2662], [2], [1424107441], [2], [1424142235], [8388617], [], []
select 2*power(2,32)+1424142235 from dual;
10014076827

--ORA-00600: internal error code, arguments: [2662], [2], [1424142249], [2], [1424142302], [8388649], [], []
select 2*power(2,32)+1424143000 from dual;
10014077592

总结公式:c * power(2,32) + d {+ 可适当加一点,但不要太大!}
c 代表:Arg [c] dependent SCN WRAP
d 代表:Arg [d] dependent SCN BASE

oradebug setmypid
oradebug dumpvar sga kcsgscn_
oradebug poke 0x060012658 8 10014077592
oradebug dumpvar sga kcsgscn_
alter database open;

最后要说的是,做事情还是多考虑些,在非常规恢复中也能温柔的去推进 SCN,高级 DBA 的价值从细节上体现。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2620字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中