Этим утром после выполнения планового развертывания двух новых таблиц в базе данных я заметил, что репликация транзакций остановилась более чем на 3 часа. Когда репликация возобновилась, репликация продолжилась через 3+ часа, как ни в чем не бывало, оставив 3+ часовой промежуток в данных подписчика. Например, репликация остановилась в 3:30, а затем возобновилась в 6:30, но с 3:30 до 6:30 данные не реплицировались.
Не удалось обнаружить ошибок репликации, ошибок базы данных / сервера, а монитор репликации показал нулевую задержку. Журнал транзакций был довольно большим (61% емкости), но в остальном ошибок не обнаружено. В течение 3-часового периода, когда ничего не реплицировалось, процедура sp_replmonitorsubscriptionpendingcmds показала, что ожидающих транзакций не было.
Мне удалось определить, что данные перестали поступать, потому что у нас есть таблица, в которой постоянно регистрируются события приложений. Единственное задание, выполнявшееся в этот период, - перестроение индекса большой таблицы ~ 1 миллиард строк. Задание началось за 30 минут до остановки репликации и длилось 40 минут.
Наша среда состоит из двух больших баз данных, настроенных для одноранговой репликации транзакций. Мы не используем окружающую среду, как можно было бы ожидать. Вместо чтения и записи в обе БД одна база данных является нашей основной БД, ориентированной на клиента, а вторичная - для отчетов в реальном времени. Первоначально мы рассматривали одноранговую сеть как дешевое решение для аварийного восстановления в случае повреждения основной БД. На сегодняшний день мы не использовали его как таковое, и, оглядываясь назад, следовало бы вместо этого использовать простую репликацию транзакций.
Как только репликация снова начала течь между базами данных издателя и подписчика, монитор репликации показал некоторую задержку, а процедура sp_replmonitorsubscriptionpendingcmds показала ожидающие транзакции. Примерно через 90 минут задержка была равна нулю, и все вернулось к норме, но в данных подписчика наблюдался перерыв в 3 часа.
Не понимаю, как это происходит без ошибок? Я бы предположил, что если бы репликация внезапно остановилась, это произошло бы из-за исключения. Я немного погуглил и нашел некоторую информацию о стойлах агента репликации, но это было безрезультатно. Я понятия не имею, что случилось, и дальше особо нечего. Кто-нибудь знает лучший способ решить эту проблему? Кто-нибудь испытывал подобное в прошлом? Может ли кто-нибудь помочь мне указать правильное направление? Любая помощь будет принята с благодарностью.