Löschen einer VeröffentlichungDelete a Publication

Gilt für: JaSQL Server JaAzure SQL-Datenbank (nur verwaltete Instanz) NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

In diesem Thema wird beschrieben, wie eine Veröffentlichung in SQL ServerSQL Server mithilfe von SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLoder Replikationsverwaltungsobjekten (RMO) gelöscht wird.This topic describes how to delete a publication in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

In diesem ThemaIn This Topic

Verwenden von SQL Server Management StudioUsing SQL Server Management Studio

Verwenden Sie zum Löschen von Veröffentlichungen den Ordner Lokale Veröffentlichungen in SQL Server Management StudioSQL Server Management Studio.Delete publications from the Local Publications folder in SQL Server Management StudioSQL Server Management Studio.

So löschen Sie eine VeröffentlichungTo delete a publication

  1. Stellen Sie in Management StudioManagement Studioeine Verbindung mit dem Verleger her, und erweitern Sie dann den Serverknoten.Connect to the Publisher in Management StudioManagement Studio, and then expand the server node.

  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .Expand the Replication folder, and then expand the Local Publications folder.

  3. Klicken Sie mit der rechten Maustaste auf die Veröffentlichung, die Sie löschen möchten, und klicken Sie dann auf Löschen.Right-click the publication you want to delete, and then click Delete.

Verwenden von Transact-SQLUsing Transact-SQL

Veröffentlichungen können programmgesteuert mit gespeicherten Replikationsprozeduren gelöscht werden.Publications can be deleted programmatically using replication stored procedures. Welche gespeicherten Prozeduren Sie verwenden, hängt vom Typ der zu löschenden Veröffentlichung ab.The stored procedures that you use depend on the type of publication being deleted.

Hinweis

Durch das Löschen einer Veröffentlichung werden weder die veröffentlichten Objekte aus der Veröffentlichungsdatenbank noch die zugehörigen Objekte aus der Abonnementdatenbank entfernt.Deleting a publication does not remove published objects from the publication database or the corresponding objects from the subscription database. Verwenden Sie den DROP <object> -Befehl, um diese Objekte bei Bedarf manuell zu entfernen.Use the DROP <object> command to manually remove these objects if necessary.

So löschen Sie eine Momentaufnahme- oder Transaktionsveröffentlichung.To delete a snapshot or transactional publication

  1. Führen Sie eines der folgenden Verfahren aus:Do one of the following:

    • Um eine einzelne Veröffentlichung zu löschen, führen Sie sp_droppublication auf dem Verleger für die Veröffentlichungsdatenbank aus.To delete a single publication, execute sp_droppublication at the Publisher on the publication database.

    • Führen Sie sp_removedbreplication auf dem Verleger aus, um alle Veröffentlichungen in und alle Replikationsobjekte aus einer veröffentlichten Datenbank zu entfernen.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Geben Sie für @type den Wert tran an.Specify a value of tran for @type. (Optional) Wenn auf den Verteiler nicht zugegriffen werden kann oder wenn der Status der Datenbank fehlerverdächtig oder offline ist, geben Sie für @force den Wert 1 an.(Optional) If the Distributor cannot be accessed or if the status of the database is suspect or offline, specify a value of 1 for @force. (Optional) Geben Sie für @dbname den Namen der Datenbank an, wenn sp_removedbreplication in der Veröffentlichungsdatenbank nicht ausgeführt wird.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Hinweis

      Bei Angabe des Werts 1 für @force bleiben möglicherweise replikationsbezogene Veröffentlichungsobjekte in der Datenbank zurück.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Optional) Wenn diese Datenbank keine anderen Veröffentlichungen besitzt, führen Sie sp_replicationdboption (Transact-SQL) aus, um die Veröffentlichung der aktuellen Datenbank mit der Momentaufnahme- oder der Transaktionsreplikation zu deaktivieren.(Optional) If this database has no other publications, execute sp_replicationdboption (Transact-SQL) to disable publication of the current database using snapshot or transactional replication.

  3. (Optional) Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_subscription_cleanup aus, um alle verbleibenden Replikationsmetadaten aus der Abonnementdatenbank zu entfernen.(Optional) At the Subscriber on the subscription database, execute sp_subscription_cleanup to remove any remaining replication metadata in the subscription database.

So löschen Sie eine MergeveröffentlichungTo delete a merge publication

  1. Führen Sie eines der folgenden Verfahren aus:Do one of the following:

    • Um eine einzelne Veröffentlichung zu löschen, führen Sie sp_dropmergepublication (Transact-SQL) auf dem Verleger für die Veröffentlichungsdatenbank aus.To delete a single publication, execute sp_dropmergepublication (Transact-SQL) at the Publisher on the publication database.

    • Führen Sie sp_removedbreplication auf dem Verleger aus, um alle Veröffentlichungen in und alle Replikationsobjekte aus einer veröffentlichten Datenbank zu entfernen.To delete all publications in and remove all replication objects from a published database, execute sp_removedbreplication at the Publisher. Geben Sie für @type den Wert merge an.Specify a value of merge for @type. (Optional) Wenn auf den Verteiler nicht zugegriffen werden kann oder wenn der Status der Datenbank fehlerverdächtig oder offline ist, geben Sie für @force den Wert 1 an.(Optional) If the Distributor cannot be accessed or if the status of the database is suspect or offline, specify a value of 1 for @force. (Optional) Geben Sie für @dbname den Namen der Datenbank an, wenn sp_removedbreplication in der Veröffentlichungsdatenbank nicht ausgeführt wird.(Optional) Specify the name of the database for @dbname if sp_removedbreplication is not executed on the publication database.

      Hinweis

      Bei Angabe des Werts 1 für @force bleiben möglicherweise replikationsbezogene Veröffentlichungsobjekte in der Datenbank zurück.Specifying a value of 1 for @force may leave replication-related publishing objects in the database.

  2. (Optional) Wenn diese Datenbank keine anderen Veröffentlichungen besitzt, führen Sie sp_replicationdboption (Transact-SQL) aus, um die Veröffentlichung der aktuellen Datenbank mit der Mergereplikation zu deaktivieren.(Optional) If this database has no other publications, execute sp_replicationdboption (Transact-SQL) to disable publication of the current database using merge replication.

  3. (Optional) Führen Sie auf dem Abonnenten für die Abonnementdatenbank sp_mergesubscription_cleanup (Transact-SQL) aus, um alle verbleibenden Replikationsmetadaten aus der Abonnementdatenbank zu entfernen.(Optional) At the Subscriber on the subscription database, execute sp_mergesubscription_cleanup (Transact-SQL) to remove any remaining replication metadata in the subscription database.

Beispiele (Transact-SQL)Examples (Transact-SQL)

Dieses Beispiel zeigt, wie eine Transaktionsveröffentlichung entfernt und die Transaktionsveröffentlichung für eine Datenbank deaktiviert wird.This example shows how to remove a transactional publication and disable transactional publishing for a database. In diesem Beispiel wird davon ausgegangen, dass alle Abonnements vorher entfernt wurden.This example assumes that all subscriptions were previously removed. Weitere Informationen finden Sie unter Delete a Pull Subscription oder Delete a Push Subscription.For more information, see Delete a Pull Subscription or 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 [AdventureWorks2012]
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

Dieses Beispiel zeigt, wie eine Mergeveröffentlichung entfernt und die Mergeveröffentlichung für eine Datenbank deaktiviert wird.This example shows how to remove a merge publication and disable merge publishing for a database. In diesem Beispiel wird davon ausgegangen, dass alle Abonnements vorher entfernt wurden.This example assumes that all subscriptions were previously removed. Weitere Informationen finden Sie unter Delete a Pull Subscription oder Delete a Push Subscription.For more information, see Delete a Pull Subscription or 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

Verwenden von Replikationsverwaltungsobjekten (RMO)Using Replication Management Objects (RMO)

Sie können Veröffentlichungen mithilfe von Replikationsverwaltungsobjekten (RMO) programmgesteuert löschen.You can delete publications programmatically by using Replication Management Objects (RMO). Welche RMO-Klassen Sie zum Entfernen von Veröffentlichungen verwenden, hängt vom Typ der zu entfernenden Veröffentlichung ab.The RMO classes that you use to remove a publication depend on the type of publication you remove.

So entfernen Sie eine Momentaufnahme- oder TransaktionsveröffentlichungTo remove a snapshot or transactional publication

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der TransPublication -Klasse.Create an instance of the TransPublication class.

  3. Legen Sie die Name -Eigenschaft und die DatabaseName -Eigenschaft für die Veröffentlichung fest, und legen Sie die ConnectionContext -Eigenschaft auf die in Schritt 1 erstellte Verbindung fest.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Überprüfen Sie die IsExistingObject -Eigenschaft, um festzustellen, ob die Veröffentlichung vorhanden ist.Check the IsExistingObject property to verify that the publication exists. Wenn der Wert dieser Eigenschaft falselautet, wurden entweder die Veröffentlichungseigenschaften in Schritt 3 falsch definiert, oder die Veröffentlichung ist nicht vorhanden.If the value of this property is false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Rufen Sie die Remove -Methode auf.Call the Remove method.

  6. (Optional) Wenn für diese Datenbank keine anderen Transaktionsveröffentlichungen vorhanden sind, kann die Datenbank wie folgt für Transaktionsveröffentlichungen deaktiviert werden:(Optional) If no other transactional publications exist for this database, the database can be disabled for transactional publishing as follows:

    1. Erstellen Sie eine Instanz der ReplicationDatabase -Klasse.Create an instance of the ReplicationDatabase class. Legen Sie die ConnectionContext -Eigenschaft auf die Instanz von ServerConnection aus Schritt 1 fest.Set the ConnectionContext property to the instance of ServerConnection from step 1.

    2. Rufen Sie die LoadProperties -Methode auf.Call the LoadProperties method. Wenn diese Methode falsezurückgibt, überzeugen Sie sich davon, dass die Datenbank vorhanden ist.If this method returns false, confirm that the database exists.

    3. Legen Sie die EnabledTransPublishing -Eigenschaft auf false.Set the EnabledTransPublishing property to false.

    4. Rufen Sie die CommitPropertyChanges -Methode auf.Call the CommitPropertyChanges method.

  7. Trennen Sie die Verbindung.Close the connections.

So entfernen Sie eine MergeveröffentlichungTo remove a merge publication

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der MergePublication -Klasse.Create an instance of the MergePublication class.

  3. Legen Sie die Name -Eigenschaft und die DatabaseName -Eigenschaft für die Veröffentlichung fest, und legen Sie die ConnectionContext -Eigenschaft auf die in Schritt 1 erstellte Verbindung fest.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Überprüfen Sie die IsExistingObject -Eigenschaft, um festzustellen, ob die Veröffentlichung vorhanden ist.Check the IsExistingObject property to verify that the publication exists. Wenn der Wert dieser Eigenschaft falselautet, wurden entweder die Veröffentlichungseigenschaften in Schritt 3 falsch definiert, oder die Veröffentlichung ist nicht vorhanden.If the value of this property is false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Rufen Sie die Remove -Methode auf.Call the Remove method.

  6. (Optional) Wenn für diese Datenbank keine anderen Mergeveröffentlichungen vorhanden sind, kann die Datenbank wie folgt für Mergeveröffentlichungen deaktiviert werden:(Optional) If no other merge publications exist for this database, the database can be disabled for merge publishing as follows:

    1. Erstellen Sie eine Instanz der ReplicationDatabase -Klasse.Create an instance of the ReplicationDatabase class. Legen Sie die ConnectionContext -Eigenschaft auf die Instanz von ServerConnection aus Schritt 1 fest.Set the ConnectionContext property to the instance of ServerConnection from Step 1.

    2. Rufen Sie die LoadProperties -Methode auf.Call the LoadProperties method. Wenn diese Methode falsezurückgibt, überzeugen Sie sich davon, dass die Datenbank vorhanden ist.If this method returns false, verify that the database exists.

    3. Legen Sie die EnabledMergePublishing -Eigenschaft auf false.Set the EnabledMergePublishing property to false.

    4. Rufen Sie die CommitPropertyChanges -Methode auf.Call the CommitPropertyChanges method.

  7. Trennen Sie die Verbindung.Close the connections.

Beispiele (RMO)Examples (RMO)

Im folgenden Beispiel wird eine Transaktionsveröffentlichung gelöscht.The following example deletes a transactional publication. Wenn für diese Datenbank keine anderen Transaktionsveröffentlichungen vorhanden sind, werden Transaktionsveröffentlichungen zudem deaktiviert.If no other transactional publications exist for this database, transactional publishing is also disabled.

// Define the Publisher, publication database, 
// and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

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 {0} 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 {0} does not exist on {1}.",
            publicationDbName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be deleted.",
        publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication database, 
' and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"

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 {0} 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 {0} does not exist on {1}.", _
         publicationDbName, publisherName))
    End If
Catch ex As Exception
    ' Implement application error handling here.
    Throw New ApplicationException(String.Format( _
     "The publication {0} could not be deleted.", _
     publicationName), ex)
Finally
    conn.Disconnect()
End Try

Im folgenden Beispiel wird eine Mergeveröffentlichung gelöscht.The following example deletes a merge publication. Wenn für diese Datenbank keine anderen Mergeveröffentlichungen vorhanden sind, werden Mergeveröffentlichungen zudem deaktiviert.If no other merge publications exist for this database, merge publishing is also disabled.

// Define the Publisher, publication database, 
// and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";

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 {0} 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 {0} does not exist on {1}.",
            publicationDbName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be deleted.",
        publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication database, 
' and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"

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 {0} 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 {0} does not exist on {1}.", _
         publicationDbName, publisherName))
    End If
Catch ex As Exception
    ' Implement application error handling here.
    Throw New ApplicationException(String.Format( _
     "The publication {0} could not be deleted.", _
     publicationName), ex)
Finally
    conn.Disconnect()
End Try

Weitere InformationenSee Also

Replication System Stored Procedures Concepts Replication System Stored Procedures Concepts
Veröffentlichen von Daten und DatenbankobjektenPublish Data and Database Objects