Наблюдение за репликацией программным образом
Область применения: SQL Server Управляемый экземпляр SQL Azure
Монитор репликации — это графическое средство, позволяющее осуществлять мониторинг топологии репликации. Доступ к тем же данным мониторинга можно получить программным способом с помощью хранимых процедур репликации Transact-SQL или объектов управления репликацией (RMO). Эти объекты позволяют программировать следующие задачи:
Наблюдение за состоянием издателей, публикаций и подписок.
Мониторинг сеансов агентов слияния на одном или нескольких подписчиках.
Мониторинг команд транзакций, ожидающих выполнения на одном или нескольких подписчиках.
Установка пороговых показателей, определяющих, когда необходимо вмешательство в публикацию.
Мониторинг состояния трассировочных токенов.
В этом разделе:
Transact-SQL
Мониторинг издателей, публикаций и подписок с распространителя
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelppublisher. Будут возвращены данные мониторинга всех издателей, использующих этот распространитель. Чтобы ограничить результирующий набор одним издателем, задайте параметр @publisher.
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelppublication. Будут возвращены данные мониторинга для всех публикаций, использующих этот распространитель. Чтобы ограничить результирующий набор одним издателем, одной публикацией или одной опубликованной базой данных, задайте, соответственно, параметр @publisher, @publicationили @publisher_db.
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelpsubscription. Будут возвращены данные мониторинга для всех подписок, использующих этот распространитель. Чтобы ограничить результирующий набор подписками, принадлежащими одному издателю, публикации или опубликованной базе данных, задайте, соответственно, параметр @publisher, @publication, или @publisher_db.
Мониторинг команд транзакций, ожидающих выполнения на подписчике
- В базе данных распространителя на распространителе выполните процедуру sp_replmonitorsubscriptionpendingcmds. Будут возвращены данные мониторинга по всем ждущим командам для всех подписок, использующих этот распространитель. Чтобы ограничить результирующий набор ждущими командами для подписок, принадлежащих одному издателю, подписчику, публикации или опубликованной базе данных, укажите, соответственно, параметр @publisher, @subscriber, @publicationили @publisher_db.
Мониторинг изменений слияния, ожидающих загрузки или выгрузки
В базе данных публикации на издателе выполните процедуру sp_showpendingchanges. Это возвращает результирующий набор с информацией об изменениях, ожидающих репликации на серверы-подписчики. Чтобы ограничить результирующий набор изменениями, которые принадлежат одной публикации или статье, укажите параметр @publication или @articleсоответственно.
В базе данных подписки на подписчике выполните процедуру sp_showpendingchanges. Это возвращает результирующий набор с информацией об изменениях, ожидающих репликации на сервер-издатель. Чтобы ограничить результирующий набор изменениями, которые принадлежат одной публикации или статье, укажите параметр @publication или @articleсоответственно.
Мониторинг сеансов агента слияния
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelpmergesession. Это возвращает данные мониторинга, включая Session_id, по всем сеансам агента слияния для всех подписок, использующих этот распространитель. Еще один способ получить Session_id — это запросить системную таблицу MSmerge_sessions .
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelpmergesessiondetail. В параметре @session_id укажите полученное на шаге 1 значение Session_id. Будут выданы подробные сведения о сеансе.
Повторите шаг 2 для всех интересующих сеансов.
Мониторинг сеансов агента слияния для подписок по запросу с подписчика
В базе данных подписки на подписчике выполните процедуру sp_replmonitorhelpmergesession. Для данной подписки укажите @publisher, @publicationи имя базы данных публикации для @publisher_db. Будут возвращены сведения о последних пяти сеансах агента слияния для этой подписки. Запомните значение Session_id для сеансов, представляющих интерес в результирующем наборе.
В базе данных подписки на подписчике выполните процедуру sp_replmonitorhelpmergesessiondetail. В параметре @session_id укажите полученное на шаге 1 значение Session_id. Будут возвращены подробные данные мониторинга сеанса.
Повторите шаг 2 для всех интересующих сеансов.
Получение и изменение пороговых метрик мониторинга для публикации
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorhelppublicationthresholds. Будут возвращены пороговые значения мониторинга для всех публикаций, использующих этот распространитель. Чтобы ограничить результирующий набор пороговыми значениями для публикаций, принадлежащих одному издателю, одной опубликованной базе данных или одной публикации, задайте, соответственно, параметр @publisher, @publisher_dbили @publication. Запомните значение Metric_id для всех порогов, которые требуется изменить. Дополнительные сведения см. в статье Set Thresholds and Warnings in Replication Monitor.
В базе данных распространителя на распространителе выполните процедуру sp_replmonitorchangepublicationthreshold. Если требуется, укажите следующие значения.
Значение Metric_id , полученное в шаге 1, в параметре @metric_id.
Новое отслеживаемое значение пороговой метрики в параметре @value.
Значение 1 в параметре @shouldalert , чтобы при достижении порога записывалось в журнал предупреждение, или 0 , если предупреждение не требуется.
Значение 1 в параметре @mode , чтобы включить мониторинг пороговой метрики, или 2 , чтобы выключить его.
объекты RMO;
Мониторинг подписки на публикацию слиянием на подписчике
Создайте соединение с подписчиком с помощью класса ServerConnection .
Создайте экземпляр класса MergeSubscriberMonitor и задайте свойства Publisher, Publication, PublisherDB, SubscriberDB для подписки, а затем задайте свойства ConnectionContext для ServerConnection , созданного в шаге 1.
Чтобы получить сведения о сеансах агента слияния для данной подписки, вызовите один из следующих методов.
GetSessionsSummary — возвращает массив объектов MergeSessionSummary со сведениями о последних пяти сеансах агента слияния. Запомните значения SessionId для всех необходимых сеансов.
GetSessionsSummary — возвращает массив объектов MergeSessionSummary со сведениями о сеансах агента слияния за количество часов, указанное в параметре hours (до пяти последних сеансов). Запомните значения SessionId для всех необходимых сеансов.
GetLastSessionSummary — возвращает объект MergeSessionSummary с информацией о последнем сеансе агента слияния. Запомните значение SessionId для этого сеанса.
GetSessionsSummaryDataSet — возвращает объект DataSet со сведениями о последних сеансах агента слияния (до пяти сеансов по одному в каждой строке). Запишите значение столбца Session_id для каждого сеанса, представляющего интерес.
GetLastSessionSummaryDataRow — возвращает объект DataRow с информацией о последнем сеансе агента слияния. Запишите значение столбца Session_id для каждого сеанса, представляющего интерес.
Вызовите RefreshSessionSummary , чтобы обновить данные для объекта MergeSessionSummary , передаваемого в качестве параметра mss, или вызовите RefreshSessionSummary , чтобы обновить данные для объекта DataRow , передаваемого в качестве параметра drRefresh.
С помощью идентификатора сеанса, полученного в шаге 3, вызовите один из следующих методов для получения сведений об отдельном сеансе.
GetSessionDetails — возвращает массив объектов MergeSessionDetail для указанного SessionId.
GetSessionDetailsDataSet — возвращает объект DataSet со сведениями для указанного SessionId.
Мониторинг свойств репликации для всех публикаций на распространителе
Создайте соединение с распространителем с помощью класса ServerConnection .
Создайте экземпляр класса ReplicationMonitor.
Укажите для свойства ConnectionContext в качестве значения соединение ServerConnection , созданное в шаге 1.
Чтобы получить свойства объекта, вызовите метод LoadProperties .
Выполните один или несколько следующих методов для получения сведений о репликации по всем издателям, использующим данный распространитель.
EnumDistributionAgents — возвращает объект DataSet со сведениями обо всех агентах распространителя на данном распространителе.
EnumErrorRecords — возвращает объект DataSet со сведениями об ошибках, которые хранятся на данном распространителе.
EnumLogReaderAgents — возвращает объект DataSet со сведениями обо всех агентах чтения журнала на данном распространителе.
EnumMergeAgents — возвращает объект DataSet со сведениями обо всех агентах слияния на данном распространителе.
EnumMiscellaneousAgents — возвращает объект DataSet со сведениями обо всех остальных агентах репликации на данном распространителе.
EnumPublishers — возвращает объект DataSet со сведениями обо всех издателях на данном распространителе.
EnumPublishers2 — возвращает объект DataSet со списком издателей, использующих данный распространитель.
EnumQueueReaderAgents — возвращает объект DataSet со сведениями обо всех агентах чтения очереди на данном распространителе.
EnumQueueReaderAgentSessionDetails — возвращает объект DataSet со сведениями об указанном агенте чтения очереди и сеансе.
EnumQueueReaderAgentSessions — возвращает объект DataSet со сведениями сеанса об указанном агенте чтения очереди.
EnumSnapshotAgents — возвращает объект DataSet со сведениями обо всех агентах моментальных снимков на данном распространителе.
Мониторинг свойств публикации для указанного издателя на распространителе
Создайте соединение с распространителем с помощью класса ServerConnection .
Получите объект PublisherMonitor одним из следующих способов.
Создайте экземпляр класса PublisherMonitor. Задайте для издателя свойство Name , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства ServerConnection . Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает значение false, это означает, что было неправильно задано имя издателя или такой публикации не существует.
Из коллекции PublisherMonitorCollection , доступ к которой был получен с помощью свойства PublisherMonitors существующего объекта ReplicationMonitor .
Выполните один или несколько следующих методов, чтобы получить сведения о репликации по всем публикациям, принадлежащим данному издателю.
EnumDistributionAgentSessionDetails — возвращает объект DataSet со сведениями об указанном агенте распространителя и сеансе.
EnumDistributionAgentSessions — возвращает объект DataSet со сведениями об указанном агенте распространителя.
EnumErrorRecords — возвращает объект DataSet с информацией журнала ошибок об указанной ошибке.
EnumLogReaderAgentSessionDetails — возвращает объект DataSet со сведениями об указанном агенте чтения журнала и сеансе.
EnumLogReaderAgentSessions — возвращает объект DataSet со сведениями сеанса по указанному агенту чтения журнала.
EnumMergeAgentSessionDetails — возвращает объект DataSet со сведениями об указанном агенте слияния и сеансе.
EnumMergeAgentSessionDetails2 — возвращает объект DataSet со сведениями об указанном агенте слияния и сеансе.
EnumMergeAgentSessions — возвращает объект DataSet со сведениями сеанса об указанном агенте слияния.
EnumMergeAgentSessions2 — возвращает объект DataSet с дополнительными сведениями сеанса об указанном агенте слияния.
EnumPublications — возвращает объект DataSet со сведениями обо всех публикациях на данном распространителе.
EnumPublications2 — возвращает объект DataSet с дополнительными сведениями обо всех публикациях на данном распространителе.
EnumSnapshotAgentSessionDetails — возвращает объект DataSet со сведениями об указанном агенте моментальных снимков и сеансе.
EnumSnapshotAgentSessions — возвращает объект DataSet со сведениями сеанса об указанном агенте моментальных снимков.
EnumSubscriptions — возвращает объект DataSet со сведениями обо всех подписках на публикации на данном распространителе.
Мониторинг свойств указанной публикации на распространителе
Создайте соединение с распространителем с помощью класса ServerConnection .
Получите объект PublicationMonitor одним из следующих способов.
Создайте экземпляр класса PublicationMonitor. Задайте для публикации свойства DistributionDBName, PublisherName, PublicationDBNameи Name , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства ServerConnection . Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо свойства публикации были определены неверно, либо публикация не существует.
Из коллекции PublicationMonitorCollection , доступ к которой был получен с помощью свойства PublicationMonitors существующего объекта PublisherMonitor .
Выполните один или несколько следующих методов для получения сведений о данной публикации.
EnumErrorRecords — возвращает объект DataSet с информацией журнала ошибок об указанной ошибке.
EnumLogReaderAgent — возвращает объект DataSet со сведениями об агенте чтения журнала для данной публикации.
EnumMonitorThresholds — возвращает объект DataSet с информацией по мониторингу пороговых значений, заданных для этой публикации.
EnumQueueReaderAgent — возвращает объект DataSet со сведениями об агенте чтения очереди, используемом данной публикацией.
EnumSnapshotAgent — возвращает объект DataSet со сведениями об агенте моментальных снимков для данной публикации.
EnumSubscriptions — возвращает объект DataSet со сведениями обо всех подписках на эту публикацию.
EnumSubscriptions2 — возвращает объект DataSet с дополнительными сведениями обо всех подписках на данную публикацию в зависимости от параметра SubscriptionResultOption.
EnumTracerTokenHistory — возвращает объект DataSet с данными задержки для указанного трассировочного токена.
EnumTracerTokens — возвращает объект DataSet со сведениями обо всех трассировочных токенах, вставленных в данную публикацию.
Мониторинг команд транзакций, ожидающих выполнения на подписчике
Создайте соединение с распространителем с помощью класса ServerConnection .
Получите объект PublicationMonitor одним из следующих способов.
Создайте экземпляр класса PublicationMonitor. Задайте для публикации свойства DistributionDBName, PublisherName, PublicationDBNameи Name , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства ServerConnection . Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо свойства публикации были определены неверно, либо публикация не существует.
Из коллекции PublicationMonitorCollection , доступ к которой был получен с помощью свойства PublicationMonitors существующего объекта PublisherMonitor .
Выполните метод TransPendingCommandInfo , который возвращает объект PendingCommandInfo .
Используйте свойства этого объекта PendingCommandInfo для определения примерного количества команд, ожидающих выполнения, и необходимого времени для завершения их доставки.
Мониторинг пороговых значений предупреждений для публикации
Создайте соединение с распространителем с помощью класса ServerConnection .
Получите объект PublicationMonitor одним из следующих способов.
Создайте экземпляр класса PublicationMonitor. Задайте для публикации свойства DistributionDBName, PublisherName, PublicationDBNameи Name , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства ServerConnection . Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо свойства публикации были определены неверно, либо публикация не существует.
Из коллекции PublicationMonitorCollection , доступ к которой был получен с помощью свойства PublicationMonitors существующего объекта PublisherMonitor .
Вызовите метод EnumMonitorThresholds . Запомните текущие пороговые значения в возвращаемом списке ArrayList объектов MonitorThreshold .
Вызовите метод ChangeMonitorThreshold . Передайте следующие параметры:
metricID — это значение Int32 , представляющее пороговую метрику из следующей таблицы.
значение Description 1 expiration следит за приближающимся истечением срока подписки на публикации транзакций. 2 latency следит за производительностью подписки на публикации транзакций. 4 mergeexpiration следит за приближающимся истечением срока подписки на публикации слиянием. 5 mergeslowrunduration — следит за продолжительностью синхронизаций слиянием через соединения с низкой пропускной способностью (коммутируемые). 6 mergefastrunduration следит за длительностью синхронизации слиянием через соединения с высокой пропускной способностью (локальная сеть). 7 mergefastrunspeed — следит за частотой синхронизаций слиянием через соединения с высокой пропускной способностью (локальная сеть). 8 mergeslowrunspeed — следит за частотой синхронизаций слиянием через соединения с низкой пропускной способностью (коммутируемые). enable - Boolean , которое указывает, включен ли этот показатель для данной публикации.
thresholdValue — целое значение, определяющее порог.
shouldAlert — целочисленное значение, которое указывает, должен ли порог вызывать предупреждение.