Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается удаление публикации в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).
В этом разделе
Чтобы удалить публикацию, используйте следующее:
Использование среды SQL Server Management Studio
Удалите публикации из папки локальных публикаций в SQL Server Management Studio.
Удаление публикации
Подключитесь к издателю в Management Studio и разверните узел сервера.
Раскройте папку Репликация , а затем папку Локальные публикации .
Щелкните правой кнопкой мыши публикацию, которую нужно удалить, и нажмите кнопку "Удалить".
Использование Transact-SQL
Публикации можно удалять программным способом с помощью хранимых процедур репликации. Хранимые процедуры, которые вы используете, зависят от типа публикации, которая удаляется.
Замечание
Удаление публикации не удаляет опубликованные объекты из базы данных публикации или соответствующие объекты из базы данных подписки.
DROP <object>
При необходимости используйте команду, чтобы вручную удалить эти объекты.
Для удаления снимка или транзакционной публикации
Выполните одно из следующих действий:
Чтобы удалить одну публикацию, выполните sp_droppublication на издателе в базе данных публикации.
Чтобы удалить все публикации и объекты репликации из опубликованной базы данных, выполните sp_removedbreplication на Publisher. Укажите значение
tran
для @type. (Необязательно) Если распространитель недоступен или если состояние базы данных вызывает подозрения или автономно, укажите значение 1 для @force. (Необязательно) Укажите имя базы данных для @dbname если sp_removedbreplication не выполняется в публикуемой базе данных.Замечание
Указание значения 1 для @force может оставить объекты публикации, связанные с репликацией, в базе данных.
(Необязательно) Если у этой базы данных нет других публикаций, выполните sp_replicationdboption (Transact-SQL), чтобы отключить публикацию текущей базы данных с помощью моментального снимка или репликации транзакций.
(Необязательно) На подписчике в базе данных подписки выполните sp_subscription_cleanup, чтобы удалить все оставшиеся метаданные репликации в базе данных подписки.
Удаление публикации слиянием
Выполните одно из следующих действий:
Чтобы удалить одну публикацию, выполните sp_dropmergepublication (Transact-SQL) на издателе в базе данных публикации.
Чтобы удалить все публикации и удалить все объекты репликации из опубликованной базы данных, выполните sp_removedbreplication на издателе. Укажите значение
merge
для @type. (Необязательно) Если не удается получить доступ к распространителю или если состояние базы данных является подозрительным или отключенным, укажите значение 1 для @force. (Необязательно) Укажите имя базы данных для @dbname , если sp_removedbreplication не выполняется в базе данных публикации.Замечание
Указание значения 1 для @force может оставить объекты публикации, связанные с репликацией, в базе данных.
(Необязательно) Если у этой базы данных нет других публикаций, выполните sp_replicationdboption (Transact-SQL), чтобы отключить публикацию текущей базы данных с помощью репликации слиянием.
(Необязательно) На подписчике в базе данных подписки выполните sp_mergesubscription_cleanup (Transact-SQL), чтобы удалить все оставшиеся метаданные репликации в базе данных подписки.
Примеры (Transact-SQL)
В этом примере показано, как удалить публикацию транзакций и отключить публикацию транзакций для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе "Удаление подписки по запросу " или "Удаление push-подписки".
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
В данном примере показано, как удалить публикацию слияния и отключить публикацию слияния для базы данных. В этом примере предполагается, что все подписки были удалены ранее. Дополнительные сведения см. в разделе "Удаление подписки по запросу " или "Удаление push-подписки".
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
Использование объектов управления репликацией (RMO)
Публикации можно удалять программным способом с помощью объектов управления репликацией (RMO). Классы RMO, используемые для удаления публикации, зависят от типа удаленной публикации.
Чтобы удалить моментальный снимок или транзакционную публикацию
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса TransPublication.
Задайте свойства Name и DatabaseName для публикации, а свойству ConnectionContext присвойте соединение, созданное на шаге 1.
Проверьте свойство, чтобы убедиться, IsExistingObject что публикация существует. Если это свойство имеет
false
значение, свойства публикации в шаге 3 были определены неправильно или публикация не существует.Вызовите метод Remove .
(Необязательно) Если для этой базы данных отсутствуют другие публикации транзакций, база данных может быть отключена для публикации транзакций следующим образом:
Создайте экземпляр класса ReplicationDatabase. Задайте свойству ConnectionContext экземпляр ServerConnection из шага 1.
Вызовите метод LoadProperties . Если этот метод возвращается
false
, убедитесь, что база данных существует.Задайте для свойства EnabledTransPublishing значение
false
.Вызовите метод CommitPropertyChanges .
Закройте подключения.
Удаление публикации слиянием
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса MergePublication.
Задайте свойства Name и DatabaseName для публикации, а свойству ConnectionContext присвойте соединение, созданное на шаге 1.
Проверьте свойство IsExistingObject, чтобы убедиться, что публикация существует. Если это свойство имеет
false
значение, свойства публикации в шаге 3 были определены неправильно или публикация не существует.Вызовите метод Remove .
(Необязательно) Если для этой базы данных отсутствуют другие публикации слиянием, база данных может быть отключена для публикации слиянием следующим образом:
Создайте экземпляр класса ReplicationDatabase. Установите свойство ConnectionContext, задав ему экземпляр ServerConnection из шага 1.
Вызовите метод LoadProperties . Если этот метод возвращается
false
, убедитесь, что база данных существует.Задайте для свойства EnabledMergePublishing значение
false
.Вызовите метод CommitPropertyChanges .
Закройте подключения.
Примеры (RMO)
В следующем примере удаляется публикация транзакций. Если для этой базы данных отсутствуют другие публикации транзакций, публикация транзакций также отключена.
// 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
Пример ниже удаляет публикацию слияния. Если для этой базы данных не существует других публикаций по слиянию, публикация по слиянию также отключена.
// 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
См. также
Основные понятия хранимых процедур системы репликации
Публикация объектов данных и баз данных