Я использую репликацию транзакций SQL с подписками по запросу для репликации баз данных (размещения собственной базы данных распространения) с нескольких серверов через VPN на центральный сервер. Первые 2 базы данных работают нормально, но третья вызывает у меня проблемы.
Мой сервер подписки - SQL 2008, все исходные системы - SQL 2005. Исходные базы данных имеют размер несколько 100 МБ и содержат данные аудита, поэтому просто медленно растут за счет добавления новых записей примерно со скоростью 1 КБ в секунду.
Что касается монитора репликации, журналы агента и журналы событий показывают, что все работает нормально, за исключением того, что в моей базе данных подписки нет данных.
Агент распространения, похоже, не хочет читать снимок (и, следовательно, исходное состояние и схему) от издателя. Новые транзакции не применяются, хотя кажется, что они поступают нормально, поскольку монитор репликации показывает такие вещи, как «5 транзакций с 10 командами доставлены». Я ожидал (как и в предыдущий раз) увидеть утверждения о BCPed данных в мониторе репликации.
Снимок находится на издателе в общей папке. Подписчик может просмотреть снимок ОК (\\ repldata), и папка альтернативного снимка указывает на него. Но агент распространения, похоже, не пытается его прочитать. Я попытался изменить путь к моментальному снимку на что-то некорректное, и даже не получил сообщения об отсутствии доступа к нему.
После множества поисков в Google и т. Д. Я обнаружил, что процедура sp_MSget_repl_commands вызывается подписчиком в базе данных распространения на издателе. Запуская профилировщик, я вижу, что он вызывается только для одного идентификатора агента. После повторной установки он вызывается для порядкового номера 0x0, как и ожидалось, поэтому я подумал, что это означает, что он будет искать снимок.
Однако, глядя на издателя, я вижу, что есть данные для двух агентов - агента моментальных снимков и агента чтения журнала (который выполняет запросы). Итак, я думаю, мне нужно сказать агенту распространения, чтобы он получил данные для обоих. Но как? и что еще важнее - почему? Он отлично работал на двух других серверах, которые я реплицировал.
Я не новичок в SQL, но это моя первая попытка репликации, поэтому не бойтесь обвинять меня в том, что я упустил что-то очевидное / глупое!
Я могу получить файлы журнала (например, от агента распространения), если хотите, но в них нет никаких ошибок - он просто запускается и начинает применять изменения агента чтения журнала.
Ура, Дэйв
Проверьте свойства публикации -> Снимок -> Расположение файлов моментальных снимков - убедитесь, что установлен флажок `` Поместить файлы в папку по умолчанию '', в моем случае он не был отмечен, вместо этого файлы в следующей папке были проверены с адресом местоположения (C: \ REPL), но у меня был мой дистрибьютор на другом сервере, кроме издателя, и адрес местонахождения вводил в заблуждение агента дистрибьютора.
Теперь у меня это работает, переделав его в 4-й раз, но, к сожалению, я не совсем уверен, как это сделать.
Единственное, что я вижу, отличается - это то, что агенты чтения снимков и журналов работают от имени администратора домена, а не локального администратора. Я не думаю, что это должно иметь какое-либо значение, но без сообщений об ошибках трудно сказать ...