powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Фильтрация данных в GoldenGate
4 сообщений из 4, страница 1 из 1
Фильтрация данных в GoldenGate
    #39325579
rzrz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо отфильтровать одинаковые строки при репликации с помощью OGG. То есть суть задачи:
На источнике ходит стандартный job учетной системы, который каждые пять минут обновляет бОльшую часть строк в таблице "фиктивно" (изменяется только одно поле с датой изменения строки, остальные строки не меняются).
GG обрабатывает строки в режиме хранения истории изменений с помощью параметра GETUPDATEBEFORES в экстракте и INSERTUPDATES, INSERTDELETES в репликате.
В итоге мы имеем огромное количество строк в таблице приемнике, которые отличаются одна от другой только временем изменения (в рамках первичного ключа).
Я попробовал отфильтровать такие строки с помощью функции FILTER для репликата, но так как среди полей есть nullable поля, то сравнение этих значений не работает. А расширять проверкой на null не хочется, из-за ограничений "The maximum size of the filter clause is 5,000 bytes."

Фильтр выглядит следующим образом
FILTER(@BEFORE (INVENTORY_LOCATION_ID) <> INVENTORY_LOCATION_ID OR
@BEFORE (ORGANIZATION_ID) <> ORGANIZATION_ID OR
@BEFORE (LAST_UPDATED_BY) <> LAST_UPDATED_BY OR
@BEFORE (CREATION_DATE) <> CREATION_DATE OR
@BEFORE (CREATED_BY) <> CREATED_BY OR
@BEFORE (LAST_UPDATE_LOGIN) <> LAST_UPDATE_LOGIN OR
@BEFORE (DESCRIPTION) <> DESCRIPTION OR
@BEFORE (DESCRIPTIVE_TEXT) <> DESCRIPTIVE_TEXT OR
@BEFORE (DISABLE_DATE) <> DISABLE_DATE OR
@BEFORE (INVENTORY_LOCATION_TYPE) <> INVENTORY_LOCATION_TYPE OR
@BEFORE (PICKING_ORDER) <> PICKING_ORDER OR
@BEFORE (PHYSICAL_LOCATION_CODE) <> PHYSICAL_LOCATION_CODE OR
@BEFORE (LOCATION_MAXIMUM_UNITS) <> LOCATION_MAXIMUM_UNITS OR
@BEFORE (SUBINVENTORY_CODE) <> SUBINVENTORY_CODE OR
@BEFORE (LOCATION_WEIGHT_UOM_CODE) <> LOCATION_WEIGHT_UOM_CODE OR
@BEFORE (MAX_WEIGHT) <> MAX_WEIGHT OR
@BEFORE (VOLUME_UOM_CODE) <> VOLUME_UOM_CODE OR
@BEFORE (MAX_CUBIC_AREA) <> MAX_CUBIC_AREA OR
@BEFORE (X_COORDINATE) <> X_COORDINATE OR
@BEFORE (Y_COORDINATE) <> Y_COORDINATE OR
@BEFORE (Z_COORDINATE) <> Z_COORDINATE OR
@BEFORE (INVENTORY_ACCOUNT_ID) <> INVENTORY_ACCOUNT_ID OR
@BEFORE (SEGMENT1) <> SEGMENT1 OR
@BEFORE (SEGMENT2) <> SEGMENT2 OR
@BEFORE (SEGMENT3) <> SEGMENT3 OR
@BEFORE (SEGMENT4) <> SEGMENT4 OR
@BEFORE (SEGMENT5) <> SEGMENT5 OR
@BEFORE (SEGMENT6) <> SEGMENT6 OR
@BEFORE (SEGMENT7) <> SEGMENT7 OR
@BEFORE (SEGMENT8) <> SEGMENT8 OR
@BEFORE (SEGMENT9) <> SEGMENT9 OR
@BEFORE (SEGMENT10) <> SEGMENT10 OR
@BEFORE (SEGMENT11) <> SEGMENT11 OR
@BEFORE (SEGMENT12) <> SEGMENT12 OR
@BEFORE (SEGMENT13) <> SEGMENT13 OR
@BEFORE (SEGMENT14) <> SEGMENT14 OR
@BEFORE (SEGMENT15) <> SEGMENT15 OR
@BEFORE (SEGMENT16) <> SEGMENT16 OR
@BEFORE (SEGMENT17) <> SEGMENT17 OR
@BEFORE (SEGMENT18) <> SEGMENT18 OR
@BEFORE (SEGMENT19) <> SEGMENT19 OR
@BEFORE (SEGMENT20) <> SEGMENT20 OR
@BEFORE (SUMMARY_FLAG) <> SUMMARY_FLAG OR
@BEFORE (ENABLED_FLAG) <> ENABLED_FLAG OR
@BEFORE (START_DATE_ACTIVE) <> START_DATE_ACTIVE OR
@BEFORE (END_DATE_ACTIVE) <> END_DATE_ACTIVE OR
@BEFORE (ATTRIBUTE_CATEGORY) <> ATTRIBUTE_CATEGORY OR
@BEFORE (ATTRIBUTE1) <> ATTRIBUTE1 OR
@BEFORE (ATTRIBUTE2) <> ATTRIBUTE2 OR
@BEFORE (ATTRIBUTE3) <> ATTRIBUTE3 OR
@BEFORE (ATTRIBUTE4) <> ATTRIBUTE4 OR
@BEFORE (ATTRIBUTE5) <> ATTRIBUTE5 OR
@BEFORE (ATTRIBUTE6) <> ATTRIBUTE6 OR
@BEFORE (ATTRIBUTE7) <> ATTRIBUTE7 OR
@BEFORE (ATTRIBUTE8) <> ATTRIBUTE8 OR
@BEFORE (ATTRIBUTE9) <> ATTRIBUTE9 OR
@BEFORE (ATTRIBUTE10) <> ATTRIBUTE10 OR
@BEFORE (ATTRIBUTE11) <> ATTRIBUTE11 OR
@BEFORE (ATTRIBUTE12) <> ATTRIBUTE12 OR
@BEFORE (ATTRIBUTE13) <> ATTRIBUTE13 OR
@BEFORE (ATTRIBUTE14) <> ATTRIBUTE14 OR
@BEFORE (ATTRIBUTE15) <> ATTRIBUTE15 OR
@BEFORE (REQUEST_ID) <> REQUEST_ID OR
@BEFORE (PROGRAM_APPLICATION_ID) <> PROGRAM_APPLICATION_ID OR
@BEFORE (PROGRAM_ID) <> PROGRAM_ID OR
@BEFORE (PROGRAM_UPDATE_DATE) <> PROGRAM_UPDATE_DATE OR
@BEFORE (PROJECT_ID) <> PROJECT_ID OR
@BEFORE (TASK_ID) <> TASK_ID OR
@BEFORE (PHYSICAL_LOCATION_ID) <> PHYSICAL_LOCATION_ID OR
@BEFORE (PICK_UOM_CODE) <> PICK_UOM_CODE OR
@BEFORE (DIMENSION_UOM_CODE) <> DIMENSION_UOM_CODE OR
@BEFORE (LENGTH) <> LENGTH OR
@BEFORE (WIDTH) <> WIDTH OR
@BEFORE (HEIGHT) <> HEIGHT OR
@BEFORE (LOCATOR_STATUS) <> LOCATOR_STATUS OR
@BEFORE (STATUS_ID) <> STATUS_ID OR
@BEFORE (CURRENT_CUBIC_AREA) <> CURRENT_CUBIC_AREA OR
@BEFORE (AVAILABLE_CUBIC_AREA) <> AVAILABLE_CUBIC_AREA OR
@BEFORE (CURRENT_WEIGHT) <> CURRENT_WEIGHT OR
@BEFORE (AVAILABLE_WEIGHT) <> AVAILABLE_WEIGHT OR
@BEFORE (LOCATION_CURRENT_UNITS) <> LOCATION_CURRENT_UNITS OR
@BEFORE (LOCATION_AVAILABLE_UNITS) <> LOCATION_AVAILABLE_UNITS OR
@BEFORE (INVENTORY_ITEM_ID) <> INVENTORY_ITEM_ID OR
@BEFORE (SUGGESTED_CUBIC_AREA) <> SUGGESTED_CUBIC_AREA OR
@BEFORE (SUGGESTED_WEIGHT) <> SUGGESTED_WEIGHT OR
@BEFORE (LOCATION_SUGGESTED_UNITS) <> LOCATION_SUGGESTED_UNITS OR
@BEFORE (EMPTY_FLAG) <> EMPTY_FLAG OR
@BEFORE (MIXED_ITEMS_FLAG) <> MIXED_ITEMS_FLAG OR
@BEFORE (DROPPING_ORDER) <> DROPPING_ORDER OR
@BEFORE (AVAILABILITY_TYPE) <> AVAILABILITY_TYPE OR
@BEFORE (INVENTORY_ATP_CODE) <> INVENTORY_ATP_CODE OR
@BEFORE (RESERVABLE_TYPE) <> RESERVABLE_TYPE OR
@BEFORE (ALIAS) <> ALIAS OR
@BEFORE (AREA_ROW_ID) <> AREA_ROW_ID OR
@BEFORE (INV_DOCK_DOOR_ID) <> INV_DOCK_DOOR_ID OR
@BEFORE (INV_ORG_ID) <> INV_ORG_ID
)


Может есть еще какие-нибудь способы реализации такой фильтрации с помощью OGG?
А то таблица с одинаковыми данными на таргете переросла за 3 млрд строк, из которых уникальна по всем полям в лучшем случае треть.
...
Рейтинг: 0 / 0
Фильтрация данных в GoldenGate
    #39326011
GOSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rzrz,

у меня планируется аналогичная задача.
Хочу такой вариант: в отдельной табличке хранится набор полей , по которым осуществляется сверка (в виде varchar2/clob).
В репликате первая строка вставляет запись.
Вторая строка вызывает процедуру, которая через динамический запрос SELECT COUNT(*) FROM (select последняя строка MINUS select предпоследняя) по выбранным полям возвращает 0 или 2.
Если 0 , то последнюю строку удаляем.

Да, не очень эффективно, на производительность не проверял...но вроде должно работать.
...
Рейтинг: 0 / 0
Фильтрация данных в GoldenGate
    #39326255
rzrz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GOSP,
.
у меня сейчас сделано примерно подобный образом. Не устраивает меня время работы процедуры, поэтому и хочу переложить на GG.
Было бы здорово сделать это на источнике, но к сожалению это стандартная процедура и править её не разрешают.
...
Рейтинг: 0 / 0
Фильтрация данных в GoldenGate
    #39347693
rzrz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, есть ли еще какие-нибудь идеи по данному вопросу?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Фильтрация данных в GoldenGate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]