Просмотр и изменение свойств публикации

Область применения: SQL Server Управляемый экземпляр SQL Azure

В этом разделе описывается, как просматривать и изменять свойства публикации в SQL Server с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).

В этом разделе

Перед началом

Ограничения

  • Некоторые свойства нельзя изменять после создания публикации, другие нельзя изменять при наличии подписок на публикацию. Свойства, которые нельзя изменять, отображаются в режиме только для чтения.

Рекомендации

Использование среды SQL Server Management Studio

Просмотр и изменение свойств публикации в диалоговом окне "Свойства публикации — <публикация>", доступное в SQL Server Management Studio и мониторе репликации. Сведения о запуске монитора репликации см. в этой статье.

Диалоговое окно "Свойства публикации— публикация>" <содержит следующие страницы:

  • Страница Общие включает имя и описание публикации, имя базы данных, тип публикации и настройки срока окончания действия подписки.

  • Страница Статьи соответствует странице Статьи мастера создания публикаций. Эта страница предназначена для добавления и удаления статей, изменения свойств и фильтрации столбцов для статей.

  • Страница Фильтрация строк соответствует странице Фильтрация строк таблицы мастера создания публикаций. Эта страница предназначена для добавления, изменения и удаления статических фильтров строк для всех типов публикаций, для добавления, изменения и удаления параметризованных фильтров строк и фильтров соединения для публикаций слиянием.

  • Страница Моментальный снимок позволяет задать формат и местоположение моментального снимка, необходимость его сжатия, а также скрипты для запуска до и после применения моментального снимка.

  • Страница Моментальный снимок FTP (для публикаций моментальных снимков и транзакций, а также для публикаций слиянием для издателей, использующих версии более ранние, чем SQL Server 2005) позволяет указать возможность загрузки файлов моментальных снимков подписчиками через протокол передачи файлов (FTP).

  • Страница Моментальный снимок FTP и Интернет (для публикаций слиянием от издателей, использующих версию SQL Server 2005 или более позднюю) позволяет указать возможность загрузки файлов моментальных снимков подписчиками через протокол FTP и возможность синхронизации подписки подписчиками через протокол HTTPS.

  • Страница Параметры подписки позволяет устанавливать ряд параметров, которые применяются ко всем подпискам. Параметры отличаются в зависимости от типа публикации.

  • Страница Список доступа к публикации позволяет указать, какие имена входа и группы имеют доступ к публикации.

  • Страница Безопасность агентов предоставляет доступ к настройкам учетных записей, под которыми запускаются и устанавливают соединения с компьютерами в топологии репликации следующие агенты: агент моментальных снимков для всех публикаций, агент чтения журнала для всех публикаций транзакций и агент чтения очереди для публикаций транзакций, в которых допускаются подписки, обновляемые посредством очередей.

  • Страница Секции данных (для публикаций слиянием от издателей, использующих версию SQL Server 2005 или более позднюю) позволяет указать, могут ли подписчики на публикации с параметризованными фильтрами запрашивать моментальный снимок, если он не доступен. Эта страница также позволяет создавать моментальные снимки для одной или нескольких секций либо однократно, либо по расписанию.

Просмотр и изменение свойств публикации в среде Management Studio

  1. Подключитесь к издателю в Management Studio и разверните узел сервера.

  2. Раскройте папку Репликация , а затем папку Локальные публикации .

  3. Щелкните правой кнопкой мыши публикацию и выберите Свойства.

  4. Измените свойства, если необходимо, и нажмите кнопку ОК.

Просмотр и изменение свойств публикации в мониторе репликации

  1. Раскройте группу издателей в левой панели монитора репликации, а затем раскройте издатель.

  2. Щелкните правой кнопкой мыши публикацию и выберите Свойства.

  3. Измените свойства, если необходимо, и нажмите кнопку ОК.

Использование Transact-SQL

Публикации могут быть изменены, а их свойства могут быть возвращены программно с помощью хранимых процедур репликации. Используемые хранимые процедуры зависят от типа публикации.

Просмотр свойств публикации моментальных снимков или публикации транзакций

  1. Выполните хранимую процедуру sp_helppublication, указав имя публикации в параметре @publication . Если не указать этот параметр, будут возвращены сведения обо всех публикациях на издателе.

Изменение свойств публикации моментальных снимков или публикации транзакций

  1. Выполните процедуру sp_changepublication, указав изменяемое свойство публикации в параметре @property , а новое значение этого свойства — в параметре @value .

    Примечание.

    Если изменение потребует создания нового моментального снимка, нужно также указать значение 1 в параметре @force_invalidate_snapshot, а если изменение потребует повторной инициализации подписчиков — значение 1 в параметре @force_reinit_subscription. Дополнительные сведения о свойствах публикации и статьи, при изменении которых требуется создание нового моментального снимка или повторная инициализация, см. в этой статье.

Просмотр свойств публикации слиянием

  1. Выполните хранимую процедуру sp_helpmergepublication, указав имя публикации в параметре @publication . Если не указать этот параметр, будут возвращены сведения обо всех публикациях на издателе.

Изменение свойств публикации слиянием

  1. Выполните хранимую процедуру sp_changemergepublication, указав свойство публикации, которое нужно изменить, в параметре @property , а новое значение этого свойства — в параметре @value .

    Примечание.

    Если для изменения потребуется создание нового моментального снимка, необходимо также указать значение 1 для @force_invalidate_snapshot, а если изменение потребует повторной инициализации подписчиков, необходимо указать значение 1 для @force_reinit_subscription Для получения дополнительных сведений о свойствах, которые при изменении требуют нового моментального снимка или повторной инициализации. см. статью "Изменить публикацию" и "Свойства статьи".

Просмотр свойств моментального снимка

  1. Выполните хранимую процедуру sp_helppublication_snapshot, указав имя публикации в параметре @publication .

Изменение свойств моментального снимка

  1. Выполните хранимую процедуру sp_changepublication_snapshot, указав одно или несколько новых свойств моментальных снимков в соответствующих параметрах моментальных снимков.

Примеры (Transact-SQL)

В этом примере репликации транзакций возвращаются свойства публикации.

DECLARE @myTranPub AS sysname
SET @myTranPub = N'AdvWorksProductTran' 

USE [AdventureWorks2022]
EXEC sp_helppublication @publication = @myTranPub
GO

В этом примере репликации транзакций отключается репликация схемы для публикации.

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

В этом примере репликации слиянием возвращаются свойства публикации.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2022]
EXEC sp_helpmergepublication @publication = @publication;
GO

В этом примере репликации слиянием отключается репликация схемы для публикации.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge'; 

-- Disable DDL replication for the publication.
USE [AdventureWorks2022]
EXEC sp_changemergepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0,
  @force_invalidate_snapshot = 0, 
  @force_reinit_subscription = 0;
GO

При помощи объектов RMO

Публикации можно изменять и получать доступ к их свойствам программно с помощью объектов RMO. Классы RMO, которые используются для просмотра или изменения публикации, зависят от типа публикации.

Просмотр или изменение свойств публикации моментальных снимков или публикации транзакций

  1. Создайте соединение с издателем с помощью класса ServerConnection .

  2. Создайте экземпляр класса TransPublication , установите для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение в качестве значения свойства ConnectionContext .

  3. Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Чтобы изменить свойства, задайте новые значения для устанавливаемых свойств (необязательно). Используйте логический оператор AND (> в Microsoft Visual C# и в Microsoft Visual Basic), чтобы определить, задано ли данное PublicationAttributes значение для Attributes свойства. С помощью операторов включающего логического ИЛИ (| в Visual C# и Or в Visual Basic) и исключающего логического ИЛИ (^ в Visual C# и Xor в Visual Basic) измените значения PublicationAttributes для свойства Attributes в Microsoft Visual Basic).

  5. Если для свойства true в параметре CachePropertyChanges, то для фиксирования изменений на сервере необходимо вызвать метод CommitPropertyChanges (необязательно). Если для свойства false в параметре CachePropertyChanges (по умолчанию), изменения будут отправлены на сервер немедленно.

Просмотр или изменение свойств публикации слиянием

  1. Создайте соединение с издателем с помощью класса ServerConnection .

  2. Создайте экземпляр класса MergePublication , установите для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение в качестве значения свойства ConnectionContext .

  3. Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Чтобы изменить свойства, задайте новые значения для устанавливаемых свойств (необязательно). Используйте логический оператор AND (> в Visual C# и Visual Basic), чтобы определить, задано ли заданное PublicationAttributes значение для Attributes свойства. С помощью операторов включающего логического ИЛИ (| в Visual C# и Or в Visual Basic) и исключающего логического ИЛИ (^ в Visual C# и Xor в Visual Basic) измените значения PublicationAttributes для свойства Attributes в Microsoft Visual Basic).

  5. Если для свойства true в параметре CachePropertyChanges, то для фиксирования изменений на сервере необходимо вызвать метод CommitPropertyChanges (необязательно). Если для свойства false в параметре CachePropertyChanges (по умолчанию), изменения будут отправлены на сервер немедленно.

Примеры (объекты RMO)

В этом примере устанавливаются атрибуты публикации для публикации транзакций. Изменения кэшируются до тех пор, пока явно не отправляются на сервер.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As TransPublication

' 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 publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = True

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then
        ' Enable support for push subscriptions and disable support 
        ' for pull subscriptions.
        If (publication.Attributes And PublicationAttributes.AllowPull) <> 0 Then
            publication.Attributes = publication.Attributes _
            Xor PublicationAttributes.AllowPull
        End If
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Send changes to the server.
        publication.CommitPropertyChanges()
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try

В этом примере отключается DDL-репликация для публикации слиянием.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";

MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // If DDL replication is currently enabled, disable it.
        if (publication.ReplicateDdl == DdlReplicationOptions.All)
        {
            publication.ReplicateDdl = DdlReplicationOptions.None;
        }
        else
        {
            publication.ReplicateDdl = DdlReplicationOptions.All;
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As MergePublication

' 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 publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' If DDL replication is currently enabled, disable it.
        If publication.ReplicateDdl = DdlReplicationOptions.All Then
            publication.ReplicateDdl = DdlReplicationOptions.None
        Else
            publication.ReplicateDdl = DdlReplicationOptions.All
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try