Como monitorar programaticamente a replicação (programação RMO)
O Replication Monitor é uma ferramenta gráfica que permite monitorar a topologia de replicação. É possível acessar os mesmos dados de monitoração de forma programática, por meio do RMO (Replication Management Objects). As classes RMO permitem programar as seguintes tarefas:
Monitorar os resultados das cinco últimas execuções do Merge Agent no Assinante.
Monitorar o estado de Publicadores, publicações e assinaturas.
Monitorar os comandos transacionais que estão esperando para serem aplicados a um ou mais Assinantes.
Definir os limites métricos que determinam quando uma publicação requer intervenção.
Monitorar o estado de tokens de rastreamento. Para obter mais informações, consulte Como medir a latência e validar conexões para replicação de transação (Programação RMO).
Para monitorar uma assinatura para uma publicação de mesclagem no Assinante
Crie uma conexão com o Assinante usando a classe ServerConnection.
Crie uma instância da classe MergeSubscriberMonitor e defina as propriedades Publisher, Publication, PublisherDB, SubscriberDB para a assinatura, e defina a propriedade ConnectionContext como ServerConnection criado na etapa 1.
Chame um dos métodos seguintes para retornar informações sobre as sessões do Merge Agent para essa assinatura:
GetSessionsSummary()()()()- retorna uma matriz de objetos MergeSessionSummary com informações até as últimas cinco sessões do Merge Agent. Observe o valor SessionID()()()() para qualquer sessão do seu interesse.
GetSessionsSummary(Int32) - retorna uma matriz de objetos MergeSessionSummary com informações das sessões do Merge Agent que ocorreram durante o número de horas passadas no parâmetro hours (até as últimas cinco sessões). Observe o valor SessionID()()()() para qualquer sessão do seu interesse.
GetLastSessionSummary- retorna um objeto MergeSessionSummary com informações sobre a última sessão do Merge Agent. Observe o valor de SessionID()()()() para esta sessão.
GetSessionsSummaryDataSet- retorna uma matriz de objetos DataSet com informações até as últimas cinco sessões do Merge Agent, uma em cada linha. Observe o valor da coluna Session_id para qualquer sessão do seu interesse.
GetLastSessionSummaryDataRow- retorna um objeto DataRow com informações sobre a última sessão do Merge Agent. Observe o valor da coluna Session_id para essa sessão.
(Opcional) Chame o RefreshSessionSummary(MergeSessionSummary%) para atualizar os dados para o objeto MergeSessionSummary passado como mss, ou chame RefreshSessionSummary(DataRow%) para atualizar os dados no objeto DataRow passado como drRefresh.
Usando a id de sessão obtida na etapa 3, chame um dos métodos seguintes para retornar informações sobre os detalhes de uma sessão em particular:
GetSessionDetails- retorna uma matriz de objetos MergeSessionDetail para a sessionID fornecida.
GetSessionDetailsDataSet- retorna um objeto DataSet com informações para a sessionIDespecificada.
Para monitorar as propriedades de replicação para todas as publicações em um Distribuidor
Crie uma conexão com o Distribuidor usando a classe ServerConnection.
Crie uma instância da classe ReplicationMonitor.
Defina a propriedade ConnectionContext como ServerConnection criada na etapa 1.
Chame o método LoadProperties para obter as propriedades do objeto.
Execute um ou mais dos métodos seguintes para retornar informações de replicação para todos os Publicador que usam esse Distribuidor.
EnumDistributionAgents- retorna um objeto DataSet que contém informações sobre todos os Distribution Agents nesse Distribuidor.
EnumErrorRecords- retorna um objeto DataSet que contém informações sobre os erros armazenados no Distribuidor.
EnumLogReaderAgents- retorna um objeto DataSet que contém informações sobre todos os Log Reader Agents no Distribuidor.
EnumMergeAgents- retorna um objeto DataSet que contém informações sobre todos os Merge Agents no Distribuidor.
EnumMiscellaneousAgents- retorna um objeto DataSet que contém informações sobre todos os outros agentes de replicação no Distribuidor.
EnumPublishers- retorna um objeto DataSet que contém informações sobre todos os Publicador nesse Distribuidor.
EnumPublishers2- retorna um objeto DataSet que retorna os Publicadores que usam esse Distribuidor.
EnumQueueReaderAgents- retorna um objeto DataSet que contém informações sobre todos os Queue Reader Agents no Distribuidor.
EnumQueueReaderAgentSessionDetails- retorna um objeto DataSet que contém detalhes sobre o Queue Reader Agent e a sessão especificados.
EnumQueueReaderAgentSessions- retorna um objeto DataSet que contém informações de sessão sobre o Queue Reader Agent especificado.
EnumSnapshotAgents- retorna um objeto DataSet que contém informações sobre todos os Snapshot Agents no Distribuidor.
Para monitorar as propriedades de publicação para um Publicador específico no Distribuidor
Crie uma conexão com o Distribuidor usando a classe ServerConnection.
Consiga um objeto PublisherMonitor em um desses modos.
Crie uma instância da classe PublisherMonitor. Defina a propriedade Name para o Publicador e defina a propriedade ConnectionContext como ServerConnection criada na etapa 1. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, o nome do Publicador estava definido incorretamente ou a publicação não existe.
Do PublisherMonitorCollection acessado por meio da propriedade PublisherMonitors de um objeto existente ReplicationMonitor.
Execute um ou mais dos métodos a seguir para retornar informações de replicação para todas as publicações que pertençam a esse Publicador.
EnumDistributionAgentSessionDetails- retorna um objeto DataSet que contém detalhes sobre o Distribution Agent e a sessão especificados.
EnumDistributionAgentSessions- retorna um objeto DataSet que contém informação da sessão sobre o Distribution Agent especificado.
EnumErrorRecords- retorna um objeto DataSet que contém informações de registro de erros sobre o erro especificado.
EnumLogReaderAgentSessionDetails- retorna um objeto DataSet que contém detalhes sobre o Log Reader Agent e a sessão especificados.
EnumLogReaderAgentSessions- retorna um objeto DataSet que contém informações de sessão sobre o Log Reader Agent especificado.
EnumMergeAgentSessionDetails- retorna um objeto DataSet que contém detalhes sobre o Merge Agent e a sessão especificados.
EnumMergeAgentSessionDetails2- retorna um objeto DataSet que contém detalhes adicionais sobre o Merge Agent e a sessão especificados.
EnumMergeAgentSessions- retorna um objeto DataSet que contém informação da sessão para o Merge Agent especificado.
EnumMergeAgentSessions2- retorna um objeto DataSet que contém informações de sessão adicional para o Merge Agent especificado.
EnumPublications- retorna um objeto DataSet que contém informações sobre todas as publicações nesse Distribuidor.
EnumPublications2- retorna um objeto DataSet que contém informações adicionais sobre todas as publicações nesse Distribuidor.
EnumSnapshotAgentSessionDetails- retorna um objeto DataSet que contém detalhes sobre o Snapshot Agent e a sessão especificados.
EnumSnapshotAgentSessions- retorna um objeto DataSet que contém informação da sessão para o Snapshot Agent especificado.
EnumSubscriptions- retorna um objeto DataSet que contém informações sobre todas as assinaturas para publicações nesse Distribuidor.
Para monitorar as propriedades para uma publicação específica no Distribuidor
Crie uma conexão com o Distribuidor usando a classe ServerConnection.
Consiga um objeto PublicationMonitor em um desses modos.
Crie uma instância da classe PublicationMonitor. Defina as propriedades DistributionDBName, PublisherName, PublicationDBName eName para a publicação e defina a propriedade ConnectionContext como ServerConnection criado na etapa 1. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação foram definidas incorretamente ou a publicação não existe.
Do PublicationMonitorCollection acessado por meio da propriedade PublicationMonitors de um objeto existente PublisherMonitor.
Execute um ou mais dos métodos seguintes para retornar informações sobre essa publicação.
EnumErrorRecords- retorna um objeto DataSet que contém registros de erro sobre o erro especificado.
EnumLogReaderAgent- retorna um objeto DataSet que contém informações sobre o Log Reader Agent para essa publicação.
EnumMonitorThresholds- retorna um objeto DataSet que contém informações sobre o conjunto de limites de monitoração de avisos para essa publicação.
EnumQueueReaderAgent- retorna um objeto DataSet que contém informações sobre o Queue Reader Agent usado por essa publicação.
EnumSnapshotAgent- retorna um objeto DataSet que contém informações sobre o Snapshot Agent para essa publicação.
EnumSubscriptions- retorna um objeto DataSet que contém informações sobre assinaturas para essa publicação.
EnumSubscriptions2- retorna um objeto DataSet que contém informações adicionais sobre assinaturas para essa publicação com base no SubscriptionResultOptionfornecido.
EnumTracerTokenHistory- retorna um objeto DataSet que contém informações de latência para o token de rastreamento especificado.
EnumTracerTokens- retorna um objeto DataSet que contém informações sobre todos os tokens de rastreamento inseridos nessa publicação.
Para monitorar os comandos transacionais que estão esperando para serem aplicados no Assinante.
Crie uma conexão com o Distribuidor usando a classe ServerConnection.
Consiga um objeto PublicationMonitor em um desses modos.
Crie uma instância da classe PublicationMonitor. Defina as propriedades DistributionDBName, PublisherName, PublicationDBName, eName para a publicação e defina a propriedade ConnectionContext como ServerConnection criado na etapa 1. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação foram definidas incorretamente ou a publicação não existe.
Do PublicationMonitorCollection acessado por meio da propriedade PublicationMonitors de um objeto existente PublisherMonitor.
Execute o método TransPendingCommandInfo que retorna um objeto PendingCommandInfo.
Use as propriedades desse objeto PendingCommandInfo para determinar o número estimado de comandos pendentes e o tempo que levará para completar a entrega desses comandos.
Para definir os limites de aviso de monitoração para uma publicação
Crie uma conexão com o Distribuidor usando a classe ServerConnection.
Consiga um objeto PublicationMonitor em um desses modos.
Crie uma instância da classe PublicationMonitor. Defina as propriedades DistributionDBName, PublisherName, PublicationDBName, eName para a publicação e defina a propriedade ConnectionContext como ServerConnection criado na etapa 1. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação foram definidas incorretamente ou a publicação não existe.
Do PublicationMonitorCollection acessado por meio da propriedade PublicationMonitors de um objeto existente PublisherMonitor.
Execute o método EnumMonitorThresholds. Observe as configurações de limite atuais no ArrayList retornado de objetos MonitorThreshold.
Execute o método ChangeMonitorThreshold. Passe os seguintes parâmetros:
metricID- um valor Int32 que representa a métrica de limite de monitoração da tabela a seguir:
Valor
Descrição
1
expiration- monitora a expiração iminente de assinaturas para publicações transacionais.
2
latency- monitora o desempenho de assinaturas para publicações transacionais.
4
mergeexpiration- monitora a expiração iminente de assinaturas para publicações de mesclagem.
5
mergeslowrunduration- monitora a duração de sincronizações de mesclagem em conexões da baixa largura da banda (dial-up).
6
mergefastrunduration- monitora a duração de sincronizações de mesclagem em conexões de alta largura de banda (LAN).
7
mergefastrunspeed - monitora a taxa de sincronizações de mesclagem em conexões de alta largura da banda (LAN).
8
mergeslowrunspeed - monitora a taxa de sincronizações de mesclagem em conexões de baixa largura da banda (dial-up).
enable- Boolean valor que indica se a métrico está habilitado para a publicação.
thresholdValue- valor inteiro que define o limite.
shouldAlert- inteiro que indica se esse limite deve gerar um alerta.
Consulte também