Один из способов, но самый простой и рабочий.
SCN состоит
из двух частей - 0x0000.00000000
0000 - SCN WRAP
00000000
- SCN BASE
Этот метод увеличивает часть «SCN BASE».
Тесткейс
Для начала необходима установка параметра
SQL> alter system set
"_allow_error_simulation"=TRUE scope=spfile;
System altered.
Без него этот метод не работает.
Далее необходим эвент adjust_scn
SQL> alter system set events 'immediate trace name
adjust_scn level ';
System altered.
Где n –
это 1,2,3….и т д.
Каждый
уровень увеличивает SCN на
1073741824 единицы, НО отталкиваясь от текущего SCN БД.
То есть.
SQL> select to_char(dbms_flashback.get_system_change_number)
from dual;
TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE
----------------------------------------
3221225473
SQL> alter system set events 'immediate trace name
adjust_scn level 1'; --попытаемся
выдать меньше, чем
текущий
System altered.
В алерте будет вот такое
Wed Oct 31 17:37:50 EET 2012
Errors in file
/oracle/admin/prime/udump/prime_ora_3995.trc:
ORA-00600: internal error code, arguments: [2256],
[0], [1073741824], [0], [3221225705], [], [], []
Wed Oct 31 17:37:52
EET 2012
OS Pid: 3995 executed alter system set events
'immediate trace name adjust_scn level 1'
У этой 600-ой аргументы
[1073741824] – то, что мы пытаемся вставить в SCN BASE
[3221225705] – то, что там уже есть, а учитывая что
первый и третий аргумент – это SCN
WRAP, то в данном случае это есть текучий SCN БД.
Соответвено, у SCN остается прежним
SQL> select
to_char(dbms_flashback.get_system_change_number) from dual;
TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE
----------------------------------------
3221225756
А если возьмем больше, то получим больше ;)
SQL> alter system set events 'immediate trace name
adjust_scn level 8';
System altered.
SQL> select
to_char(dbms_flashback.get_system_change_number) from dual;
TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE
----------------------------------------
8589934594
Комментариев нет:
Отправить комментарий