Ошибка репликации SQL «строка не найдена»

  1. Если у вас есть объект, тогда вам нужно указать тип
    return (T)(object)(employee);
    
  2. , если вам нужно вернуть значение null.
    return default(T);
    
10
задан jeremcc 19 February 2009 в 22:46
поделиться

5 ответов

Это дает вам таблицу, против которой указана ошибка

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'
11
ответ дан 3 December 2019 в 16:54
поделиться

Я отвечу на свой собственный вопрос с обходным решением, которое я закончил тем, что использовал.

К сожалению, я не мог выяснить, какая таблица вызывала проблему через интерфейс репликации sql server (или журнал событий в этом отношении). Это просто не сказало.

Таким образом, следующая вещь, о которой я думал, была, "Что, если я мог бы заставить репликацию продолжаться даже при том, что существует ошибка?" И о чудо, существует путь. На самом деле это легко. Существует специальный профиль Агента Распределения, названный, "Продолжают ошибки непротиворечивости данных". Если Вы включите это, то эти типы ошибок будут просто зарегистрированы и переданы. После того как это посредством применения транзакций и потенциально входа ошибок (я только встретился два), затем можно возвратиться и использовать данные RedGate SQL, Выдерживают сравнение (или некоторый другой инструмент), чтобы сравнить две базы данных, сделать любые исправления подписчику и затем запустить репликацию, работающую снова.

Следует иметь в виду, чтобы это работало, Ваша публикуемая база данных должна будет быть "тихой" во время части процесса, где Вы разность и фиксируете абонентскую базу данных. К счастью у меня была та роскошь в этом случае.

9
ответ дан 3 December 2019 в 16:54
поделиться

Если бы Ваша база данных не является непомерно большой, я остановил бы репликацию, переснимок и затем перезапустил бы репликацию. Эта technet статья описывает шаги.

Если бы это вышло из синхронизации из-за пользователя, случайно изменяющего данные по копии, то я установил бы необходимые полномочия предотвратить это.

Эту статью репликации стоит прочитать.

3
ответ дан 3 December 2019 в 16:54
поделиться

Конечно, если вы проверяете ошибку, когда репликация терпит неудачу, она также сообщает вам, какая запись является неисправной, и вы можете извлечь эти данные из основной системы и просто вставить их на подписчик.

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

Tris

0
ответ дан 3 December 2019 в 16:54
поделиться

Изменение профиля на "Продолжить ошибки консистенции данных" не всегда срабатывает. Очевидно, что это уменьшает или сводит на нет ошибку, но вы не получите все нужные данные. Это пропустит строки, в которых происходит ошибка, и, следовательно, вы не получите точных данных.

0
ответ дан 3 December 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: