Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: SQL Server База данных SQL Azure
В этом разделе описывается удаление принудительной подписки в SQL Server с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).
В этом разделе
Для удаления принудительной подписки используется:
Использование среды SQL Server Management Studio
Удалите push-подписку на издателе (из папки локальных публикаций в SQL Server Management Studio) или подписчика (из папки локальных подписок). При удалении подписки объекты и данные не удаляются из подписки, они должны быть удалены вручную.
Удаление принудительной подписки на издателе
Подключитесь к издателю в СРЕДЕ SQL Server Management Studio и разверните узел сервера.
Раскройте папку Репликация , а затем папку Локальные публикации .
Раскройте публикацию, связанную с удаляемой подпиской.
Правой кнопкой мыши щелкните подписку и затем щелкните Удалить.
В окне подтверждения укажите, надо ли подключаться к подписчику для удаления сведений подписки. Если флажок Соединиться с подписчиком снят, необходимо позднее соединиться с подписчиком, чтобы удалить данные.
Удаление принудительной подписки на подписчике
Подключитесь к подписчику в среде Microsoft SQL Server Management Studio и раскройте узел сервера.
Раскройте папку Репликация , а затем — папку Локальные подписки .
Правой кнопкой мыши щелкните подписку, которую желаете удалить, и затем щелкните Удалить.
В окне подтверждения укажите, надо ли подключаться к издателю для удаления сведений подписки. Если снять флажок Соединиться с издателем , то для удаления сведений потребуется соединиться с издателем позже.
Использование Transact-SQL
Принудительные подписки можно удалять программно с помощью хранимых процедур репликации. Хранимые процедуры, используемые для этого, зависят от типа публикации, к которой принадлежит подписка.
Удаление принудительной подписки на публикацию моментальных снимков или транзакций
На издателе в базе данных публикации выполните sp_dropsubscription (Transact-SQL). Укажите параметры @publication и @subscriber. Задайте значение all в параметре @article. Если распространитель недоступен, задайте значение 1 в параметре @ignore_distributor , чтобы удалить подписку без удаления связанных с ней объектов на распространителе (необязательно).
На подписчике в базе данных подписки выполните sp_subscription_cleanup (Transact-SQL), чтобы удалить метаданные репликации в базе данных подписки.
Удаление принудительной подписки на публикацию слиянием
На издателе выполните sp_dropmergesubscription (Transact-SQL), указав @publication, @subscriber и @subscriber_db. Если распространитель недоступен, задайте значение 1 в параметре @ignore_distributor , чтобы удалить подписку без удаления связанных с ней объектов на распространителе (необязательно).
На подписчике в базе данных подписки выполните sp_mergesubscription_cleanup (Transact-SQL). Задайте значения для параметров @publisher, @publisher_dbи @publication. Тем самым из базы данных подписки удаляются метаданные слияния.
Примеры (Transact-SQL)
В этом примере удаляется принудительная подписка на публикацию транзакций.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- This batch is executed at the Publisher to remove
-- a pull or push subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
USE [AdventureWorks2022]
EXEC sp_dropsubscription
@publication = @publication,
@article = N'all',
@subscriber = @subscriber;
GO
В этом примере удаляется принудительная подписка на публикацию слиянием.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
-- This batch is executed at the Publisher to remove
-- a pull or push subscription to a merge publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';
USE [AdventureWorks2022]
EXEC sp_dropmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB;
GO
При помощи объектов RMO
Какие именно классы объектов RMO для этого применяются, зависит от типа публикации этой подписки.
Удаление принудительной подписки на публикацию моментальных снимков или транзакций
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса TransSubscription.
Установите свойства PublicationName, SubscriptionDBName, SubscriberNameи DatabaseName .
Задайте соединение ServerConnection с шага 1 для свойства ConnectionContext .
Проверьте свойство IsExistingObject , чтобы убедиться, что подписка существует. Если это свойство имеет значение false, значит, на шаге 2 были неправильно заданы свойства подписки либо подписка не существует.
Вызовите метод Remove .
Удаление принудительной подписки на публикацию слиянием
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса MergeSubscription.
Установите свойства PublicationName, SubscriptionDBName, SubscriberNameи DatabaseName .
Задайте соединение ServerConnection с шага 1 для свойства ConnectionContext .
Проверьте свойство IsExistingObject , чтобы убедиться, что подписка существует. Если это свойство имеет значение false, значит, на шаге 2 были неправильно заданы свойства подписки либо подписка не существует.
Вызовите метод Remove .
Примеры (объекты RMO)
Принудительные подписки могут быть удалены программно с помощью объектов RMO.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create the objects that we need.
TransSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new TransSubscription();
subscription.ConnectionContext = conn;
subscription.SubscriberName = subscriberName;
subscription.PublicationName = publicationName;
subscription.SubscriptionDBName = subscriptionDbName;
subscription.DatabaseName = publicationDbName;
// Delete the pull subscription, if it exists.
if (subscription.IsExistingObject)
{
// Delete the pull subscription at the Subscriber.
subscription.Remove();
}
else
{
throw new ApplicationException(String.Format(
"The subscription to {0} does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be deleted.", publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim subscription As TransSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define the pull subscription.
subscription = New TransSubscription()
subscription.ConnectionContext = conn
subscription.SubscriberName = subscriberName
subscription.PublicationName = publicationName
subscription.SubscriptionDBName = subscriptionDbName
subscription.DatabaseName = publicationDbName
' Delete the pull subscription, if it exists.
If subscription.IsExistingObject Then
' Delete the pull subscription at the Subscriber.
subscription.Remove()
Else
Throw New ApplicationException(String.Format( _
"The subscription to {0} does not exist on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be deleted.", publicationName), ex)
Finally
conn.Disconnect()
End Try