Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure 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
Připojte se k Publisher v Management Studiu a potom rozbalte uzel serveru.
Rozbalte složku Replikace a potom rozbalte složku Místní publikace .
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
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í.
(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.
(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
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í.
(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.
(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
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
Vytvořte instanci TransPublication třídy.
Nastavte pro publikaci vlastnosti Name a DatabaseName a vlastnost ConnectionContext nastavte na připojení vytvořené v kroku 1.
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.
Zavolejte metodu Remove .
(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ě:
Vytvořte instanci ReplicationDatabase třídy. Nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1.
Zavolejte metodu LoadProperties . Pokud tato metoda vrací false, potvrďte, že databáze existuje.
Nastavte vlastnost EnabledTransPublishing na false.
Zavolejte metodu CommitPropertyChanges .
Zavřete spojení.
Odebrání sloučené publikace
Vytvořte připojení k Publisheru pomocí ServerConnection třídy.
Vytvořte instanci MergePublication třídy.
Nastavte pro publikaci vlastnosti Name a DatabaseName a vlastnost ConnectionContext nastavte na připojení vytvořené v kroku 1.
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.
Zavolejte metodu Remove .
(Volitelné) Pokud pro tuto databázi neexistují žádné jiné publikace slučování, lze pro ni zakázat slučovací publikování takto:
Vytvořte instanci ReplicationDatabase třídy. Nastavte vlastnost ConnectionContext na instanci ServerConnection z kroku 1.
Zavolejte metodu LoadProperties . Pokud tato metoda vrací false, ověřte, že databáze existuje.
Nastavte vlastnost EnabledMergePublishing na false.
Zavolejte metodu CommitPropertyChanges .
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