Compartir a través de


Eliminar una publicación

Se aplica a: SQL Server Azure SQL Managed Instance

En este tema se describe cómo eliminar una publicación en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO).

En este tema

Uso de SQL Server Management Studio

Elimine publicaciones de la carpeta Publicaciones locales en SQL Server Management Studio.

Para eliminar una publicación

  1. Conéctese al publicador en Management Studio y, a continuación, expanda el nodo de servidor.

  2. Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .

  3. Haga clic con el botón secundario en la publicación que desea eliminar y, a continuación, haga clic en Eliminar.

Usar Transact-SQL

Las publicaciones pueden eliminarse mediante programación con procedimientos almacenados de replicación. Los procedimientos almacenados que use dependen del tipo de publicación que se elimina.

Nota:

Al eliminar una publicación, no se quitan los objetos publicados de la base de datos de publicación ni los objetos correspondientes de la base de datos de suscripciones. Si es necesario, use el comando DROP <object> para quitar estos objetos manualmente.

Para eliminar una publicación transaccional o de instantáneas

  1. Realice una de las siguientes acciones:

    • Para eliminar una publicación, ejecute sp_droppublication en la base de datos de publicación del publicador.

    • Para eliminar todas las publicaciones de una base de datos publicada y quitar todos sus objetos de replicación, ejecute sp_removedbreplication en el publicador. Especifique el valor de tran para @type. (Opcional) Si no se puede tener acceso al distribuidor, o bien si el estado de la base de datos es sospechoso o está sin conexión, especifique un valor de 1 para @force. (Opcional) Especifique el nombre de la base de datos para @dbname si sp_removedbreplication no se ejecuta en la base de datos de publicación.

      Nota:

      Especificar un valor de 1 para @force puede dejar los objetos de publicación relacionados con replicación en la base de datos.

  2. (Opcional) Si esta base de datos no tiene otras publicaciones, ejecute sp_replicationdboption (Transact-SQL) para deshabilitar la publicación de la base de datos actual mediante la replicación transaccional o de instantáneas.

  3. (Opcional) En la base de datos de suscripciones del suscriptor, ejecute sp_subscription_cleanup para quitar los metadatos de replicación restantes en la base de datos de suscripciones.

Para eliminar una publicación de combinación

  1. Realice una de las siguientes acciones:

    • Para eliminar una sola publicación, ejecute sp_dropmergepublication (Transact-SQL) en el publicador de la base de datos de publicación.

    • Para eliminar todas las publicaciones de una base de datos publicada y quitar todos sus objetos de replicación, ejecute sp_removedbreplication en el publicador. Especifique el valor de merge para @type. (Opcional) Si no se puede tener acceso al distribuidor, o bien si el estado de la base de datos es sospechoso o está sin conexión, especifique un valor de 1 para @force. (Opcional) Especifique el nombre de la base de datos para @dbname si sp_removedbreplication no se ejecuta en la base de datos de publicación.

      Nota:

      Especificar un valor de 1 para @force puede dejar los objetos de publicación relacionados con replicación en la base de datos.

  2. (Opcional) Si esta base de datos no tiene otras publicaciones, ejecute sp_replicationdboption (Transact-SQL) para deshabilitar la publicación de la base de datos actual con la replicación de mezcla.

  3. (Opcional) En el suscriptor de la base de datos de suscripciones, ejecute sp_mergesubscription_cleanup (Transact-SQL) para quitar los metadatos de replicación restantes en la base de datos de suscripciones.

Ejemplos (Transact-SQL)

Este ejemplo muestra cómo quitar una publicación transaccional y deshabilitar la publicación transaccional para una base de datos. Este ejemplo supone que se quitaron todas las suscripciones previamente. Para obtener más información, consulte Delete a Pull Subscription o 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

Este ejemplo muestra cómo quitar una publicación de combinación y deshabilitar la publicación de combinación para una base de datos. Este ejemplo supone que se quitaron todas las suscripciones previamente. Para obtener más información, consulte Delete a Pull Subscription o 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

Usar Replication Management Objects (RMO)

Puede eliminar publicación mediante programación utilizando Replication Management Objects (RMO). Las clases RMO que utiliza para quitar una publicación dependen del tipo de publicación que quita.

Para quitar una publicación transaccional o de instantáneas

  1. Cree una conexión al publicador mediante la clase ServerConnection .

  2. Cree una instancia de la clase TransPublication.

  3. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.

  4. Compruebe la propiedad IsExistingObject para asegurarse de que la publicación existe. Si el valor de esta propiedad es false, significa que las propiedades de la publicación del paso 3 se definieron incorrectamente, o bien que la publicación no existe.

  5. Llame al método Remove.

  6. (Opcional) Si no existe ninguna otra publicación transaccional para esta base de datos, ésta se puede deshabilitar para la publicación transaccional del siguiente modo:

    1. Cree una instancia de la clase ReplicationDatabase. Establezca la propiedad ConnectionContext en la instancia de ServerConnection del paso 1.

    2. Llame al método LoadProperties. Si este método devuelve false, confirme que la base de datos existe.

    3. Establezca las propiedades EnabledTransPublishing en false.

    4. Llame al método CommitPropertyChanges.

  7. Cierre las conexiones.

Para quitar una publicación de combinación

  1. Cree una conexión al publicador mediante la clase ServerConnection .

  2. Cree una instancia de la clase MergePublication.

  3. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.

  4. Compruebe la propiedad IsExistingObject para asegurarse de que la publicación existe. Si el valor de esta propiedad es false, significa que las propiedades de la publicación del paso 3 se definieron incorrectamente, o bien que la publicación no existe.

  5. Llame al método Remove.

  6. (Opcional) Si no existe ninguna otra publicación de combinación para esta base de datos, ésta se puede deshabilitar para la publicación de combinación del siguiente modo:

    1. Cree una instancia de la clase ReplicationDatabase. Establezca la propiedad ConnectionContext en la instancia de ServerConnection del paso 1.

    2. Llame al método LoadProperties. Si este método devuelve false, compruebe que la base de datos existe.

    3. Establezca las propiedades EnabledMergePublishing en false.

    4. Llame al método CommitPropertyChanges.

  7. Cierre las conexiones.

Ejemplos (RMO)

En el siguiente ejemplo se elimina una publicación transaccional Si no existe ninguna otra publicación transaccional para esta base de datos, también se deshabilita la publicación transaccional.

// 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 {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 = "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 {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

En el siguiente ejemplo se elimina una publicación de combinación. Si no existe ninguna otra publicación de combinación para esta base de datos, también se deshabilita la publicación de combinación.

// 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 {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 = "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 {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