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