Smazat publikaci

Platí pro:SQL ServerAzure SQL Managed Instance

Toto téma popisuje, jak smazat publikaci v SQL Server pomocí SQL Server Management Studio, Transact-SQL nebo Replication Management Objects (RMO).

Použití aplikace SQL Server Management Studio

Smažte publikace ze složky Local Publications ve SQL Server Management Studio.

Smazání publikace

  1. Připojte se k Publisher v Management Studiu a potom rozbalte uzel serveru.

  2. Rozbalte složku Replikace a potom rozbalte složku Místní publikace .

  3. Klikněte pravým tlačítkem na publikaci, kterou chcete smazat, a pak klikněte na Smazat.

Použití Transact-SQL

Publikace lze programově mazat pomocí uložených procedur replikace. To, které uložené procedury použijete, závisí na typu odstraňované publikace.

Note

Smazání publikace neodstraní publikované objekty z databáze publikací ani odpovídající objekty z databáze předplatného. Použijte DROP <object> příkaz k ručnímu odstranění těchto objektů, pokud je to nutné.

Odstranit snímek nebo transakční publikaci

  1. Udělejte jednu z těchto věcí:

    • Chcete-li odstranit jednu publikaci, spusťte sp_droppublication na serveru Publisher v databázi publikace.

    • Pro smazání všech publikací a odstranění všech replikačních objektů z publikované databáze spusťte sp_removedbreplication na Publisher. Zadejte hodnotu tran pro @type. (Volitelné) Pokud nelze k distributorovi přistupovat nebo pokud je stav databáze podezřelý či offline, zadejte hodnotu 1 pro @force. (Volitelné) Zadejte název databáze pro @dbname, pokud procedura sp_removedbreplication není spuštěna v databázi publikace.

      Note

      Zadání hodnoty 1 pro @force může v databázi zanechat publikační objekty související s replikací.

  2. (Volitelné) Pokud tato databáze nemá žádné další publikace, proveďte sp_replicationdboption (Transact-SQL), abyste zakázali publikaci aktuální databáze pomocí snapshotu nebo transakční replikace.

  3. (Volitelné) U odběratele v databázi předplatného spusťte sp_subscription_cleanup pro odstranění všech zbývajících replikačních metadat v databázi předplatného.

Pro smazání sloučení publikace

  1. Udělejte jednu z těchto věcí:

    • Chcete-li odstranit jednotlivou publikaci, spusťte v databázi publikace na serveru Publisher příkaz sp_dropmergepublication (Transact-SQL).

    • Pro smazání všech publikací a odstranění všech replikačních objektů z publikované databáze spusťte sp_removedbreplication na Publisher. Zadejte hodnotu merge pro @type. (Volitelné) Pokud nelze k distributorovi přistupovat nebo pokud je stav databáze podezřelý či offline, zadejte hodnotu 1 pro @force. (Volitelné) Zadejte název databáze pro @dbname, pokud se sp_removedbreplication nespustí v publikační databázi.

      Note

      Zadání hodnoty 1 pro @force může v databázi zanechat publikační objekty související s replikací.

  2. (Volitelné) Pokud tato databáze nemá žádné další publikace, proveďte sp_replicationdboption (Transact-SQL), abyste zakázali publikaci aktuální databáze pomocí merge replication.

  3. (Volitelné) U odběratele v databázi předplatného spusťte sp_mergesubscription_cleanup (Transact-SQL), abyste odstranili všechna zbývající replikační metadata v databázi předplatného.

Příklady (Transact-SQL)

Tento příklad ukazuje, jak odstranit transakční publikaci a deaktivovat transakční publikaci v databázi. Tento příklad předpokládá, že všechna předplatná byla dříve odstraněna. Pro více informací viz Smazat pull odběr nebo Smazat push odběr.

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

Tento příklad ukazuje, jak odstranit publikaci pro slučování a zakázat publikování pro slučování pro databázi. Tento příklad předpokládá, že všechna předplatná byla dříve odstraněna. Pro více informací viz Smazat pull odběr nebo Smazat push odběr.

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

Použití objektů správy replikace (RMO)

Publikace můžete programově mazat pomocí Replication Management Objects (RMO). Třídy RMO, které použijete k odstranění publikace, závisí na typu publikace, kterou odstraníte.

Odebrat snímek nebo transakční publikaci

  1. Vytvořte připojení k Publisheru pomocí ServerConnection třídy.

  2. Vytvořte instanci TransPublication třídy.

  3. Nastavte pro publikaci vlastnosti Name a DatabaseName a vlastnost ConnectionContext nastavte na připojení vytvořené v kroku 1.

  4. Zkontrolujte vlastnost IsExistingObject, abyste ověřili, že publikace existuje. Pokud je hodnota této vlastnosti nepravdivá, buď byly publikační vlastnosti v kroku 3 definovány nesprávně, nebo publikace neexistuje.

  5. Zavolejte metodu Remove .

  6. (Volitelné) Pokud pro tuto databázi neexistují žádné jiné transakční publikace, může být databáze pro transakční publikování deaktivována následovně:

    1. Vytvořte instanci ReplicationDatabase třídy. Nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1.

    2. Zavolejte metodu LoadProperties . Pokud tato metoda vrací false, potvrďte, že databáze existuje.

    3. Nastavte vlastnost EnabledTransPublishing na false.

    4. Zavolejte metodu CommitPropertyChanges .

  7. Zavřete spojení.

Odebrání sloučené publikace

  1. Vytvořte připojení k Publisheru pomocí ServerConnection třídy.

  2. Vytvořte instanci MergePublication třídy.

  3. Nastavte pro publikaci vlastnosti Name a DatabaseName a vlastnost ConnectionContext nastavte na připojení vytvořené v kroku 1.

  4. Zkontrolujte vlastnost IsExistingObject, abyste ověřili, že publikace existuje. Pokud je hodnota této vlastnosti nepravdivá, buď byly publikační vlastnosti v kroku 3 definovány nesprávně, nebo publikace neexistuje.

  5. Zavolejte metodu Remove .

  6. (Volitelné) Pokud pro tuto databázi neexistují žádné jiné publikace slučování, lze pro ni zakázat slučovací publikování takto:

    1. Vytvořte instanci ReplicationDatabase třídy. Nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1.

    2. Zavolejte metodu LoadProperties . Pokud tato metoda vrací false, ověřte, že databáze existuje.

    3. Nastavte vlastnost EnabledMergePublishing na false.

    4. Zavolejte metodu CommitPropertyChanges .

  7. Zavřete spojení.

Příklady (RMO)

Následující příklad maže transakční publikaci. Pokud pro tuto databázi neexistují žádné jiné transakční publikace, transakční publikace je také zakázána.

// 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

Následující příklad maže publikaci při sloučení. Pokud pro tuto databázi neexistují žádné jiné publikace slučování, je rovněž zakázáno publikování slučová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