Я восстановил базу данных из резервной копии. База данных использует репликацию для публикации на другом сервере. Предполагая, что восстановление базы данных нарушит репликацию, я попытался удалить репликацию и заново создать ее (у нас есть сценарий для повторного создания с нуля). Я не совсем уверен, что именно я сделал, но сейчас он в совершенно запутанном состоянии, и я не могу это исправить.
Сначала я пытаюсь избавиться от подписки (на сервере издателя):
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
Это похоже на работу. SELECT * FROM syssubscriptions
не показывает результатов. Глядя на сервер подписчика, SSMS> {SubscriberServer}> Репликация> Локальные подписки - подписки там нет.
Тогда я пытаюсь удалить публикацию. SSMS> {Сервер}> Репликация> Локальные публикации> {PublicationName}> Удалить. Это дает следующее сообщение об ошибке:
Could not delete publication 'PublicationName'.
Could not drop article. A subscription exists on it.
Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046)
Итак, я пытаюсь отбросить статьи:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
и получите эту ошибку:
Invalidated the existing snapshot of the publication. Run the Snapshot Agent again to generate a new snapshot.
Msg 14046, Level 16, State 1, Procedure sp_MSdrop_article, Line 75
Could not drop article. A subscription exists on it.
Итак, я пытаюсь запустить агент моментальных снимков и получаю следующее внутреннее исключение SQL:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Поэтому я попробовал альтернативный метод удаления статьи DELETE FROM sysarticles
. Кажется, это сработало - теперь я избавился от статей, но все равно получаю ту же ошибку «Невозможно удалить публикацию, потому что существует хотя бы одна подписка на эту публикацию» при попытке удалить публикацию.
Я также перезапустил SQL Server - не помогло.
Я не знаю, что здесь происходит и как мне это исправить?
Кстати, это то, что происходит, когда вы даете разработчику программного обеспечения, который знает достаточно, чтобы быть опасным, ключи к базе данных. К счастью, это не производственная среда ...
MSPublications
вdistribution
базе данных показывают, что публикация действительно исчезла. Это ожидается?У меня был беспорядок с репликацией и решил это с этим
Это и:
Спасители при очистке перепутали репликации.
источник
Восстановление базы данных нарушит репликацию, так что это нормально. Кроме того, большинство других сообщений об ошибках просто следуют, потому что вы не смогли удалить все подписки (или, по крайней мере, так считает SQL).
Вы знаете, что у вас есть издатель (исходная база данных) и хотя бы один подписчик (целевая база данных), и что это два разных сервера. Я просто хочу упомянуть, что есть также дистрибьютор, который находится на одном из этих серверов или на другом, и, вероятно, в базе данных, называемой распределением. Иногда там есть какая-то полезная информация, а иногда вещи падают, потому что информация между этими тремя не совпадает.
В любом случае, когда вы проверяли подписчиков, вы также проверяли этот раздел на сервере издателя, чтобы убедиться, что больше ничего не указано в списке? Если вы найдете что-нибудь, попробуйте удалить его вручную:
Но если предположить, что они действительно исчезли, попробуйте это в базе данных издателя:
Дайте нам знать, как оно идет. Репликация, когда она попадает в это состояние, смущает меня и других хороших администраторов баз данных, не имеющих никакого отношения к тому, чтобы быть разработчиком вообще :-)
источник
Единственный способ избавиться от артефактов фантомной репликации - это удалить подписки, статьи, публикации. Если подписки по-прежнему существуют, то заново создайте публикацию, включая подписчика-фантомов. Это, кажется, работает с более старыми версиями особенно.
источник
это то, что я обычно делаю, когда у меня испорчена публикация.
это немного некрасиво, но это работало для меня много раз в разных средах. что вызывает это? что иногда трудно понять это, лучше иногда начинать с нуля, но даже для этого вам нужно очистить от текущей публикации , что неисправен.
all
residuals
просто чтобы поместить это в контекст:
Вот что я вижу из монитора репликации:
и когда я использую свой собственный монитор репликации с использованием T-SQL :
Вы можете видеть 2 строки в последнем окне ниже - и одна из них не должна быть там:
то же самое, когда я использую этот скрипт:
Сначала вы делаете то, что показано в других ответах выше, если это работает , это хорошо, иногда это работает, проблема решена.
это было бы более менее это:
Теперь, чтобы полностью избавиться от этой публикации, мы начнем с подключения к buscriber, а затем к издателю, а затем к распространителю, как показано ниже:
на этом этапе заново создайте публикацию, как вы это обычно делаете
затем поместите снимок для запуска
дождитесь завершения создания снимка
MAYBE YOU DONT NEED TO RUN THE SNAP
- попробуйтеwithout
запустить его сначала, большую часть времени он работает, также вы можете добавить 1-2small
публикации в публикацию, чтобы оснастка работала быстроно если вы запускаете моментальный снимок, вам нужно подождать, пока он не закончится, прежде чем вы сможете перейти к следующему шагу -
drop the publication
после этого вы генерируете сценарии
drop that publication
согласно рисунку ниже:надеюсь, что после этого, когда вы запустите наши оригинальные сценарии или посмотрите на монитор репликации, вы не увидите ошибочную публикацию, только хорошие, в моем случае только один:
источник
У меня была такая же проблема на моей предсерийной коробке, команда
похоже, работали над очисткой фиктивных подписок ...
источник