Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Goldengate - определить тип DML в на приёмнике  [new]
XmarkerX
Member

Откуда:
Сообщений: 228
Добрый день.

Коллеги, подскажите, будьте добры, как в replicat процессе определить тип текущей DML операции?

MAP SOURCE_TABLE, TARGET TARGET_TABLE,
COLMAP (usedefaults,
DML_TYPE = @{вот тут как-то надо определить что это INSERT|UPDATE|DELETE}
);
9 дек 15, 10:42    [18533814]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
GOSP
Member

Откуда:
Сообщений: 31
@GETENV('GGHEADER','OPTYPE')
Только операции GG немного другие: "PK UPDATE", "SQL COMPUPDATE", "INSERT", "DELETE"... вроде бы.
Можно либо это оставить так либо делать преобразование-вырезание , чтобы оставить символы "I","U","D"
9 дек 15, 12:46    [18534621]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
Лучше даже, на первое время, оставить полное название операции. Например, для UPDATEFORMAT COMPACT там другой тип операции
9 дек 15, 12:59    [18534715]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
XmarkerX
Member

Откуда:
Сообщений: 228
спасибо большое!
с этим вопросом разобрался.

Дабы не множить темы ещё один вопрос появился,
немного другого характера, но он у меня вытек из первого...

что планирую сделать:
создаю таблицу для хранения транзакций на источнике - некий лог

PKID | TABLE_NAME | DML_TYPE | SOURCE_ID

PKID - это мой сиквенс,
TABLE_NAME - таблица на источние
DML_TYPE - тип DML операции
SOURCE_ID - собственно primary key (ID) на источнике

хочу обновлять этот лог GG'ом, но столкнулся с проблемой.
GG сравнивает первичные ключи, ну и соответственно допускает (в рамках моей затеи) только INSERT операции (и то, пока PK источника и приёмника не пересекутся),
для остальных сразу отваливается с ошибкой Error ORA-01403: no data found.

я конечно наколхозил, играясь с RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE))
но вот DELETEROWMISSING не победил, а мне удалённые тоже нужны.

может как то можно отключить репликацию по primary key или эту проверку?

в итоге сейчас у меня следующее:

MAP source_table, TARGET target_table,
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)),
--RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)),
SQLEXEC (ID SEQNUM, QUERY "SELECT SQ_GG.NEXTVAL AS SQ FROM DUAL", NOPARAMS),
COLMAP (usedefaults,
PKID = @GETVAL(SEQNUM.SQ),
TABLE_NAME = 'source_table',
DML_TYPE = @CASE(@GETENV('GGHEADER', 'OPTYPE'), 'SQL COMPUPDATE', 'U', 'PK UPDATE', 'U', 'INSERT', 'I', 'DELETE', 'D', 'N'),
SOURCE_ID = id
);
9 дек 15, 13:19    [18534881]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
GOSP
Member

Откуда:
Сообщений: 31
Я не понял суть вопроса, но ,наверняка, ответ - INSERTALLRECORDS
9 дек 15, 15:36    [18536019]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
XmarkerX
Member

Откуда:
Сообщений: 228
GOSP,

В точку!
Друзья, спасибо всем огромное!
9 дек 15, 16:19    [18536328]     Ответить | Цитировать Сообщить модератору
 Re: Goldengate - определить тип DML в на приёмнике  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
От вот этой конструкции лучшее избавиться - потенциально очень медленная штука
SQLEXEC (ID SEQNUM, QUERY "SELECT SQ_GG.NEXTVAL AS SQ FROM DUAL", NOPARAMS),
9 дек 15, 19:21    [18537378]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить