Monitorizar Programáticamente a Replicação

Aplica-se a: SQL ServerAzure SQL Managed Instance

O Replication Monitor é uma ferramenta gráfica que permite monitorizar uma topologia de replicação. Pode aceder programaticamente aos mesmos dados de monitorização utilizando procedimentos armazenados de replicação do Transact-SQL ou os objetos de gestão de replicação (RMO). Estes objetos permitem-lhe programar as seguintes tarefas:

  • Monitorizar o estado das editoras, publicações e subscrições.

  • Monitorize as sessões do Merge Agent em um ou mais Subscritores.

  • Monitorize os comandos transacionais à espera de serem aplicados a um ou mais subscritores.

  • Defina as métricas de limiar que determinam quando uma publicação necessita de intervenção.

  • Monitoriza o estado dos tokens de rastreamento.

Transact-SQL

Monitorizar Editores, publicações e subscrições do Distribuidor

  1. No Distribuidor, na base de dados de distribuição, execute o comando sp_replmonitorhelppublisher. Isto devolve informações de monitorização para todos os Editores que utilizam este Distribuidor. Para limitar o conjunto de resultados a um único Publisher, especifique @publisher.

  2. No Distribuidor, na base de dados de distribuição, execute sp_replmonitorhelppublication. Este devolve informações de monitorização para todas as publicações que utilizam este Distribuidor. Para limitar o conjunto de resultados a um único publicador, publicação ou base de dados publicada, especifique @publisher, @publication ou @publisher_db, respetivamente.

  3. No Distribuidor, na base de dados de distribuição, execute sp_replmonitorhelpsubscription. Isto devolve informações de monitorização para todas as subscrições que utilizam este Distribuidor. Para limitar o conjunto de resultados a subscrições pertencentes a um único Publisher, publicação ou base de dados publicada, especifique @publisher, @publication ou @publisher_db, respetivamente.

Para monitorizar os comandos transacionais à espera de serem aplicados no Subscritor

  1. No distribuidor, na base de dados de distribuição, execute sp_replmonitorsubscriptionpendingcmds. Isto devolve a informação de monitorização de todos os comandos pendentes para todas as subscrições que utilizam este Distribuidor. Para limitar o conjunto de resultados aos comandos pendentes de subscrições que pertençam a um único Publisher, Subscriber, publication ou base de dados publicada, especifique @publisher, @subscriber, @publication ou @publisher_db, respetivamente.

Para monitorizar as alterações de integração à espera de serem enviadas ou transferidas

  1. No Publicador, na base de dados de publicação, execute sp_showpendingchanges. Isto devolve um conjunto de resultados que mostra informações sobre alterações que estão à espera de serem replicadas para os Assinantes. Para limitar o conjunto de resultados a alterações que pertencem a uma única publicação ou artigo, especifique @publication ou @article, respetivamente.

  2. Num subscritor na base de dados de subscrição, execute sp_showpendingchanges. Isto devolve um conjunto de resultados que mostra informações sobre alterações que estão à espera de serem replicadas para o Publisher. Para limitar o conjunto de resultados a alterações que pertencem a uma única publicação ou artigo, especifique @publication ou @article, respetivamente.

Para monitorizar as sessões do Merge Agent

  1. No Distribuidor, na base de dados de distribuição, execute sp_replmonitorhelpmergesession. Este devolve informações de monitorização, incluindo Session_id, em todas as sessões Merge Agent para todas as subscrições que utilizam este Distribuidor. Também pode obter Session_id consultando a tabela do sistema MSmerge_sessions .

  2. No Distribuidor, na base de dados de distribuição, execute sp_replmonitorhelpmergesessiondetail. Especifique um valor de Session_id do passo 1 para @session_id. Isto mostra informações detalhadas do monitor sobre a sessão.

  3. Repita o passo 2 em cada sessão de interesse.

Para monitorizar as sessões do Merge Agent para extrair subscrições do Assinante

  1. No Subscritor da base de dados de subscrição, execute sp_replmonitorhelpmergesession. Para uma determinada subscrição, especifique @publisher, @publication e o nome da base de dados de publicações para @publisher_db. Isto devolve a informação de monitorização das últimas cinco sessões do Merge Agent para esta subscrição. Note o valor da Session_id para sessões de interesse no conjunto de resultados.

  2. No Subscritor, na base de dados de subscrição, execute sp_replmonitorhelpmergesessiondetail. Especifique um valor de Session_id do passo 1 para @session_id. Isto apresenta informações detalhadas de monitorização sobre a sessão.

  3. Repita o passo 2 em cada sessão de interesse.

Visualizar e modificar as métricas de limiar de monitorização para uma publicação

  1. No distribuidor, na base de dados de distribuição, execute sp_replmonitorhelppublicationthresholds. Isto devolve os limiares de monitorização definidos para todas as publicações que utilizam este Distribuidor. Para limitar o conjunto de resultados aos limiares de monitorização de forma a incluir publicações pertencentes a um único Publisher, a uma única base de dados publicada ou a uma única publicação, especifique @publisher, @publisher_db ou @publication, respetivamente. Note o valor de Metric_id para quaisquer limiares que tenham de ser alterados. Para mais informações, consulte Definir Limiares e Avisos no Monitor de Replicação.

  2. No Distribuidor, na base de dados de distribuição, execute sp_replmonitorchangepublicationthreshold. Especifique o seguinte, conforme necessário:

    • O valor Metric_id obtido no passo 1 para @metric_id.

    • Um novo valor para a métrica de limiar do monitor para @value.

    • Um valor de 1 para @shouldalert para que um alerta seja registado quando este limiar é atingido, ou um valor de 0 se o alerta não for necessário.

    • Um valor de 1 para @mode para ativar a métrica de limiar do monitor ou um valor de 2 para a desativar.

Objetos de Gestão de Replicação (RMO)

Para monitorizar uma subscrição de uma publicação de fusão no Subscritor

  1. Crie uma ligação ao Assinante usando a ServerConnection classe.

  2. Crie uma instância da classe MergeSubscriberMonitor, defina as propriedades Publisher, Publication, PublisherDB e SubscriberDB para a subscrição e defina a propriedade ConnectionContext para o ServerConnection criado no passo 1.

  3. Ligue para um dos seguintes métodos para devolver informações sobre as sessões do Merge Agent para esta subscrição:

    • GetSessionsSummary - devolve um array de objetos MergeSessionSummary com informações sobre, no máximo, as últimas cinco sessões do Merge Agent. Anote o valor de SessionId de quaisquer sessões do seu interesse.

    • GetSessionsSummary - devolve um array de objetos MergeSessionSummary com informações sobre as sessões do Merge Agent que ocorreram durante o número de horas anteriores indicado no parâmetro hours (até às cinco sessões mais recentes). Anote o valor SessionId de quaisquer sessões do seu interesse.

    • GetLastSessionSummary- devolve um MergeSessionSummary objeto com informação sobre a última sessão do Merge Agent. Anote o valor SessionId desta sessão.

    • GetSessionsSummaryDataSet- devolve um DataSet objeto com informação sobre até às últimas cinco sessões do Merge Agent, uma em cada linha. Note o valor da coluna Session_id para quaisquer sessões de interesse.

    • GetLastSessionSummaryDataRow- devolve um DataRow objeto com informação sobre a última sessão do Merge Agent. Note o valor da coluna Session_id para esta sessão.

  4. (Opcional) Chamar RefreshSessionSummary para atualizar os dados do MergeSessionSummary objeto passado como mss, ou chamar RefreshSessionSummary para atualizar os dados no DataRow objeto passado como drRefresh.

  5. Usando o ID de sessão obtido no passo 3, chame um dos seguintes métodos para devolver informação sobre os detalhes de uma sessão particular:

Para monitorizar as propriedades de replicação de todas as publicações num Distribuidor

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection.

  2. Crie uma instância da ReplicationMonitor classe.

  3. Defina a propriedade ConnectionContext para o ServerConnection criado no passo 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto.

  5. Execute um ou mais dos seguintes métodos para devolver informação de replicação a todos os Editores que utilizem este Distribuidor.

Para monitorizar as propriedades de publicação de um editor específico no distribuidor

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection.

  2. Obtenha um objeto PublisherMonitor de uma das seguintes formas.

  3. Execute um ou mais dos seguintes métodos para devolver informação de replicação para todas as publicações que pertencem a este Publisher.

Monitorizar propriedades de uma publicação específica no Distribuidor

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection.

  2. Obtenha um objeto PublicationMonitor de uma das seguintes formas.

  3. Execute um ou mais dos seguintes métodos para devolver informações sobre esta publicação.

Para monitorizar comandos transacionais que estão à espera de ser aplicados no Subscritor

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection.

  2. Obtenha um objeto PublicationMonitor de uma das seguintes formas.

  3. Execute o TransPendingCommandInfo método, que devolve um PendingCommandInfo objeto.

  4. Use as propriedades deste PendingCommandInfo objeto para determinar o número estimado de comandos pendentes e o tempo que levará para concluir a entrega desses comandos.

Para definir os limiares de aviso do monitor para uma publicação

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection.

  2. Obtenha um objeto PublicationMonitor de uma das seguintes formas.

  3. Executa o EnumMonitorThresholds método. Note as definições atuais de limiar no retorno ArrayList dos MonitorThreshold objetos.

  4. Executa o ChangeMonitorThreshold método. Passe os seguintes parâmetros:

    • metricID - um Int32 valor que representa a métrica de limiar de monitorização da tabela seguinte:

      Value Description
      1 expiração - monitoriza a proximidade da expiração das subscrições de publicações transacionais.
      2 Latência - monitoriza o desempenho das subscrições a publicações transacionais.
      4 MergeExpiration - monitoriza a expiração iminente das subscrições das publicações da fusão.
      5 Mergeslowrunduration - Monitoriza a duração das sincronizações de fusão em ligações de baixa largura de banda (dial-up).
      6 mergefastrunduration - monitoriza a duração das sincronizações de fusão em ligações de alta largura de banda (LAN).
      7 mergefastrunspeed - monitoriza a taxa de sincronização das sincronizações de fusão em ligações de alta largura de banda (LAN).
      8 mergeslowrunspeed - Monitoriza a taxa de sincronização das sincronizações de fusão em ligações de baixa largura de banda (dialup).
    • enable - Boolean valor que indica se a métrica está ativada para a publicação.

    • thresholdValue - valor inteiro que define o limiar.

    • shouldAlert - inteiro que indica se este limiar deve gerar um alerta.