return (T)(object)(employee);
return default(T);
Это дает вам таблицу, против которой указана ошибка
use distribution
go
select * from dbo.MSarticles
where article_id in (
select article_id from MSrepl_commands
where xact_seqno = 0x0003BB0E000001DF000600000000)
И это даст вам команду (и первичный ключ (то есть строку), против которой выполнялась команда)
exec sp_browsereplcmds
@xact_seqno_start = '0x0003BB0E000001DF000600000000',
@xact_seqno_end = '0x0003BB0E000001DF000600000000'
Я отвечу на свой собственный вопрос с обходным решением, которое я закончил тем, что использовал.
К сожалению, я не мог выяснить, какая таблица вызывала проблему через интерфейс репликации sql server (или журнал событий в этом отношении). Это просто не сказало.
Таким образом, следующая вещь, о которой я думал, была, "Что, если я мог бы заставить репликацию продолжаться даже при том, что существует ошибка?" И о чудо, существует путь. На самом деле это легко. Существует специальный профиль Агента Распределения, названный, "Продолжают ошибки непротиворечивости данных". Если Вы включите это, то эти типы ошибок будут просто зарегистрированы и переданы. После того как это посредством применения транзакций и потенциально входа ошибок (я только встретился два), затем можно возвратиться и использовать данные RedGate SQL, Выдерживают сравнение (или некоторый другой инструмент), чтобы сравнить две базы данных, сделать любые исправления подписчику и затем запустить репликацию, работающую снова.
Следует иметь в виду, чтобы это работало, Ваша публикуемая база данных должна будет быть "тихой" во время части процесса, где Вы разность и фиксируете абонентскую базу данных. К счастью у меня была та роскошь в этом случае.
Если бы Ваша база данных не является непомерно большой, я остановил бы репликацию, переснимок и затем перезапустил бы репликацию. Эта technet статья описывает шаги.
Если бы это вышло из синхронизации из-за пользователя, случайно изменяющего данные по копии, то я установил бы необходимые полномочия предотвратить это.
Эту статью репликации стоит прочитать.
Конечно, если вы проверяете ошибку, когда репликация терпит неудачу, она также сообщает вам, какая запись является неисправной, и вы можете извлечь эти данные из основной системы и просто вставить их на подписчик.
Это лучше, чем пропуск ошибок, поскольку в случае сравнения данных SQL он блокирует таблицу для сравнения, и если у вас есть миллионы строк, это может занять много времени.
Tris
Изменение профиля на "Продолжить ошибки консистенции данных" не всегда срабатывает. Очевидно, что это уменьшает или сводит на нет ошибку, но вы не получите все нужные данные. Это пропустит строки, в которых происходит ошибка, и, следовательно, вы не получите точных данных.