作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。
前面介绍了6种推进SCN方法
(1)event 10015 来增加 scn 的值
(2)隐含参数_minimum_giga_scn 来增加 scn 的值
(3)gdb/dbx 来直接修改内存中的值
(4)使用oradebug poke 直接修改内存中的值
(5)通过修改控制文件来修改 scn 的值
(6)通过修改数据文件头来修改 scn 的值
现在来说一下oracle推进SCN方法7:通过adjust_scn方式来增加SCN
当数据库在open状态时,可通过adjust_scn方式来增加SCN,语法如下:
alter session set events ‘IMMEDIATE trace name ADJUST_SCN level x’;
注:level 1为增进SCN 10亿 (1 billion) (102410241024=1073741824)
一般情况下,open resetlogs后容易出现错误ora-600 [2662], ora-600 [2256],通过 alter session set event ‘<事件名称><动作><跟踪项目><范围限定>’ 10015事件adjust scn号即可
如下报错:
ORA-00600: internal error code, arguments: [2256], [0], [3221225472], [5], [3880116460], [], [], []
level计算方法:
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< 1024*1024*1024=1073741824 时,需要的LEVEL为:c*4+1
d< 1024*1024*1024*2= 2147483648 时,需要的LEVEL为:c*4+2
d< 1024*1024*1024*3= 3221225472 时,需要的LEVEL为:c*4+3
以此类推
根据上面的计算方法可计算出来的所需的level为(5+1)*4 =24,即level 24
sqlplus “/ as sysdba”
alter session set event ‘10015 trace name adjust_scn level 24’;
然后可以通过select file#,CHECKPOINT_CHANGE# from v$datafile; 看到scn号就是 25769803776
链接:
史上最全,呕心沥血总结oracle推进SCN方法(一)
史上最全,呕心沥血总结oracle推进SCN方法(二)
史上最全,呕心沥血总结oracle推进SCN方法(三)
史上最全,呕心沥血总结oracle推进SCN方法(四)
史上最全,呕心沥血总结oracle推进SCN方法(五)
史上最全,呕心沥血总结oracle推进SCN方法(六)