Поделиться через


Проверка данных на подписчике

В данном разделе описывается процесс проверки данных на подписчике в SQL Server 2012 с помощью среды Среда SQL Server Management Studio, Transact-SQL или объектов RMO.

Проверка данных состоит из трех этапов:

  1. Одна или все подписки на публикацию помечаются для проверки. Пометьте подписки для проверки в диалоговых окнах Проверка подписки, Проверка подписок и Проверка всех подписок, доступных из папок Локальные публикации и Локальные подписки в среде Microsoft Среда SQL Server Management Studio. Все подписки можно также пометить на вкладке Все подписки, вкладке Список наблюдения за подписками и в узле публикаций монитора репликации. Сведения о запуске монитора репликации см. в разделе Запуск монитора репликации.

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

  3. Просмотрите результаты проверки.

    • В окнах сведений монитора репликации: на вкладке Журнал операций от распространителя к подписчику для репликации транзакций и на вкладке Журнал синхронизации для репликации слиянием.

    • В диалоговом окне Просмотр состояния синхронизации в Среда Management Studio.

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

  • Перед началом работы выполните следующие действия.

    Ограничения

  • Для проверки данных на подписчике используется:

    Среда SQL Server Management Studio

    Transact-SQL

    объекты RMO;

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

Ограничения

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

  • Результаты показывают, как завершилась проверка — успешно или неудачно, но в случае ошибки строки, не прошедшие проверку, не указываются. Для сравнения данных издателя и подписчика используется Программа tablediff. Дополнительные сведения об использовании этой программы с реплицированными данными см. в разделе сравнить реплицируемые таблицы на предмет различий (программирование репликации).

Значок стрелки, используемый со ссылкой «В начало»[Top]

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

Проверка данных подписок на публикацию транзакций (среда Management Studio)

  1. Подключитесь к издателю в среде Среда SQL Server Management Studio, а затем раскройте узел сервера.

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

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

  4. В диалоговом окне Проверка подписок выберите подписки, которые надо проверить:

    • Выберите Проверить все подписки SQL Server.

    • Выберите Проверить следующие подписки и укажите одну или несколько подписок.

  5. Чтобы задать тип проверки (подсчет строк или подсчет строк с контрольной суммой), щелкните Параметры проверки и укажите параметры в диалоговом окне Параметры проверки подписки.

  6. Нажмите кнопку ОК.

  7. Просмотрите результаты проверки в мониторе репликации или в диалоговом окне Просмотр состояния синхронизации. Для каждой подписки:

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

    2. 2. Если агент не запущен, нажмите кнопку Пуск в диалоговом окне Просмотр состояния синхронизации. В диалоговом окне появятся информационные сообщения о проверке.

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

Проверка данных отдельной подписки на публикацию слиянием (среда Management Studio)

  1. Подключитесь к издателю в среде Среда SQL Server Management Studio, а затем раскройте узел сервера.

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

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

  4. В диалоговом окне Проверка подписки выберите Проверить эту подписку.

  5. Чтобы задать тип проверки (подсчет строк или подсчет строк с контрольной суммой), щелкните Параметры и укажите параметры в диалоговом окне Параметры проверки подписки.

  6. Нажмите кнопку ОК.

  7. Просмотрите результаты проверки в мониторе репликации или в диалоговом окне Просмотр состояния синхронизации.

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

    2. Если агент не запущен, нажмите кнопку Пуск в диалоговом окне Просмотр состояния синхронизации. В диалоговом окне появятся информационные сообщения о проверке.

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

Проверка данных всех подписок на публикацию слиянием (среда Management Studio)

  1. Подключитесь к издателю в среде Среда SQL Server Management Studio, а затем раскройте узел сервера.

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

  3. Щелкните правой кнопкой мыши публикацию, для которой хотите проверить подписки, затем нажмите кнопку Проверить все подписки.

  4. В диалоговом окне Проверка всех подписок задайте тип проверки (подсчет строк или подсчет строк с контрольной суммой).

  5. Нажмите кнопку ОК.

  6. Просмотрите результаты проверки в мониторе репликации или в диалоговом окне Просмотр состояния синхронизации. Для каждой подписки:

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

    2. Если агент не запущен, нажмите кнопку Пуск в диалоговом окне Просмотр состояния синхронизации. В диалоговом окне появятся информационные сообщения о проверке.

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

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

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

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

  3. В диалоговом окне Проверка подписок выберите подписки, которые надо проверить:

    • Выберите Проверить все подписки SQL Server.

    • Выберите Проверить следующие подписки и укажите одну или несколько подписок.

  4. Чтобы задать тип проверки (подсчет строк или подсчет строк с контрольной суммой), щелкните Параметры проверки и укажите параметры в диалоговом окне Параметры проверки подписки.

  5. Нажмите кнопку ОК.

  6. Перейдите на вкладку Все подписки.

  7. Просмотрите результаты проверки. Для каждой принудительной подписки:

    1. Если агент не запущен, щелкните правой кнопкой мыши подписку и выберите Запустить синхронизацию.

    2. 2. Щелкните правой кнопкой мыши подписку, затем выберите Просмотреть подробности.

    3. 3.Просмотрите сведения на вкладке Журнал операций от распространителя к подписчику в текстовом поле Действия в выбранном сеансе.

Проверка данных отдельной принудительной подписки на публикацию слиянием (монитор репликации)

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

  2. Перейдите на вкладку Все подписки.

  3. Щелкните правой кнопкой мыши подписку, для которой требуется выполнить проверку, а затем щелкните Проверить подписку.

  4. В диалоговом окне Проверка подписки выберите Проверить эту подписку.

  5. Чтобы задать тип проверки (подсчет строк или подсчет строк с контрольной суммой), щелкните Параметры и укажите параметры в диалоговом окне Параметры проверки подписки.

  6. Нажмите кнопку ОК.

  7. Перейдите на вкладку Все подписки.

  8. Просмотрите результаты проверки:

    1. 1. Если агент не запущен, щелкните правой кнопкой мыши подписку и выберите Запустить синхронизацию.

    2. Щелкните правой кнопкой мыши подписку, затем выберите Просмотреть подробности.

    3. 3. Просмотрите сведения на вкладке Журнал синхронизации в текстовом поле Последнее сообщение выбранного сеанса.

Проверка данных всех принудительных подписок на публикацию слиянием (монитор репликации)

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

  2. Щелкните правой кнопкой мыши публикацию, для которой хотите проверить подписки, затем нажмите кнопку Проверить все подписки.

  3. В диалоговом окне Проверка всех подписок задайте тип проверки (подсчет строк или подсчет строк с контрольной суммой).

  4. Нажмите кнопку ОК.

  5. Перейдите на вкладку Все подписки.

  6. Просмотрите результаты проверки. Для каждой принудительной подписки:

    1. Если агент не запущен, щелкните правой кнопкой мыши подписку и выберите Запустить синхронизацию.

    2. Щелкните правой кнопкой мыши подписку, затем выберите Просмотреть подробности.

    3. Просмотрите сведения на вкладке Журнал синхронизации в текстовом поле Последнее сообщение выбранного сеанса.

Значок стрелки, используемый со ссылкой «В начало»[Top]

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

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

  1. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_publication_validation (Transact-SQL)). Задайте параметр @publication и одно из следующих значений для @rowcount_only:

    • 1 — проверка только количества строк (по умолчанию);

    • 2 — проверка количества строк и двоичной контрольной суммы.

    ПримечаниеПримечание

    Если выполняется процедура sp_publication_validation (Transact-SQL), то процедура sp_article_validation (Transact-SQL) выполняется для каждой статьи в публикации. Для успешного выполнения sp_publication_validation (Transact-SQL) необходимо иметь разрешения SELECT для всех столбцов в опубликованных базовых таблицах.

  2. Если агент распространителя для каждой подписки еще не запущен, запустите его (необязательно). Дополнительные сведения см. в разделах Синхронизация подписки по запросу и Синхронизация принудительной подписки.

  3. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Проверка реплицированных данных.

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

  1. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_article_validation (Transact-SQL)). Укажите параметр @publication, имя статьи в параметре @article и одно из следующих значений в параметре @rowcount_only:

    • 1 — проверка только количества строк (по умолчанию)

    • 2 — проверка количества строк и двоичной контрольной суммы.

    ПримечаниеПримечание

    Чтобы успешно выполнить процедуру sp_article_validation (Transact-SQL), необходимы разрешения на использование предложения SELECT для всех столбцов таблицы опубликованной базовой таблицы.

  2. Если агент распространителя для каждой подписки еще не запущен, запустите его (необязательно). Дополнительные сведения см. в разделах Синхронизация подписки по запросу и Синхронизация принудительной подписки.

  3. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Проверка реплицированных данных.

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

  1. В базе данных публикации на издателе откройте явную транзакцию с помощью BEGIN TRANSACTION (Transact-SQL).

  2. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_marksubscriptionvalidation (Transact-SQL)). Задайте публикацию в параметре @publication, имя подписчика в параметре @subscriber и имя базы данных подписки для @destination_db.

  3. Повторите шаг 2 для каждой проверяемой подписки (необязательно).

  4. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_article_validation (Transact-SQL)). Укажите параметр @publication, имя статьи в параметре @article и одно из следующих значений в параметре @rowcount_only:

    • 1 — проверка только количества строк (по умолчанию)

    • 2 — проверка количества строк и двоичной контрольной суммы.

    ПримечаниеПримечание

    Чтобы успешно выполнить процедуру sp_article_validation (Transact-SQL), необходимы разрешения на использование предложения SELECT для всех столбцов таблицы опубликованной базовой таблицы.

  5. В базе данных публикации на издателе зафиксируйте транзакцию с помощью COMMIT TRANSACTION (Transact-SQL).

  6. Повторите шаги 1 – 5 для каждой проверяемой статьи (необязательно).

  7. Запустите агент распространителя, если он еще не работает (необязательно). Дополнительные сведения см. в разделах Синхронизация подписки по запросу и Синхронизация принудительной подписки.

  8. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Проверка данных на подписчике.

Проверка данных всех подписок на публикацию слиянием

  1. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_validatemergepublication (Transact-SQL)). Задайте параметр @publication и одно из следующих значений в параметре @level:

    • 1 — проверка только количества строк.

    • 3 — проверка двоичной контрольной суммы.

    Таким образом будут отмечены для проверки все публикации.

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделах Синхронизация подписки по запросу и Синхронизация принудительной подписки.

  3. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Проверка данных на подписчике.

Проверка данных по выбранным подпискам на публикацию слиянием

  1. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_validatemergesubscription (Transact-SQL)). Задайте параметр @publication, имя подписчика в параметре @subscriber, имя базы данных подписки в параметре @subscriber_db и одно из следующих значений в параметре @level:

    • 1 — проверка только количества строк.

    • 3 — проверка двоичной контрольной суммы.

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

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделах Синхронизация подписки по запросу и Синхронизация принудительной подписки.

  3. Просмотрите результаты проверки в выходном файле агента.

  4. Повторите шаги 1 – 3 для каждой проверяемой подписки.

ПримечаниеПримечание

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

Проверка данных в подписке с помощью параметров агента слияния

  • Запустите агент слияния на подписчике (подписка по запросу) или на распространителе (принудительная подписка) из командной строки одним из следующих способов.

    • Задайте значение 1(количество строк) или 3 (количество строк и двоичная контрольная сумма) в параметре -Validate.

    • Задайте rowcount validation (проверка количества строк) или rowcount and checksum validation (количество строк и контрольная сумма) в параметре -ProfileName.

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

Значок стрелки, используемый со ссылкой «В начало»[Top]

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

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

ПримечаниеПримечание

См. приведенный ниже Пример (объекты RMO).

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

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

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

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

  4. Вызовите метод ValidatePublication. Передайте следующие параметры:

    • ValidationOption

    • ValidationMethod

    • Логическое значение, указывающее, нужно ли прекращать выполнение агента распространителя после окончания проверки.

    Будут отмечены статьи для проверки.

  5. Если агент распространителя еще не работает, запустите его для синхронизации каждой подписки. Дополнительные сведения см. в разделах Синхронизация принудительной подписки и Синхронизация подписки по запросу. Результат операции проверки записывается в журнал агента. Дополнительные сведения см. в разделе Наблюдение за репликацией.

Проверка данных всех подписок на публикацию слиянием

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

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

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

  4. Вызовите метод ValidatePublication. Передайте нужный параметр ValidationOption.

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

Проверка данных в одной подписке на публикацию слиянием

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

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

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

  4. Вызовите метод ValidateSubscription. Передайте имя подписчика, проверяемую базу данных подписки и нужный параметр ValidationOption.

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

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

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

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

            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;

                // If we can't get the properties for this publication, 
                // throw an application exception.
                if (publication.LoadProperties())
                {
                    // Initiate validataion for all subscriptions to this publication.
                    publication.ValidatePublication(ValidationOption.RowCountOnly,
                        ValidationMethod.ConditionalFast, false);

                    // If not already running, start the Distribution Agent at each 
                    // Subscriber to synchronize and validate the subscriptions.
                }
                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(
                    "Subscription validation could not be initiated.", 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 = "AdventureWorks2012"

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

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then

        ' Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly, _
         ValidationMethod.ConditionalFast, False)

        ' If not already running, start the Distribution Agent at each 
        ' Subscriber to synchronize and validate the subscriptions.
    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( _
     "Subscription validation could not be initiated.", ex)
Finally
    conn.Disconnect()
End Try

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

           // Define the server, database, and publication names
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publicationDbName = "AdventureWorks2012";
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2012Replica";

            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())
                {
                    // Initiate validation of the specified subscription.
                    publication.ValidateSubscription(subscriberName,
                        subscriptionDbName, ValidationOption.RowCountOnly);
                    
                    // Start the Merge Agent to synchronize and validate the subscription.
                }
                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(String.Format(
                    "The subscription at {0} to the {1} publication could not " +
                    "be validated.", subscriberName, publicationName), 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 = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"

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
        ' Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName, _
         subscriptionDbName, ValidationOption.RowCountOnly)

        ' Start the Merge Agent to synchronize and validate the subscription.
    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(String.Format( _
     "The subscription at {0} to the {1} publication could not " + _
     "be validated.", subscriberName, publicationName), ex)
Finally
    conn.Disconnect()
End Try

Значок стрелки, используемый со ссылкой «В начало»[Top]