作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。
前面介绍了4种推进SCN方法
(1)event 10015 来增加 scn 的值
(2)隐含参数_minimum_giga_scn 来增加 scn 的值
(3)gdb/dbx 来直接修改内存中的值
(4)使用oradebug poke 直接修改内存中的值
现在来说一下oracle推进SCN方法5:通过修改控制文件来修改 scn 的值
1、查看数据库当前scn
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------2412760select 2412760,to_char(2412760,'xxxxxxxxxxxxx'),to_char(3412760,'xxxxxxxxxxx') from dual;2412760 TO_CHAR(2412760,'XXXXXXXXXXX TO_CHAR(3412760,'XXXXXXX
---------- ---------------------------- ------------------------2412760 24d0d8 341318SQL> shutdown abort;
2、修改控制文件的SCN值
修改方法为:
1、当数据块为8k的时候,控制文件大小为16k
2、找到Controlfile Checkpointed at scn,偏移量为第一个块的60,比如0x4060,然后具体位置在0x4060的第9至第14个byte(共6个字节)
3、找到第一个块的第一行,如0x4000,将offset为15的flag由0x04改为0x00,并同时将checksum值(offset为16、17)全部清零(验证信息修改为全部0)。先备份一下控制文件,然后把控制文件用UE打开:先切换文字模式,查找数据库名字“DBBBED”,然后切换为16进制,快速找到位置00004000h开始
将0499B0右键替换为000000
将36D224右键替换为想要的值:181334。
修改结果:
3、查看修改后的SCN
然后拷贝控制文件到原位置,启动数据库
SQL> startup;
ORACLE instance started.
SQL> select checkpoint_change# from v$database;CHECKPOINT_CHANGE#
------------------3412765 <<<<<< 比2412760 大了1000000
数据库启动后查询scn为3412765 (数据库当前scn)果然微大于3412760 (修改控制文件scn),证明我们通过修改控制文件scn,实现数据库scn推进是没问题的。
链接:
史上最全,呕心沥血总结oracle推进SCN方法(一)
史上最全,呕心沥血总结oracle推进SCN方法(二)
史上最全,呕心沥血总结oracle推进SCN方法(三)
史上最全,呕心沥血总结oracle推进SCN方法(四)