Бөлісу құралы:


View and Modify Article Properties (Просмотр и изменение свойств статьи)

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

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

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Просмотр и изменение свойства статьи

  1. На странице "Статьи" диалогового окна "Свойства публикации — публикация>" <выберите статью, а затем щелкните "Свойства статьи".

  2. Выберите статьи, для которых необходимо внести изменения в свойства:

    • Нажмите кнопку "Задать свойства выделенного <объекта"> , чтобы запустить диалоговое окно "Свойства статьи - <Имя_> объекта"; изменения свойств, внесенные в это диалоговое окно, применяются только к объекту, выделенному на панели объектов на странице "Статьи ".

    • Нажмите кнопку "Задать свойства всех <статей objectType", чтобы запустить диалоговое окно "Свойства для всех <статей objectType>>"; изменения свойств, внесенные в этом диалоговом окне, применяются ко всем объектам этого типа на странице "Статьи", включая те, которые еще не выбраны для публикации.

      Примечание.

      Изменения свойств, внесенные в диалоговое окно "Свойства для всех <статей ObjectType> " , переопределяют все внесенные ранее в диалоговом окне "Свойства статьи — <имя объекта> ". Например, если нужно установить некоторое количество значений по умолчанию для всех статей типа объекта, но при этом задать некоторые свойства для отдельных объектов, сначала установите значения по умолчанию для всех статей. Затем установите свойства для отдельных объектов.

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

  4. Нажмите кнопку "ОК " в диалоговом окне "Свойства публикации — <публикация> ".

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

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

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

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

  2. Чтобы получить список всех столбцов базовой таблицы, выполните хранимую процедуру sp_helparticlecolumns для статей таблиц.

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

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

    Примечание.

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

Просмотр свойств статьи, принадлежащей публикации слиянием

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

  2. Чтобы получить список всех столбцов базовой таблицы, выполните хранимую процедуру sp_helpmergearticlecolumn для статей таблиц.

Изменение свойств статьи, принадлежащей публикации слиянием

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

    Примечание.

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

Пример (Transact-SQL)

Следующий пример репликации транзакций производит получение свойств опубликованной статьи.

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

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

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

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

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

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

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

Следующий пример репликации слиянием производит изменение параметров обнаружения конфликтов для опубликованной статьи.

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

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

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

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

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

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

  2. Создайте экземпляр класса TransArticle.

  3. Установите свойства Name, PublicationNameи DatabaseName .

  4. Установите полученное на шаге 1 соединение в качестве значения свойства ConnectionContext .

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

  6. Чтобы изменить свойства, установите новое значение для одного из свойств TransArticle , которое можно установить (необязательно).

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

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

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

  2. Создайте экземпляр класса MergeArticle.

  3. Установите свойства Name, PublicationNameи DatabaseName .

  4. Установите полученное на шаге 1 соединение в качестве значения свойства ConnectionContext .

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

  6. Чтобы изменить свойства, установите новое значение для одного из свойств MergeArticle , которое можно установить (необязательно).

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

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

В этом примере изменяется статья публикации слиянием, при этом указывается обработчик бизнес-логики, используемый этой статьей.

// Define the Publisher, publication, and article names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
string articleName = "SalesOrderHeader";

// Set the friendly name of the business logic handler.
string customLogic = "OrderEntryLogic";

MergeArticle article = new MergeArticle();

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

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

    // Set the required properties for the article.
    article.ConnectionContext = conn;
    article.Name = articleName;
    article.DatabaseName = publicationDbName;
    article.PublicationName = publicationName;

    // Load the article properties.
    if (article.LoadProperties())
    {
        article.ArticleResolver = customLogic;
    }
    else
    {
        // Throw an exception of the article does not exist.
        throw new ApplicationException(String.Format(
        "{0} is not published in {1}", articleName, publicationName));
    }
    
}
catch (Exception ex)
{
    // Do error handling here and rollback the transaction.
    throw new ApplicationException(String.Format(
        "The business logic handler {0} could not be associated with " +
        " the {1} article.",customLogic,articleName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication, and article names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim articleName As String = "SalesOrderHeader"

' Set the friendly name of the business logic handler.
Dim customLogic As String = "OrderEntryLogic"

Dim article As MergeArticle = New MergeArticle()

' 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 article.
    article.ConnectionContext = conn
    article.Name = articleName
    article.DatabaseName = publicationDbName
    article.PublicationName = publicationName

    ' Load the article properties.
    If article.LoadProperties() Then
        article.ArticleResolver = customLogic
    Else
        ' Throw an exception of the article does not exist.
        Throw New ApplicationException(String.Format( _
         "{0} is not published in {1}", articleName, publicationName))
    End If

Catch ex As Exception
    ' Do error handling here and rollback the transaction.
    Throw New ApplicationException(String.Format( _
     "The business logic handler {0} could not be associated with " + _
     " the {1} article.", customLogic, articleName), ex)
Finally
    conn.Disconnect()
End Try