Исправить некорректную репликацию транзакций в SQL Server 2005 - PullRequest
1 голос
/ 23 февраля 2012

Я настроил репликацию транзакций в SQL Server 2005 и отключил триггер DDL, созданный при настройке репликации.После небольшой игры (чтобы понять, что произойдет), транзакция прерывается, потому что я изменил столбец на издателе на VARCHAR, то есть INT на подписчике.Я нашел две процедуры, которые помогут пропустить эту ошибочную транзакцию

EXEC sp_helpsubscriptionerrors
    @publisher='DB1',@publisher_db='repl_test',@publication='repl_test_table',
    @subscriber='DB2',@subscriber_db='repl_test'

, которая дает мне набор результатов, где я вижу ошибку (сбой при преобразовании VARCHAR в INT)

id time                    [...] error_code error_text                                             xact_seqno
24 2012-02-23 08:33:35.313 [...] 8114       Fehler beim Konvertieren des varchar-Datentyps in int. 0x00139791000CC79C000600000000
24 2012-02-23 08:33:35.310 [...] 8114       Fehler beim Konvertieren des varchar-Datentyps in int. 0x00139791000CC79C000600000000
[...]

и я использую xact_seqno из результата (0x00139791000CC79C000600000000), чтобы выполнить следующую процедуру на следующем шаге

EXEC sp_setsubscriptionxactseqno
    @publisher='DB1',@publisher_db='repl_test',@publication='repl_test_table',
    @xact_seqno=0x00139791000CC79C000600000000

, которая скажет:

Ошибка 20017 -Подписка на подписчика не существует.

Да?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Аааа, взглянув на внутренний код из sp_setsubscriptionxactseqno, можно увидеть, что эту процедуру нужно выполнить в базе данных подписки (а не в базе данных distributionгде sp_helpsubscriptionerrors должно быть выполнено) ... но это не задокументировано в MSDN.

0 голосов
/ 23 февраля 2012

Работало ли у вас выполнение sp_setsubscriptionxactseqno на подписчике?

Вы также можете использовать параметр агента распространения -SkipErrors 8114 , чтобы временно пропустить этот тип ошибки.

Пропуск ошибок при репликации транзакций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...