在Oracle数据库中我们可以利用oracle的内部事件调整SCN。增进SCN通常有两种常用方法:
1.alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';
--需要数据库OPEN
2.通过10015事件
alter session set events '10015 trace name adjust_scn level x';
--在数据库无法打开,mount状态下。
注:level 1为增进SCN 10亿 (1 billion) (1024*1024*1024=1073741824)
测试:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
571904
SQL> alter session set events 'IMMEDIATE trace name ADJUST_SCN level 1';
Session altered
--10g的告警日志会报这样的错:
Tue Mar 31 17:01:00 2009
Errors in file c:oracleproduct10.2.0adminorasjhudumporasjh_ora_2208.trc:
ORA-01031: 权限不足
查看trace文件,有这样的报错:
...
Clearing ORA-1031 thrown by trace 'ADJUST_SCN'
----- Dump for trace 'ADJUST_SCN': -----
*** 2009-03-31 17:01:00.828
ksedmp: internal or fatal error
ORA-01031: 权限不足
Current SQL statement for this session:
...
我在9i测试是没问题的。
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1073766630
在测试一下在数据库关闭的情况下SCN的增进。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 147921840 bytes
Fixed Size 453552 bytes
Variable Size 121634816 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter session set events '10015 trace name adjust_scn level 10';
会话已更改。
SQL> alter database open;
数据库已更改。
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1.0737E+10
SQL>