Skip to content

modify controlfile scn

手工推进oracle scn方式(2)通过修改控制文件推进scn

手工推进oracle scn方式(2)通过修改控制文件推进scn

其实该方式可以理解为bbed修改数据文件头重建控制文件的另外一种方式,直接修改控制文件。生产库敬请谨慎变更!

该方式的要点,
1.定位控制文件的scn位置
2.修改scn以及check sum
3.重启DB确认修改成功

1.数据库当前的SCN号

SQL> select file#,checkpoint_change#,last_change# from v$datafile;

FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 507224 507224
2 507224 507224
3 507224 507224
4 507224 507224

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
507224

SQL> select to_char('507224','xxxxxxxxx') from dual;

TO_CHAR('5
----------
7bd58

2.用ue打开控制文件
通过07bd58定位当前scn所在的块为00048000H,偏移量为60的行的第9个字节开始到11个字节之间;flag为该块第一行偏移量为15的0x04;checksum为该块第二行的offset 16,17的0x6682
C0DP4J09_R1{X$ZYMWTZS)O

这里将scn推进1个g,总的scn为1024*1024*1024+507224=1074249048,转化为16进制为如下

SQL> select to_char('1074249048','xxxxxxxxx') from dual;

TO_CHAR('1
----------
4007bd58

在UE修改控制文件将checksum以及flag清0,将scn变更为0x004007bd58,变更后的控制文件为如下图:

6]W127Q)LLLT$T$76_{VX~5

重启数据库验证

SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 436207616 bytes
Fixed Size 1267908 bytes
Variable Size 125830972 bytes
Database Buffers 301989888 bytes
Redo Buffers 7118848 bytes
Database mounted.

检查修改后的SCN,已经变为我们要修改的SCN号了^@^

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
1074249048

SQL> alter database open;

Database altered.

在生产库上请慎重,该方式风险比较大。