数据库当前scn
代码如下 | 复制代码 |
idle> select checkpoint_change# from v$database; CHECKPOINT_CHANGE# idle> shutdown abort |
ORACLE 例程已经关闭。
分析控制文件中scn
这里我们可以看到加粗部分为数据库scn
代码如下 | 复制代码 |
SQL>select to_number('10327a59','xxxxxxxxx') from dual; TO_NUMBER('10327A59','XXXXXXXXX') |
这里的scn值和在数据库中查询的值有小差别,因为查询时间点和我完全关闭数据库有个时间差,而这个时间差有scn变化.细红框部分为控制文件对块的验证信息
修改控制文件scn和验证信息
验证信息修改为全部0,scn信息你可以根据你的需求去修改,这里把数据库的scn修改为57253932971026,按照数据库的原理,启动后的scn应该稍微大于该scn值.
代码如下 | 复制代码 |
SQL>select to_number('341278563412','xxxxxxxxxxxxxxxxx') from dual; TO_NUMBER('341278563412','XXXXXXXXXXXXXXXXX') |
启动数据库
idle> startup mount
ORACLE 例程已经启动。
代码如下 | 复制代码 |
Total System Global Area 400846848 bytes Fixed Size 2440024 bytes Variable Size 289408168 bytes Database Buffers 100663296 bytes Redo Buffers 8335360 bytes |
数据库装载完毕。
代码如下 | 复制代码 |
idle> recover database; 数据库已更改。 idle> select checkpoint_change# from v$database; CHECKPOINT_CHANGE# |
数据库启动后查询scn为57253932991028(数据库当前scn)果然微大于57253932971026(修改控制文件scn),证明我们通过修改控制文件scn,实现数据库scn推近完全OK.不实验风险较大,请勿在生产环境上测试,负载后果自负