oracle 推进scn号

oracle 10015 trace name adjust_scn level level_num

一,在数据库无法打开,mount状态下通过10015事件推进scn
alter session set events '10015 trace name adjust_scn level level_num'
当前日志文件损坏修复可能遇到的问题。

1,将undo改变成手工管理的,

2,然后设置隐含参数 
_allow_resetlogs_corruption = true 和 _corrupted_rollback_segments 
因为redo损坏的时候,undo数据也大都不一致了。

3,open resetlogs之前,先使用recover database using backup controlfile until cancel;
如果此时又遇到600错误,就使用ADJUST_SCN事件来调整当前的SCN,如果SCN相差不多,
可以通过多次重起数据库解决。如果scn相差比较多,

4,可以使用10015 event:
alter session set events '10015 trace name adjust_scn level 1';
如果SCN相差比较多,可以设置level 2,。。。level 10等 (level 1为增进SCN 10亿 (1 billion) (1024*1024*1024),通常Level 1已经足够。也可以根据实际情况适当调整。)
参考这里
How to calculate adjust SCN level
Posted in Oracle RDMS on November 19th, 2006
本文对eygle的如何处理ORA-600 [2662]作一点补充。
通常我们对于ORA-600 [2662]错误的解决是通过10015 ADJUST_SCN事件来增进current SCN以达到比数据文件中最大的SCN还要大的目的,这样才可能启动数据库。
eygle的例子中报错信息如下:
ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
ORA-00600: internal error code, arguments: [2662], [a], [b],         [c], [d],         [e],       [], []
这个报错参数的含义在metalink中如此描述的:
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
为了存储更大的SCN值,当SCN BASE到足够大并开始重置的时候,SCN WRAP将加1。
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
也就是Arg [d] 的值是从哪个block中找到的,通常是一个data block address。

5,通过这几个参数根据一定的规则可以计算出我们需要的level。计算规则如下:
1. Arg [c] *4得出一个数值,假设为V_Wrap
2. 如果Arg [d]=0,则V_Wrap值为需要的level
Arg [d] < 1073741824,V_Wrap+1为需要的level
Arg [d] < 2147483648,V_Wrap+2为需要的level
Arg [d] < 3221225472,V_Wrap+3为需要的level
仍旧看eygle的案例。
Arg [c] *4 = 0 * 4 = 0
Arg [d] = 898092653 < 1073741824
所以level = 0+1 = 1
因此其实eygle不需要增进level 10,level 1就应该足够了。
alter session set events '10015 trace name adjust_scn level 1';


二,当数据库在open状态时:
1.通过immediate trace name方式(在数据库Open状态下)
alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';

2,看另外一个例子的报错信息,我们再来计算一次。
ORA-00600: internal error code, arguments: [2662], [0], [2179133], [8656], [70114056], [33855201], [], []
Arg [c] *4 = 8656 * 4 = 34624
Arg [d] = 70114056 < 1073741824
所以level = 34624 + 1 = 34625
因此在这个例子中我们应该执行
alter session set events 'IMMEDIATE trace name ADJUST_SCN level 34625';

3,另外一种计算方法:
然后重启在mount状态下,采用10015来adjust_scn。
首先计算所需要的level,将数据文件scn除以1073741824,得出的数字加1,再取整,即得出所需要的level.
公式如下:level_num=(1024*1024*1024*4*Arg [c])+Arg [d])/1024*1024*1024
然后alter session set events '10015 trace name adjust_scn level level_num';


注意:2012年1月后的PSU中包含隐含参数_external_scnrejection_threshold_hours,此时隐含参数和10015事件会失效。 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值