Удаление строк из таблицы SQL, помеченной для репликации - PullRequest
2 голосов
/ 17 сентября 2008

Я ошибочно удаляю все строки из таблицы MS SQL 2000, которая используется при репликации слиянием (таблица находится на издателе). Затем я усугубил проблему, используя операцию DTS для извлечения строк из резервной базы данных и повторного заполнения таблицы.

Это создало следующую проблему: Операция удаления помечала строки для удаления на клиентах, но операция DTS обходит триггеры репликации, поэтому импортированные строки не помечаются для вставки подписчикам. Фактически подписчики теряют данные, хотя они находятся на издателе.

Поэтому я подумал: «Не беспокойтесь», я просто снова удаляю строки, а затем добавляю их корректно с помощью оператора вставки, и они будут помечены для вставки подписчикам.

Это моя проблема: Я не могу удалить строки DTSed, потому что я получаю «Невозможно вставить строку с повторяющимся ключом в объект« MSmerge_tombstone »с уникальным индексом« uc1MSmerge_tombstone ».» ошибка. Я хотел бы как-то удалить строки из таблицы, минуя триггер репликации слиянием. Это возможно? Я не хочу удалять и повторять репликацию, потому что подписчиками являются более 50 устройств на базе Windows Mobile.

Редактировать: я пробовал команду таблицы усечений. Это приводит к следующей ошибке «Невозможно усечь таблицу xxxx, поскольку она опубликована для репликации»

Ответы [ 6 ]

2 голосов
/ 17 сентября 2008

Возможно, вам придется усечь таблицу и сбросить поле идентификатора обратно на 0, если вам нужно, чтобы вставленные строки имели одинаковый идентификатор. Если нет, просто обрежьте, и все должно быть в порядке.

2 голосов
/ 17 сентября 2008

Вы пробовали обрезать таблицу?

1 голос
/ 17 сентября 2008

Просмотр sp_mergedummyupdate

1 голос
/ 17 сентября 2008

Вы также можете временно удалить уникальный индекс и добавить его обратно, когда закончите.

0 голосов
/ 17 сентября 2008

Спасибо за советы ... В конце концов я нашел решение:

Я удалил триггер удаления слияния из таблицы
Удалены строки DTSed
Воссоздал триггер удаления слияния
Правильно добавлены мои строки с помощью оператора вставки.

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

0 голосов
/ 17 сентября 2008

Будет ли создание второй таблицы вариант? Вы можете создать вторую таблицу, заполнить ее необходимыми данными, добавить ограничения / индексы, затем удалить первую таблицу и переименовать вторую таблицу. Это должно дать вам данные с правильными ключами ... и все это должно состоять из операторов SQL, которым разрешено ограничивать репликацию. Это, вероятно, не самое лучшее по производительности ... и определенно наложит некоторый риск.

Я не пробовал эту первую руку в реплицированной среде ... но, по крайней мере, стоит попробовать.

...