Delete a Publication (Удаление публикации)
В этом разделе описывается удаление публикации в SQL Server с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).
В этом разделе
- Для удаления публикации используется:Среда SQL Server Management StudioTransact-SQLобъекты RMO;
Использование среды SQL Server Management Studio
Удалите публикации из папки локальных публикаций в SQL Server Management Studio.
Удаление публикации
- Подключитесь к издателю в Management Studio и разверните узел сервера.
- Раскройте папку Репликация , а затем папку Локальные публикации .
- Щелкните правой кнопкой мыши публикацию, которую требуется удалить, и выберите Удалить.
Использование Transact-SQL
Публикации могут быть удалены программно, с помощью хранимых процедур репликации. Какие именно хранимые процедуры для этого применяются, зависит от типа удаляемой публикации.
При удалении публикации опубликованные объекты базы данных публикации и связанные с ними объекты базы данных подписки не удаляются. При необходимости их необходимо удалить вручную, при помощи инструкции DROP .
Удаление публикации моментальных снимков или транзакций
- Выполните одно из следующих действий.
- Для удаления отдельной публикации в базе данных публикации на издателе выполните инструкцию sp_droppublication .
- Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение tran в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в режиме «вне сети», укажите значение 1 в параметре @force(необязательно). Укажите имя базы данных в параметре @dbname , если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).
Заметка Если задать значение 1 в параметре @force , в базе данных могут остаться объекты публикации, связанные с репликацией.
Удаление публикации слиянием
- Выполните одно из следующих действий.
- Чтобы удалить одну публикацию, выполните sp_dropmergepublication (Transact-SQL) на издателе в базе данных публикации.
- Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните процедуру sp_removedbreplication на издателе. Укажите значение merge в параметре @type. Если распространитель недоступен или база данных находится в подозрительном состоянии или в режиме «вне сети», укажите значение 1 в параметре @force(необязательно). Укажите имя базы данных в параметре @dbname , если процедура sp_removedbreplication не выполнялась в базе данных публикации (необязательно).
Заметка Если задать значение 1 в параметре @force , в базе данных могут остаться объекты публикации, связанные с репликацией.
Примеры (Transact-SQL)
В следующем примере показано удаление публикации транзакций и отключение функции публикации транзакций для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Delete a Pull Subscription или Delete a Push Subscription.
DECLARE @publicationDB AS sysname; DECLARE @publication AS sysname; SET @publicationDB = N'AdventureWorks'; SET @publication = N'AdvWorksProductTran'; -- Remove a transactional publication. USE [AdventureWorks2022] EXEC sp_droppublication @publication = @publication; -- Remove replication objects from the database. USE [master] EXEC sp_replicationdboption @dbname = @publicationDB, @optname = N'publish', @value = N'false'; GO
В следующем примере показано удаление публикации слиянием и отключение функции публикации слиянием для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе Delete a Pull Subscription или Delete a Push Subscription.
DECLARE @publication AS sysname DECLARE @publicationDB AS sysname SET @publication = N'AdvWorksSalesOrdersMerge' SET @publicationDB = N'AdventureWorks' -- Remove the merge publication. USE [AdventureWorks] EXEC sp_dropmergepublication @publication = @publication; -- Remove replication objects from the database. USE master EXEC sp_replicationdboption @dbname = @publicationDB, @optname = N'merge publish', @value = N'false' GO
При помощи объектов RMO
Публикации можно удалять программно с помощью объектов RMO. Классы RMO, используемые, чтобы удалить публикацию, зависят от типа удаляемой публикации.
Удаление публикации моментальных снимков или публикации транзакций
- Создайте соединение с издателем с помощью класса ServerConnection .
- Создайте экземпляр класса TransPublication.
- Задайте для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.
- Чтобы убедиться в существовании публикации, проверьте свойство IsExistingObject . Если значение этого свойства равно false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.
- Вызовите метод Remove .
- (Необязательно) Если в базе данных не существует других публикаций транзакций, базу данных можно отключить от публикации транзакций следующим образом.
- Создайте экземпляр класса ReplicationDatabase. В качестве значения для свойства ConnectionContext укажите экземпляр соединения ServerConnection , созданный на шаге 1.
- Вызовите метод LoadProperties . Если этот метод возвращает значение false, убедитесь, что база данных существует.
- Задайте для публикации свойства EnabledTransPublishing в значение false.
- Вызовите метод CommitPropertyChanges .
Удаление публикации слиянием
- Создайте соединение с издателем с помощью класса ServerConnection .
- Создайте экземпляр класса MergePublication.
- Задайте для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.
- Чтобы убедиться в существовании публикации, проверьте свойство IsExistingObject . Если значение этого свойства равно false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.
- Вызовите метод Remove .
- (Необязательно) Если в базе данных не существует других публикаций слиянием, базу данных можно отключить от публикации слиянием следующим образом.
- Создайте экземпляр класса ReplicationDatabase. Присвойте свойству ConnectionContext значение экземпляра ServerConnection из шага 1.
- Вызовите метод LoadProperties . Если этот метод возвращает значение false, проверьте, существует ли база данных.
- Задайте для публикации свойства EnabledMergePublishing в значение false.
- Вызовите метод CommitPropertyChanges .
Примеры (объекты RMO)
В следующем примере удаляется публикация транзакций. Если в этой базе данных не существует других публикаций транзакций, публикация транзакций также отключается.
// Define the Publisher, publication database, // and publication names. string publisherName = publisherInstance; string publicationName = "AdvWorksProductTran"; string publicationDbName = "AdventureWorks2022"; TransPublication publication; ReplicationDatabase publicationDb; // Create a connection to the Publisher // using Windows Authentication. ServerConnection conn = new ServerConnection(publisherName); try < conn.Connect(); // Set the required properties for the transactional publication. publication = new TransPublication(); publication.ConnectionContext = conn; publication.Name = publicationName; publication.DatabaseName = publicationDbName; // Delete the publication, if it exists and has no subscriptions. if (publication.LoadProperties() && !publication.HasSubscription) < publication.Remove(); >else < // Do something here if the publication does not exist // or has subscriptions. throw new ApplicationException(String.Format( "The publication could not be deleted. " + "Ensure that the publication exists and that all " + "subscriptions have been deleted.", publicationName, publisherName)); > // If no other transactional publications exists, // disable publishing on the database. publicationDb = new ReplicationDatabase(publicationDbName, conn); if (publicationDb.LoadProperties()) < if (publicationDb.TransPublications.Count == 0) < publicationDb.EnabledTransPublishing = false; >> else < // Do something here if the database does not exist. throw new ApplicationException(String.Format( "The database does not exist on .", publicationDbName, publisherName)); > > catch (Exception ex) < // Implement application error handling here. throw new ApplicationException(String.Format( "The publication could not be deleted.", publicationName), ex); > finally
' Define the Publisher, publication database, ' and publication names. Dim publisherName As String = publisherInstance Dim publicationName As String = "AdvWorksProductTran" Dim publicationDbName As String = "AdventureWorks2022" Dim publication As TransPublication Dim publicationDb As ReplicationDatabase ' Create a connection to the Publisher ' using Windows Authentication. Dim conn As ServerConnection = New ServerConnection(publisherName) Try conn.Connect() ' Set the required properties for the transactional publication. publication = New TransPublication() publication.ConnectionContext = conn publication.Name = publicationName publication.DatabaseName = publicationDbName ' Delete the publication, if it exists and has no subscriptions. If publication.LoadProperties() And Not publication.HasSubscription Then publication.Remove() Else ' Do something here if the publication does not exist ' or has subscriptions. Throw New ApplicationException(String.Format( _ "The publication could not be deleted. " + _ "Ensure that the publication exists and that all " + _ "subscriptions have been deleted.", _ publicationName, publisherName)) End If ' If no other transactional publications exists, ' disable publishing on the database. publicationDb = New ReplicationDatabase(publicationDbName, conn) If publicationDb.LoadProperties() Then If publicationDb.TransPublications.Count = 0 Then publicationDb.EnabledTransPublishing = False End If Else ' Do something here if the database does not exist. Throw New ApplicationException(String.Format( _ "The database does not exist on .", _ publicationDbName, publisherName)) End If Catch ex As Exception ' Implement application error handling here. Throw New ApplicationException(String.Format( _ "The publication could not be deleted.", _ publicationName), ex) Finally conn.Disconnect() End TryВ следующем примере удаляется публикация слиянием. Если в этой базе данных не существует других публикаций слиянием, публикация слиянием также отключается.
// Define the Publisher, publication database, // and publication names. string publisherName = publisherInstance; string publicationName = "AdvWorksSalesOrdersMerge"; string publicationDbName = "AdventureWorks2022"; MergePublication publication; ReplicationDatabase publicationDb; // Create a connection to the Publisher. ServerConnection conn = new ServerConnection(publisherName); try < // Connect to the Publisher. conn.Connect(); // Set the required properties for the merge publication. publication = new MergePublication(); publication.ConnectionContext = conn; publication.Name = publicationName; publication.DatabaseName = publicationDbName; // Delete the publication, if it exists and has no subscriptions. if (publication.LoadProperties() && !publication.HasSubscription) < publication.Remove(); >else < // Do something here if the publication does not exist // or has subscriptions. throw new ApplicationException(String.Format( "The publication could not be deleted. " + "Ensure that the publication exists and that all " + "subscriptions have been deleted.", publicationName, publisherName)); > // If no other merge publications exists, // disable publishing on the database. publicationDb = new ReplicationDatabase(publicationDbName, conn); if (publicationDb.LoadProperties()) < if (publicationDb.MergePublications.Count == 0 && publicationDb.EnabledMergePublishing) < publicationDb.EnabledMergePublishing = false; >> else < // Do something here if the database does not exist. throw new ApplicationException(String.Format( "The database does not exist on .", publicationDbName, publisherName)); > > catch (Exception ex) < // Implement application error handling here. throw new ApplicationException(String.Format( "The publication could not be deleted.", publicationName), ex); > finally
' Define the Publisher, publication database, ' and publication names. Dim publisherName As String = publisherInstance Dim publicationName As String = "AdvWorksSalesOrdersMerge" Dim publicationDbName As String = "AdventureWorks2022" Dim publication As MergePublication Dim publicationDb As ReplicationDatabase ' Create a connection to the Publisher. Dim conn As ServerConnection = New ServerConnection(publisherName) Try ' Connect to the Publisher. conn.Connect() ' Set the required properties for the merge publication. publication = New MergePublication() publication.ConnectionContext = conn publication.Name = publicationName publication.DatabaseName = publicationDbName ' Delete the publication, if it exists and has no subscriptions. If (publication.LoadProperties() And Not publication.HasSubscription) Then publication.Remove() Else ' Do something here if the publication does not exist ' or has subscriptions. Throw New ApplicationException(String.Format( _ "The publication could not be deleted. " + _ "Ensure that the publication exists and that all " + _ "subscriptions have been deleted.", _ publicationName, publisherName)) End If ' If no other merge publications exists, ' disable publishing on the database. publicationDb = New ReplicationDatabase(publicationDbName, conn) If publicationDb.LoadProperties() Then If publicationDb.MergePublications.Count = 0 _ And publicationDb.EnabledMergePublishing Then publicationDb.EnabledMergePublishing = False End If Else ' Do something here if the database does not exist. Throw New ApplicationException(String.Format( _ "The database does not exist on .", _ publicationDbName, publisherName)) End If Catch ex As Exception ' Implement application error handling here. Throw New ApplicationException(String.Format( _ "The publication could not be deleted.", _ publicationName), ex) Finally conn.Disconnect() End TryУдаление репликации вручную в SQL Server
В этой статье объясняется, как вручную удалить репликацию в SQL Server.
Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 324401Аннотация
В этой статье описывается удаление репликации с компьютера под управлением Microsoft SQL Server. Чтобы удалить репликацию, необходимо удалить подписки, публикации и распространитель, настроенный для репликации. Репликацию можно удалить, запустив скрипт Transact-SQL, созданный SQL Server Enterprise Manager или SQL Server Management Studio. Однако если невозможно создать скрипт Transact-SQL для удаления репликации, можно вручную удалить репликацию с помощью системных хранимых процедур и других инструкций Transact-SQL. Эта статья содержит сведения о системных хранимых процедурах, которые можно использовать в этом процессе.
Дополнительные сведения о системных хранимых процедурах, упомянутых в этой статье, см. в SQL Server электронной документации.
Удаление репликации вручную
Репликацию можно удалить вручную с помощью системных хранимых процедур и других инструкций Transact-SQL. Чтобы полностью удалить репликацию, выполните следующие действия.
- Удалите все подписки, настроенные для репликации.
- Удалите все публикации, настроенные для репликации.
- Удалите распространитель, настроенный для репликации.
Системные хранимые процедуры для каждого типа репликации перечислены далее в этой статье. Используйте соответствующие хранимые процедуры в зависимости от типа репликации, которую требуется удалить.
Удаление подписок
Чтобы удалить подписки из экземпляра SQL Server, можно использовать следующие хранимые процедуры и соответствующие параметры:
- sp_dropsubscription : системная хранимая sp_dropsubscription процедура позволяет удалять подписки на определенную статью, публикацию или набор подписок на издателе. Хранимую процедуру необходимо выполнить на сервере издателя в базе данных публикации.
- sp_droppullsubscription : системная хранимая sp_droppullsubscription процедура позволяет удалить подписку в текущей базе данных подписчика. Хранимую процедуру необходимо выполнить на подписчике в базе данных подписки по запросу.
- sp_dropmergesubscription : системная sp_dropmergesubscription хранимая процедура позволяет удалить подписку на публикацию слиянием и агент слияния, связанную с публикацией слиянием. Хранимую процедуру необходимо выполнить на сервере издателя в базе данных публикации.
- sp_dropmergepullsubscription : для удаления подписки на слияние можно использовать sp_dropmergepullsubscription системную хранимую процедуру. Хранимую процедуру необходимо выполнить на подписчике в базе данных подписки по запросу.
Удаление подписок на моментальные снимки
Чтобы удалить принудительная подписка на все статьи для публикации моментального снимка, выполните следующий скрипт на издателе:
USE < **Publication database name** >GO EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all'Чтобы удалить подписку на моментальный снимок по запросу во все статьи для публикации моментального снимка, выполните следующие действия.
-
Выполните следующий скрипт SQL на подписчике:
USE < **Subscription database name** >GO EXEC sp_droppullsubscription @publisher = N'', @publisher_db = N'', @publication = N''USE < **Publication database name** >GO EXEC sp_dropsubscription @publication=N'', @subscriber = N'', @article = N'all', @destination_db = N'all'Удаление транзакционной подписки
Чтобы удалить принудительная подписка на все статьи для публикации транзакций, выполните следующий скрипт на издателе:
USE < **Publication database name** >GO EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all'Чтобы удалить подписку по запросу на все статьи для публикации транзакций, выполните следующие действия.
-
Выполните следующий скрипт на подписчике:
USE < **Subscription database name** >GO EXEC sp_droppullsubscription @publisher = N'', @publisher_db = N'', @publication = N''USE < **Publication database name** >GO EXEC sp_dropsubscription @publication =N'', @subscriber = N'', @article = N'all', @destination_db = N''Удаление подписки слиянием
Чтобы удалить принудительная подписка, выполните следующий скрипт на издателе:
USE < **Publication database name** >GO EXEC sp_dropmergesubscription @publication = N'', @subscriber = N'', @subscriber_db = N'', @subscription_type = N'push'Чтобы удалить подписку по запросу, выполните следующие действия.
-
Выполните следующий скрипт на подписчике:
USE < **Subscription database name** >GO EXEC sp_dropmergepullsubscription @publication = N'', @publisher = N'', @publisher_db = N''USE < **Publication database name** >GO EXEC sp_dropmergesubscription @subscription_type = N'pull', @publication = N'', @subscriber = N'', @subscriber_db = N''Удаление публикаций
После удаления всех подписок, которые подписываются на публикацию, можно удалить публикацию. После удаления публикаций в базе данных публикации необходимо задать для параметра базы данных репликации для базы данных публикации значение false. Чтобы удалить публикацию, можно использовать следующие системные хранимые процедуры:
- sp_droppublication : системная хранимая sp_droppublication процедура позволяет удалить публикацию и связанные с ней статьи. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации.
- sp_dropmergepublication : системная хранимая sp_dropmergepublication процедура позволяет удалить публикацию слиянием и агент моментальных снимков, связанную с публикацией слиянием. Статьи, связанные с публикацией, также удаляются. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации.
- sp_replicationdboption : системная хранимая sp_replicationdboption процедура позволяет задать параметр базы данных репликации для текущей базы данных. Хранимую процедуру необходимо выполнить на сервере издателя.
Чтобы удалить публикацию моментального снимка, выполните следующий скрипт на издателе:
USE < **Publication database name** >GO EXEC sp_droppublication @publication = N'' USE master GO exec sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false'Чтобы удалить публикацию транзакций, выполните следующий скрипт на издателе:
USE < **Publication database name** >GO EXEC sp_droppublication @publication = N'' USE master GO EXEC sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false'Чтобы удалить публикацию слиянием, выполните следующий сценарий на сайте Publisher:
USE < **Publication database name** >GO EXEC sp_dropmergepublication @publication = N'' USE master GO EXEC sp_replicationdboption @dbname = N'', @optname = N'merge publish', @value = N'false'Удаление распространителя
После удаления всех подписок и публикаций можно удалить соответствующего распространителя. Однако перед удалением распространителя необходимо удалить обозначение подписчика с издателя. Для этого используйте следующие хранимые процедуры:
- sp_dropsubscriber : системная хранимая sp_dropsubscriber процедура позволяет удалить обозначение подписчика с зарегистрированного сервера. Хранимая процедура удаляет запись реестра для подписчика. Хранимая процедура выполняется на издателе в базе данных публикации.
- sp_dropdistributor : для удаления распространителя sp_dropdistributor можно использовать системную хранимую процедуру. Хранимая процедура выполняется на распространитетеле. Чтобы удалить название подписчика из Publisher, выполните следующий скрипт на сайте Publisher:
USE master GO EXEC sp_dropsubscriber @subscriber = N'', @reserved = N'drop_subscriptions'Чтобы удалить распространитель, выполните на распространитетеле следующий сценарий:
USE master GO EXEC sp_dropdistributor @no_checks = 1Использование хранимых процедур
При удалении репликации можно также использовать следующие хранимые процедуры:
-
sp_removedbreplication : системная хранимая sp_removedbreplication процедура позволяет удалить все объекты репликации из базы данных без обновления данных на распространитетеле. Хранимую процедуру необходимо выполнить на издателе в базе данных публикации или на подписчике в базе данных подписки. Ниже приведен синтаксис этой хранимой процедуры.
sp_removedbreplication ''sp_droparticle @publication = N'', @article = N'', @force_invalidate_snapshot = 1Ссылки
Дополнительные сведения см. в следующих разделах электронной документации по SQL Server:
- Отключение публикации и распространения
- Удаление публикации
- Удаление принудительной подписки
- Удаление подписки по запросу
Обратная связь
Были ли сведения на этой странице полезными?
Настройка репликации для базы данных Business Studio
Для выполнения дальнейших действий требуются полномочия и квалификация/навыки администрирования SQL Server.
Business Studio может работать с базами данных, участвующими в репликации MS SQL в режиме репликации транзакций.
При этом нельзя вносить изменения в базы данных подписчиков репликации (далее – реплики), однако они могут быть использованы для формирования отчетов, HTML -публикаций, порталов c целью снизить такого рода нагрузку на основную базу.Данная инструкция имеет целью продемонстрировать особенности настройки репликации для Business Studio. В частности, она не затрагивает аспекты подготовки SQL Server к репликации, в том числе потому что они связаны с особенностями инфраструктуры. Полностью настройка репликации освещена в Руководстве по настройке репликации транзакций Microsoft SQL Server (далее – Руководство Microsoft SQL Server).
Будем предполагать, что перед началом работы основная база уже существует (в инструкциях по ссылкам она обозначается, как AdventureWorks2012), а база реплики – еще нет.Немножко всего .. из жизни администратора ms sql server
После неккоректного и или неполного удаления репликации с базы данных, в файле журнала транзакций накапливаются неоправленные транзакции, вследсвие чего все попытки усечения файла журнала транзакций не завершаются успехом. Со временем журнал транзакций может достичь слишком больших размером.
Итак , все таки удалим репликацию с базы данных.
Начнем с диагности, убедимся, что в журнале транзакций висят именно транзакции репликации, выполним команду на нашей базе данных:
Должен быть примерно следующий результат:
Transaction information for database ‘DbName’.
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (1154873:22795:10)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.В таких случаях в SQL Server Management Studio не показвывает, что есть публикации, такой же результатпоказывают и другие процедуры репликации,сообщая , что база данных не сконфигурирована как издатель.
Когда убедившись, что транзакции именно репликации, удалим все объекты репликации в базе данных, использовав процедуру sp_removedbreplication, она документирована и рекомендуется её использовать именно на крайний случай:
