2012-04-13 1 views
0

Я отлаживаю свою базу данных, и я обнаружил, что репликация не работает в инструкции delete.Как найти следующий отчет о репликации SQL Server

Я смотрю исходные и целевые таблицы, и они одинаковы. Таким образом, кто-то удалил строку из источника и затем вернул ее обратно. (Удаление завершилось неудачно из-за ссылки FK на некоторые ручные данные, которые я не хочу каскад удалить.)

Есть ли способ узнать PK строки, которую он пытается удалить?

(Все Replication монитор покажет мне это имя FK, что является причиной удаления заявления на провал.)

ответ

1

Есть несколько способов. Я расскажу вам легкий (потому что я ленив). Поместите трассировку на подписчика для выполнения неудачных процедур хранимой процедуры. Вы должны получить хит для одного, который называется что-то вроде sp_MSdel_table (где table - это имя вашей таблицы). Аргумент (ы) этой процедуры будет основным ключом записи, которую он пытается удалить.

Легкий способ номер два, чтобы модифицировать sproc определены в предыдущем методе, не сердись на недостающий подряд (в конце концов, это просто будет удалить его, так тот факт, что это он сейчас отсутствует не что большой сделка). У вас могут быть другие проблемы, связанные с конвергенцией, но, по крайней мере, вы можете снова вернуть свои команды. (EDIT: Просто заметили причину вашей проблемы. Я бы посоветовал не иметь ограничений FK у подписчика, так как всякая ссылочная целостность должна быть решена у издателя. Я сделаю вашу репликацию быстрее, когда SQL не нужно проверять что каждый раз, когда он применит вставку, обновление или удаление).

Жесткий путь номер один включает в себя просмотр ошибки в мониторе репликации, отмечая, что указан идентификатор транзакции и порядковый номер. Затем вы используете sproc в базе данных распространения, чтобы получить текст выполняемой команды.

Жесткий путь номер два включает в себя различие таблиц либо с tablediff.exe, что-то вроде SQLCompare от RedGate, либо с рулоном-присоединением к связанным серверам, чтобы показать разницу. Храните это в своем заднем кармане на всякий случай, если один из других методов с одним рядом друг с другом, упомянутый выше, не сделает это за вас. Мой порог для таких вещей составляет около трех. YMMV.

Смежные вопросы