在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:\oracle\product\10.2.0\admin\orasjh\udump\orasjh_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>
,
