Как выгрузить логически согласованый набор данных из нескольких таблиц в БД под OLTP нагрузкой

Как выгрузить логически согласованый набор данных из нескольких таблиц в БД под OLTP нагрузкой?
Для этих целей в ORACLE можно использовать замечательный инструмент- FLASHBACK.
FB позиционируется ORACLом как инструмент dba обеспечивающий ретроспективные запросы к таблицам
для восстановления утерянной по каким-либо причинам информации либо отката всех изменений к моменту времени в прошлом.
Один из режимов чтения работает по опции SCN (System Change Number).
Зафиксировав значение SCN можно читать произвольный обьем логически согласованой информации примерно DB_FLASHBACK_RETENTION_TARGET минут.
Пост не претендует на исчерпывающее описание функционала FB поэтому приведенный ниже пример cхематичен и достаточен для демонстрации его нетрадиционного применения.

Проверяем доступность опции FLASHBACK.

SELECT FLASHBACK_ON FROM V$DATABASE;

Выдаем учетке под которой работает выгрузка необходимые права.

grant execute on SYS.DBMS_FLASHBACK to LOADER;

Значение SCN можно получить несколькими способами.

   select sys.DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
   select TIME_DP, SCN from sys.smon_scn_time order by scn desc;
   SELECT TIMESTAMP_TO_SCN(sysdate-1/(24*60)) from dual;

Проверяем велосипед на ходу.


create table FB_TABLE( p1 VARCHAR2(64));
select sys.DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
8842201836421

insert into FB_TABLE (p1) values ('string_1');
commit;
select sys.DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
8842201836472

update FB_TABLE set p1='string_2';
commit;
select sys.DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
8842201836530

select t.* from FB_TABLE AS OF SCN 8842201836421 t;
P1

select t.* from FB_TABLE AS OF SCN 8842201836472 t;
P1
string_1

select t.* from FB_TABLE AS OF SCN 8842201836530 t;
P1
string_2


По данной технологии несколько лет online собирается информация c нескольких десятков OLTP-серверов на сервер аналитики.

© Habrahabr.ru