Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Streams ORA-26786 / 5 сообщений из 5, страница 1 из 1
26.09.2017, 17:53
    #39526658
Модест
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Streams ORA-26786
Всем привет.

Столкнулся со следующей проблемой. Пытаюсь реализовать репликацию. Во время репликации нужно менять значение одного из полей. Проблема в том, что когда в базе источнике апдейтится это поле, то возникает ошибка ORA-26786. Что конечно логично, так как данные действительно разные, я их сам поменял в момент предыдущей репликации.
Пока в голову пришел только грубый вариант, сделать ручками апдейт нужной мне строчки (её еще найти надо, я пока не знаю всегда ли это можно будет сделать), и потом вызвать lcr.execute. Вариант мне не нравится, я еще не пробовал, но он уже выглядит по-дебильному. Уверен что есть способ поизящнее.
Приведу пример.
Есть таблица
Код: plsql
1.
2.
3.
create table zzz_table
(id number,
 value number);



В ней вставляется строчка
Код: plsql
1.
insert into zzz_table values (1, 1)



Эта транзакция реплицируется в удаленную табличку
Код: plsql
1.
2.
3.
create table zzz_table_remote
(id number,
 value number)



Алгоритм изменения поля value возмем очень простой, value+1
Оракл Стримс вставляет запись
Код: plsql
1.
insert into zzz_table_remote values (1, 2)



После этого не проходит репликация на табличку zzz_table_remote, так как поля zzz_table.value и zzz_table_remote.value конфликтуют.
...
Рейтинг: 0 / 0
27.09.2017, 13:03
    #39527069
Filo & Peri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Streams ORA-26786
DBMS_APPLY_ADM.SET_PARAMETER('APPLY01', 'compare_key_only', 'N')
...
Рейтинг: 0 / 0
27.09.2017, 13:04
    #39527070
Filo & Peri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Streams ORA-26786
то есть Y
...
Рейтинг: 0 / 0
27.11.2017, 20:26
    #39560178
Модест
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Streams ORA-26786
Filo & Peri,

Круто, спасибо. Правда я заюзал другой метод, dbms_apply_adm.copare_old_values.

Но возникла другая проблема, но похожая.

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

Пробовал вообще не добавлять поле в dml_handler (да, я делаю через него), пробовал добавлять поле только со старыми value_type. В первом случае выставляет налл, во втором значение что добавлено вместе с полем.

Как быть?:) Неужто придется лезть и селектить из целевой таблики?
...
Рейтинг: 0 / 0
27.11.2017, 20:50
    #39560181
Модест
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle Streams ORA-26786
Вопрос снят. Оба способа рабочие. Тупил я:) Всем спасибо.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle Streams ORA-26786 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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