Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie Sie ein Pullabonnement in SQL Server 2014 mithilfe von SQL Server Management Studio, Transact-SQL oder Replikationsverwaltungsobjekten (Replication Management Objects, RMO) löschen.
In diesem Themenbereich
So löschen Sie ein Pullabonnement mit:
Verwendung von SQL Server Management Studio
Löschen Sie ein Pullabonnement im Publisher (aus dem Ordner " Lokale Publikationen " in SQL Server Management Studio) oder "Abonnent" (aus dem Ordner "Lokale Abonnements "). Durch das Löschen eines Abonnements werden keine Objekte oder Daten aus dem Abonnement entfernt; sie müssen manuell entfernt werden.
So löschen Sie ein Pullabonnement im Publisher
Stellen Sie eine Verbindung mit dem Publisher in SQL Server Management Studio her, und erweitern Sie dann den Serverknoten.
Erweitern Sie den Replikationsordner , und erweitern Sie dann den Ordner " Lokale Publikationen ".
Erweitern Sie die publikation, die dem Abonnement zugeordnet ist, das Sie löschen möchten.
Klicken Sie mit der rechten Maustaste auf das Abonnement, und klicken Sie dann auf "Löschen".
Wählen Sie im Bestätigungsdialogfeld aus, ob eine Verbindung mit dem Abonnenten hergestellt werden soll, um Abonnementinformationen zu löschen. Wenn Sie das Kontrollkästchen "Mit Abonnenten verbinden " deaktivieren, sollten Sie später eine Verbindung mit dem Abonnenten herstellen, um die Informationen zu löschen.
So löschen Sie ein Pullabonnement beim Abonnenten
Stellen Sie eine Verbindung mit dem Abonnenten in SQL Server Management Studio her, und erweitern Sie dann den Serverknoten.
Erweitern Sie den Replikationsordner , und erweitern Sie dann den Ordner " Lokale Abonnements" .
Klicken Sie mit der rechten Maustaste auf das Abonnement, das Sie löschen möchten, und klicken Sie dann auf "Löschen".
Wählen Sie im Bestätigungsdialogfeld aus, ob eine Verbindung mit dem Publisher hergestellt werden soll, um Abonnementinformationen zu löschen. Wenn Sie das Kontrollkästchen "Mit Publisher verbinden " deaktivieren, sollten Sie später eine Verbindung mit Publisher herstellen, um die Informationen zu löschen.
Verwenden von Transact-SQL
Pull-Abonnements können programmatisch mit gespeicherten Replikationsprozeduren gelöscht werden. Die verwendeten gespeicherten Prozeduren hängen vom Typ der Veröffentlichung ab, zu der das Abonnement gehört.
So löschen Sie ein Pullabonnement für eine Momentaufnahme oder transaktionsbasierte Publikation
Führen Sie beim Abonnenten in der Abonnementdatenbank sp_droppullsubscription (Transact-SQL) aus. Geben Sie @publication, @publisher und @publisher_db an.
Führen Sie im Publisher in der Publikationsdatenbank sp_dropsubscription (Transact-SQL) aus. Geben Sie @publication und @subscriber an. Geben Sie den Wert 'all' für @article an. (Optional) Wenn auf den Distributor nicht zugegriffen werden kann, geben Sie einen Wert von 1 für @ignore_distributor an, um das Abonnement zu löschen, ohne verwandte Objekte beim Distributor zu entfernen.
So löschen Sie ein Pullabonnement für eine Zusammenführungsveröffentlichung
Führen Sie beim Abonnenten in der Abonnementdatenbank den Befehl sp_dropmergepullsubscription (Transact-SQL) aus. Geben Sie @publication, @publisher und @publisher_db an.
Führen Sie bei Publisher auf der Publikationsdatenbank sp_dropmergesubscription (Transact-SQL) aus. Geben Sie @publication, @subscriber und @subscriber_db an. Geben Sie einen Pullwert für @subscription_type an. (Optional) Wenn auf den Distributor nicht zugegriffen werden kann, geben Sie einen Wert von 1 für @ignore_distributor an, um das Abonnement zu löschen, ohne verwandte Objekte beim Distributor zu entfernen.
Beispiele (Transact-SQL)
Im folgenden Beispiel wird ein Pullabonnement für eine transaktionsbasierte Publikation gelöscht. Der erste Batch wird beim Abonnenten ausgeführt, und die zweite wird im Publisher ausgeführt.
-- 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 is the batch executed at the Subscriber to drop
-- a pull subscription to a transactional publication.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2012';
USE [AdventureWorks2012Replica]
EXEC sp_droppullsubscription
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication;
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 transactional publication.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
USE [AdventureWorks2012]
EXEC sp_dropsubscription
@publication = @publication,
@article = N'all',
@subscriber = @subscriber;
GO
Im folgenden Beispiel wird ein Pullabonnement für eine Zusammenführungsveröffentlichung gelöscht. Der erste Batch wird beim Abonnenten ausgeführt, und die zweite wird im Publisher ausgeführt.
-- 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 Subscriber to remove
-- a merge pull subscription.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publication_db AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publication_db = N'AdventureWorks2012';
USE [AdventureWorks2012Replica]
EXEC sp_dropmergepullsubscription
@publisher = @publisher,
@publisher_db = @publication_db,
@publication = @publication;
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'AdventureWorks2012Replica';
USE [AdventureWorks2012]
EXEC sp_dropmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB;
GO
Verwenden von Replikationsverwaltungsobjekten (RMO)
Sie können Pullabonnements programmgesteuert löschen, indem Sie Replikationsverwaltungsobjekte (Replication Management Objects, RMO) verwenden. Die RMO-Klassen, die Sie zum Löschen eines Pullabonnements verwenden, hängen vom Typ der Publikation ab, für die das Pullabonnement abonniert ist.
So löschen Sie ein Pullabonnement für einen Snapshot oder eine transaktionale Veröffentlichung
Erstellen Sie Verbindungen mit dem Abonnenten und Publisher mithilfe der ServerConnection Klasse.
Erstellen Sie eine Instanz der TransPullSubscription Klasse, und setzen Sie die PublicationName, DatabaseName, PublisherName und PublicationDBName Eigenschaften. Verwenden Sie die Abonnentenverbindung aus Schritt 1, um die ConnectionContext Eigenschaft festzulegen.
Überprüfen Sie die IsExistingObject Eigenschaft, um zu überprüfen, ob das Abonnement vorhanden ist. Wenn der Wert dieser Eigenschaft lautet
false, wurden entweder die Abonnementeigenschaften in Schritt 2 falsch definiert oder das Abonnement ist nicht vorhanden.Rufen Sie die Remove-Methode auf.
Erstellen Sie eine Instanz der TransPublication Klasse mithilfe der Publisher-Verbindung aus Schritt 1. Geben Sie Name, DatabaseName und ConnectionContext an.
Rufen Sie die LoadProperties-Methode auf. Wenn diese Methode zurückgegeben wird
false, sind die in Schritt 5 angegebenen Eigenschaften falsch, oder die Publikation ist auf dem Server nicht vorhanden.Rufen Sie die RemovePullSubscription-Methode auf. Geben Sie den Namen des Abonnenten und der Abonnementdatenbank für die Parameter "Subscriber " und "subscriberDB " an.
Löschen eines Pull-Abonnements für eine Zusammenführungsveröffentlichung
Erstellen Sie Verbindungen mit dem Abonnenten und Publisher mithilfe der ServerConnection Klasse.
Erstellen Sie eine Instanz der MergePullSubscription-Klasse und legen Sie die Eigenschaften PublicationName, DatabaseName, PublisherName und PublicationDBName fest. Verwenden Sie die Verbindung aus Schritt 1, um die ConnectionContext Eigenschaft festzulegen.
Überprüfen Sie die IsExistingObject Eigenschaft, um zu überprüfen, ob das Abonnement vorhanden ist. Wenn der Wert dieser Eigenschaft lautet
false, wurden entweder die Abonnementeigenschaften in Schritt 2 falsch definiert oder das Abonnement ist nicht vorhanden.Rufen Sie die Remove-Methode auf.
Erstellen Sie eine Instanz der MergePublication Klasse mithilfe der Publisher-Verbindung aus Schritt 1. Name, DatabaseName und ConnectionContext angeben.
Rufen Sie die LoadProperties-Methode auf. Wenn diese Methode zurückgegeben wird
false, sind die in Schritt 5 angegebenen Eigenschaften falsch, oder die Publikation ist auf dem Server nicht vorhanden.Rufen Sie die RemovePullSubscription-Methode auf. Geben Sie den Namen des Abonnenten und der Abonnementdatenbank für die Parameter "Subscriber " und "subscriberDB " an.
Beispiele (RMO)
In diesem Beispiel wird ein Pullabonnement für eine transaktionsbasierte Publikation gelöscht und die Abonnementregistrierung beim Publisher entfernt.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Define the publication.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
// Delete the pull subscription, if it exists.
if (subscription.IsExistingObject)
{
if (publication.LoadProperties())
{
// Remove the pull subscription registration at the Publisher.
publication.RemovePullSubscription(subscriberName, subscriptionDbName);
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
// 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
{
subscriberConn.Disconnect();
publisherConn.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 = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Define the publication.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
' Delete the pull subscription, if it exists.
If subscription.IsExistingObject Then
If publication.LoadProperties() Then
' Remove the pull subscription registration at the Publisher.
publication.RemovePullSubscription(subscriberName, subscriptionDbName)
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
' 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
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
In diesem Beispiel wird ein Pullabonnement für eine Zusammenführungsveröffentlichung gelöscht und die Abonnementregistrierung beim Publisher entfernt.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Define the publication.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
// Delete the pull subscription, if it exists.
if (subscription.IsExistingObject)
{
// Delete the pull subscription at the Subscriber.
subscription.Remove();
if (publication.LoadProperties())
{
publication.RemovePullSubscription(subscriberName, subscriptionDbName);
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
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
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Define the publication.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
' Delete the pull subscription, if it exists.
If subscription.IsExistingObject Then
' Delete the pull subscription at the Subscriber.
subscription.Remove()
If publication.LoadProperties() Then
publication.RemovePullSubscription(subscriberName, subscriptionDbName)
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
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
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Siehe auch
Abonnieren von Veröffentlichungen
Bewährte Methoden für Replikationssicherheit