|
|
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Работает репликация базы ПАРУС8 в режиме multimaster. Настроено автоматическое разрешение конфликтов на уровне данных в режиме Site Priority Как настроить автоматическое разрешение конфликтов на уровне транзакций(?): 1) одновременно отрабатывается на двух сайтах один и тот же документ 2) конфликт данных этого документа автоматически разрешается в режиме Site Priority НО!!! 3) через триггеры генерятся данные в других таблицах, и при репликации этих данных возникают ошибки по constrain (получается дублирование данных, которые должны быть уникальные) Если сам документ ORACLE идентифицирует как один и тот же документ, то вторичные (итоговые) данные, которые создаются при его отработке физически разные, а логически одинаковые. Получается, что нужно отменить уже проведенную транзакцию на подчиненном сайте, а затем передать изменения с главного сайта. Какие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2003, 16:09 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Я еще не дочитал сам до конца, но в Oracle9i Replication Management API Reference аккурат после описания Site Priority Conflict Resolution Methods идет описание Creating Conflict Resolution Methods for Uniqueness Conflicts: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96568/rarconfl.htm#17618 Правда, тут рассматривается только уведомление о наличии конфликта, но зато ниже идет Creating Conflict Avoidance Methods for Delete Conflicts: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96568/rarconfl.htm#19153 Подобные вещи не рассматривались? Т.е. ты разрешаешь конфликт на одном из сайтов, остается передать данные на другой. Немного непонятно, если репликация multimaster, то почему один из сайтов назван главным, а другой подчиненным? Или под этим подразумевается Site Priority? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2003, 17:13 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Репликация базы в режиме multimaster подразумевает абсолютно идеентичные базы. Разница между ними только в том, что один из них master-defenition site - с котрого происходило создание репликации. А во всём остальном никакой разницы. Поэтому если у тебя начинают делать update одной и той-же логической записи в разных базах - то естественно что изменеения пойдут в обе стороны. Поэтому будут и конфликты. Я подозреваю, что ты используешь асинхронную репликацию. Я например использую асинхронную мультимастер- репликацию, но я никогда не использую одновременно обе БД. Вероятно тебе нужна синхронная репликация. Вот выдержка из доки по репликации. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. Хочу оборатить внимание на Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2003, 17:53 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Репликация асинхронная. Сайты идентичные, но один является мастер-сайтом и в методе Site priority определены приоритеты сайтов на изменение и удаление данных. При этом разделены на каждом сайте секвенции для генерации идентификаторов. Денис, уточняю, проблема не на уровне данных, на котором репликация настроена и все работает корректно с автоматическим разрешением конфликтов при одновременном изменении/удалении. Моя проблема на уровне управления транзакциями: одновременная отработка документа в ПАРУСе порождает длинные транзакции с изменением многих связанных таблиц и созданием новых данных в итоговых таблиц (например, товарные остатки). Так вот, именно в итоговых таблицах определены constraints, которые проверяют уникальность по нескольким полям одновременно: товарный остаток по партии может быть определен только однократно. При встречных транзакциях на каждом сайте порождается одна запись по товарному остатку ->> возникает ошибка. Спасибо, жду новых советов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 07:47 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Мда....Для кого я всё это писал.... "Работает репликация базы ПАРУС8 в режиме multimaster.... " "...Сайты идентичные, но один является мастер-сайтом..." Почему люди такие упрямые? В режиме multimaster - оба сайта являются мастер-сайтами. Неужели это так трудно для понимания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 09:40 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Т.е. ты умеешь в рамках одной транзакции определить, какую из записей дубликатов следует оставить, и если не было бы constraint'а, то все бы отработало правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 10:54 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Уточняю: один из сайтов является master definition site (извиняюсь за неточность, спасибо за замечание). Также настроены приоритеты сайтов для одновременного изменения одних и тех же данных на разных сайтах. Денис - если одна запись одновременно изменена (или на одном сайте удалена, а на втором изменена), то метод site priority автоматически разрешает конфликт в пользу сайта с большим приоритетом. Но это стандартные функции и они работают, когда ORACLE может идентифицировать изменение ОДНИХ И ТЕХ ЖЕ данных (логически и физически) на РАЗНЫХ сайтах. Проблема на другом уровне (описана выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 12:22 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Репликация асинхронная, потому что это требования клиента: ненадежный канал связи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 12:24 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
В этом случае по определению неверно, что пользователи разных БД могут изменять одни и те-же данные. Если канал совсем упал, при асинхронной репликации отложенные транзакции будут копиться до тех пор пока не восстановиться канал и не запуститься процесс перекачки. И за это время, пока нет связи между данными - юзеры даже не будут знать, что связь между базами пропала. За это время можно с обеих сторон одни и теже данные заизменять множество раз. Вот конкретный пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 12:41 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
SB, о словах я не спорю, пример прямо как в кино. Но он так же подтвреждает, что помимо локальной транзакции на каждом из сайте необходима глобальная транзакция (но клиенту требуется асинхронный режим). Соответственно, для критичных процедур (типа выдачи 600000 рублей г. Иванову) при долгосрочном потере связи локальные транзакции должны ОТКАТЫВАТЬСЯ автоматически. Для встречных транзакций требуется ТО ЖЕ САМОЕ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 12:54 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
У тебя сторонняя система, поэтому ИМХО вносить изменения в ее структуру/код следует в самую последнюю очередь. Остаются штатные средства Оракла разрешения конфликтов при асинхронной репликации. Следовательно, фразу "репликация настроена и все работает корректно с автоматическим разрешением конфликтов при одновременном изменении/удалении." я бы уточнил: репликация настроена и все работает при изменении/удалении _именно_ одной записи. Теперь надо настраивать репликацию на разрешение конфликтов уникальности при добавлении записей с разных сайтов. Из документации мне показались интересны следующие главы: Oracle9i Replication Management API Reference Configure Conflict Resolution Creating Conflict Resolution Methods for Uniqueness Conflicts http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96568/rarconfl.htm#17618 Но если не удается разрешить конфликт "with Oracle's pre-built conflict resolution methods" , то может быть стоит рассмотреть следующее: User-Defined Conflict Resolution Methods http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96568/raruserc.htm#9601 ИМХО можно определить, какая из записей-дубликатов лишняя, и удалить ее, либо каки-то еще способом обеспечить уникальность. Я правильно понял задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 13:00 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
"при долгосрочном потере связи локальные транзакции должны ОТКАТЫВАТЬСЯ автоматически. " Может быть они и откатятся. Но деньги уже нет. Если проблемы с каналом и нельзя сделать синхронную репликацию. При этом у пользователей физически находящихся должна быть возможность изменения общих данных: В этом случае необходимо сделать так: 1) База с которой непосредственно работают пользователи должна быть только одна. 2)Может быть множество других баз на которые будут перетекать данные из рабочей, но данные на этих серверах не должны изменяться непосредственно юзерами. 3)Для обеспечения работы с базой необходимо использовать http-сервер по SSL соединению(https), реализованный с помощью ПО напримео на сервлетах итд итп. Можно использовать TerminalServer на БД. Тогда опять-же все будут работать с одной базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 13:03 |
|
||
|
Репликация multimaster
|
|||
|---|---|---|---|
|
#18+
Решение с терминалом оптимальное. И клиент практически согласился. А репликация остается вариантом резервирования данных и обеспечения работы удаленного офиса при аварийной ситуации. Вопрос принципиальный: можно настроить репликацию в ОРАКЛе для управления локальными транзакциями или это в принципе невозможно. Иначе 600000 действительно уйдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2003, 14:26 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32133533&tid=1991162]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 472ms |

| 0 / 0 |
