在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>