Как восстановить репликацию после сбоя сервера

8

У нас было две базы данных на одном экземпляре SQL Server 2005 с репликацией транзакций между ними (3 таблицы в качестве статей). Этот сервер действовал как издатель и распространитель.

Тогда RAID на сервере не удалось. Однако нам удалось отсоединить и скопировать почти все .mdfфайлы перед сбоем.

После восстановления системы мы переустановили SQL Server, восстановили системные базы данных (master, model, msdb) и разместили .mdfфайлы по тем же путям. Так и началось.

Проблема появилась с репликацией. Папка « Локальные публикации » была пуста, хотя папка « Локальные подписки » содержала соответствующую подписку. Когда я попытался добавить новую публикацию, я получил:

Мастер New Publication Wizard обнаружил одну или несколько ошибок при получении названий публикаций.

Возникла исключительная ситуация при выполнении оператора или пакета Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

Неверное имя объекта 'dbo.syspublications'. (Microsoft SQL Server, ошибка: 208)

Я решил попробовать удалить левую подписку (в конце концов мне удалось) и отключить публикацию и распространение на сервере, что дало мне:

SQL Server не удалось отключить публикацию и распространение на «someserver».

Неверное имя объекта 'dbo.syssubscription'. Число транзакций после EXECUTE указывает на отсутствие оператора COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 0, текущий счетчик = 1. Счетчик транзакций после EXECUTE указывает, что отсутствует оператор COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 0, текущий счетчик = 1. Счетчик транзакций после EXECUTE указывает, что отсутствует оператор COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 0, текущий счетчик = 1. Счетчик транзакций после EXECUTE указывает, что отсутствует оператор COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 0, текущий счетчик = 1. Счетчик транзакций после EXECUTE указывает, что отсутствует оператор COMMIT или ROLLBACK TRANSACTION. Предыдущий счетчик = 0, текущий счетчик = 1. Изменен контекст базы данных на «ведущий». (Microsoft SQL Server, ошибка: 208)

Кажется, что некоторая информация не была восстановлена ​​из резервных копий базы данных системы (возможно, в distributionбазе данных что-то отсутствует).

Также я пытался следовать ответу, приведенному в невозможности отключить публикацию и распространение . Но безуспешно. Я пытался создать syspublicationsкак в masterи distribution, но ничего не изменилось.

Итак, как я могу заставить репликацию работать на этом сервере?

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

System Tables В подпапке проблемной базы данных отсутствуют таблицы репликации, которые создаются при публикации базы данных.

В мониторе репликации я вижу эти старые подписки, хотя они не доступны в папке репликации .

Хорг
источник

Ответы:

4

В конце я просто сделал то, что хотел сервер, то есть создал все таблицы «публикации» (* dbo.MSpeer _ ** и * dbo.sys **) в проблемной базе данных (той, которая была издателем), через таблицу сценариев Как -> СОЗДАТЬ В диалог. Благодаря этому серверу я смог отключить публикацию и распространение. Тогда мне нужно было только перенастроить репликацию.

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


Дополнительная информация от Зейна , изначально оставленная в комментарии:

Таблицы dbo.MSpeer_ * и dbo.sys * также можно создать, настроив распространителя / издателя на другом сервере с установленным SQL Server. Это создаст эти таблицы в базе данных, которую вы установили для публикации. Смотрите -> Таблицы -> Системные таблицы в SSMS.

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

Хорг
источник