Удаление строк из таблицы SQL, помеченных для репликации

StackOverflow https://stackoverflow.com/questions/83475

Вопрос

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

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

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

Это моя проблема:Я не могу удалить строки DTSED, потому что я получаю «невозможно вставить дубликат строки ключей в Object 'msmerge_tombstone» с уникальным индексом' uc1msmerge_tombstone '. " ошибка.Я хотел бы каким-то образом удалить строки из таблицы, минуя триггер репликации слиянием.Это возможно?Я не хочу удалять и переделывать репликацию, потому что подписчиками являются более 50 устройств Windows Mobile.

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

Это было полезно?

Решение 6

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

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

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

Другие советы

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

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

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

Посмотрите sp_mergedummyupdate.

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

Я не пробовал это на собственном опыте в воспроизводимой среде... но, возможно, попробовать стоит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top