powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / GoldenGate WHERE
3 сообщений из 3, страница 1 из 1
GoldenGate WHERE
    #39617287
Михаилs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!

Появилась необходимость выполнить фильтрацию данных процессов репликации.
Вопрос осложняется условием фильтрования данных, т.к стандартными операторами сравнения, которыми оперирует WHERE увы не обойтись, а условие отбора представляет собой вложенный запрос, как на пример по Foreing Key.

Подробное описание проблемы...

При использовании стандартной конструкции все работает хорошо:
EXTRACT EXT1
TABLE TEST, WHERE (COL1 = 50)

Но условие представляет собой вложенный SELECT, пример следующий:
EXTRACT EXT2
TABLE TEST1, WHERE (COL1 IN (SELECT TEST2.COL1 FROM TEST2 WHERE TEST2.COL1 = COL1))

Т.е. необходимо проверить (по ключу или нет, не важно) наличие данных в другой таблице, если таковы имеются реплицируем транзакции, в ином случае игнорируем.

Конструкция WHERE, на сколько я утвердился, не подразумевает использование таких операторов как "IN" или "EXISTS" и вызов функций и повторное использование скобок " ( ) ".

Использование SQLPREDICATE исключается, так как используется только при Initial load, и не работает при динамической фильтрации.

Пробовал прописать #MACRO, тоже не помогло, так как все описанное в макросе, GG вуалирует в простой WHERE:
TABLE TEST, #mymacro(<parametr>)
<-- будет идентичен -->
TABLE TEST, WHERE("то что в BODY #mymacro")

Вызвать из схемы какую либо функцию которая возвратит значение для фильтрации тоже отказывается:
EXTRACT EXT2
TABLE TEST1, WHERE (COL1 = MyFunction())
ругается что не понимает *MyFunction().

На Target стороне для репликатора, при использовании SQLEXEC так же не принесло результатов:
MAP TEST1,TARGET TEST2, SQLEXEC (SPNAME <MyProcedure>, PARAMS (CODE_IN_PARAM = COL1)), COLMAP(USEDEFAULTS, COL1= @GETVAL(<MyProcedure>.CODE_OUT_PARAM)), EVENTACTIONS (IGNORE RECORD);
В процедуре селект, который обращается в другую таблицу.
Ппри это условии если процедура и ни чего не нашла, возвращается по логике NULL, но транзакции не уходят в ошибку и спокойно все инсертится и апдейтится.

В целом не важно на какой стороне выполнять фильтр Source or Target.
Прошу Вас поделится мыслями и идеями в способе реализации "усложненной" фильтрации репликации!

Ну или я перед своим носом упустил самый элементарный способ :)
...
Рейтинг: 0 / 0
GoldenGate WHERE
    #39617308
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте FILTER. Вот пример http://oracleabout.blogspot.ru/2014/06/goldengate-filter-data-using-lookup.html
Только архитектурно так как вы делаете лучше не делать. Лучше реплицировать обе таблицы, а на приемнике вытаскивать нужные строки обычным SQL.
...
Рейтинг: 0 / 0
GoldenGate WHERE
    #39617902
Михаилs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр, огромное спасибо!
Получилось допилить фильтр, по Вашей ссылке, под свои задачи. Тестирование дало положительные результаты!

Еще раз спасибо! Все работает.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / GoldenGate WHERE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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