Nordall
Дата: 21.09.2015 19:47:28
Добрый день!
Подскажите, пожалуйста, как получить границы порции изменений, полученных с помощью GG?
Сами изменения я накапливаю в таблице AAA используя insertallrecords и запись полей RBA, FILESEQNO, COMMITTIMESTAMP(по этому полю сделал интервальное секционирование по дням).
В первую загрузку вычисляю max(COMMITTIMESTAMP) и сохраняю ее в промежуточную таблицу TMP поле A.
Загружаю данные из таблицы AAA по условию COMMITTIMESTAMP<=TMP.A
Во вторую загрузку я вычисляю опять max(COMMITTIMESTAMP), но с условием что COMMITTIMESTAMP>TMP.A
Загружаю данные по условию что COMMITTIMESTAMP between TMP.A и (Вычисленный max(COMMITTIMESTAMP))
Конечно же можно не вычислять max(COMMITTIMESTAMP), а посмотреть это значение в AUDIT_TS строки репликата CHECKPOINTTABLE.
Но очень опасно завязываться на репликат, который например могут переименовать.
В чем могут быть подвохи моего варианта?
Может есть более продвинутые методы захвата порции данных?(Как вариант рассматривал переключение синонима между несколькими таблицами)
Спасибо!
Alexander Ryndin
Дата: 22.09.2015 11:00:19
В целом все верно. Я бы использовал партиции для забора кусочка изменений.
select
*
from
pos_data partition for (to_date('15-AUG-2007','dd-mon-yyyy'));
Либо даже лучше использовать двойное ограничение - по дате (отсечет лишние партиции), а потом по SCN - выделит данные транзакционно.