Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Опять Merge репликация...  [new]
МаксимБ
Guest
Всем добрый день!
У меня такая ситуация - есть 2 компьютера, на которых стоит SQLServer 2000. Между ними настроена репликация сведением, в репликации участвуют 4 таблицы. Данные в эти таблицы пишуться на каждой машине свои, но иногда, на обе машины приходит один сигнал, и следовательно получается, что записи в таблицах на двух машинах одинаковые. После репликации окажеться, что в каждой таблице будет две одинаковые записи.
Как можно этого избежать?
1 окт 03, 13:49    [359257]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
Чистить по ночам наверное придется.
1 окт 03, 14:41    [359375]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Что значит "две одинаковые записи"? Primary key есть? Значит, будут разные.
1 окт 03, 14:44    [359387]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
МаксимБ
Guest
Так ведь агент репликации смотрт по своему идентифкатору rowguid.
1 окт 03, 14:55    [359414]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Еще раз. Что для вас означает "две одинаковые записи"? Не хотите отвечать - приведите структуру таблицы с указанием ее констрейнтов и индексов.

И еще - не знаю как другим посетителям форума, а мне выражение "на обе машины приходит один сигнал" ни о чем не говорит применительно к записываемым в таблицу данным.
1 окт 03, 16:58    [359738]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
МаксимБ
Guest
Постораюсь объяснить -
Есть два компьютера, на каждом из них, соответственно, установлен SQL. При нормальной работе(есть связь между компами) данные пишуться только в таблицы на один сервер, второй резервный. Как только связь между двумя базами данных проподает, данные начинают писаться в таблицы на обоих компах. Следовательно после восстановления связи проходит репликация, которая делает данные на обоих серверах идентичными, но проблема в том, что те данные, которые записались в период времени, пока небыло связи, уже имеются на второй БД. Но так-как агент репликации о новизне записи отслеживает по полю rowguid, то для него это тоже новые записи и он(агент) их спокойно реплицирует, а у меня в итоге получается две одинаковые записи (я не беру во внимание поле rowguid).
1 окт 03, 18:53    [359951]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Как один из вариантов - написать триггер на insert, который будет проверять, что дубликат уже есть и откатывать действие. Соответственно, вторая такая же запись, пришедшая с репликационного партнера, не вставится на текущий сервер и при следующем сеансе синхронизации откатится на том, где она изначально была вставлена.
2 окт 03, 11:11    [360520]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Вместо триггера можно повесить unique constraint, если проверка уникальности не будет включать в себя огромную кучу полей. Поведение при репликации получите то же самое.
2 окт 03, 11:28    [360565]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
МаксимБ
Guest
Народ!
А может кто-нибудь подскажет как правильно написать тригер на insert, может у кого уже есть готовый.
Я просто пробовал ставить тригер, а он как-то криво работал.
Здесь-же наверно надо instead of insert triger, что-бы он не вставлял дубликаты записей. Проверку наврное можно помтавить по полям dtime(datetime) и id(идентификатор определённого сообщения или сигнала).
Заранее благодарен, если кто-то подскажет как правильно напсать этот тригер!
2 окт 03, 12:56    [360783]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Я просто пробовал ставить тригер, а он как-то криво работал.
Что значит "криво"? Как выглядел этот триггер? Давайте вразумительную информацию.

Здесь-же наверно надо instead of insert triger, что-бы он не вставлял дубликаты записей.
Чушь. Обычного after триггера выше крыши хватит.

Проверку наврное можно помтавить по полям dtime(datetime) и id(идентификатор определённого сообщения или сигнала).
В этом случае даже триггер не нужен. Unique constraint на эти два поля вместе - и все.
2 окт 03, 14:19    [361013]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
Дополню маленько - нужно сделать не unique constraint, а unique index с опцией ignore_dup_key.
2 окт 03, 14:59    [361120]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
МаксимБ
Guest
Если я делаю уникальный индекс по этим 2 полям, то агент реплкации вываливает ошибку, что не может вставить данные в таблицу, т.к. там уникальный индекс!
2 окт 03, 15:29    [361222]     Ответить | Цитировать Сообщить модератору
 Re: Опять Merge репликация...  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
c опцией ignore_dup_key
2 окт 03, 15:49    [361296]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить