{"id":3924,"date":"2016-06-09T09:45:07","date_gmt":"2016-06-09T12:45:07","guid":{"rendered":"http:\/\/www.fabriciolima.net\/blog\/?p=3924"},"modified":"2016-07-23T14:56:07","modified_gmt":"2016-07-23T17:56:07","slug":"queries-do-dia-a-dia-monitorando-erros-em-uma-replicacao-transacional","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2016\/06\/09\/queries-do-dia-a-dia-monitorando-erros-em-uma-replicacao-transacional\/","title":{"rendered":"Queries do Dia a Dia &#8211; Monitorando Erros em uma Replica\u00e7\u00e3o Transacional"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Esse \u00e9 um post r\u00e1pido com uma dica de uma rotina que implantei em um <a href=\"https:\/\/www.fabriciolima.net\/clientes\/\" target=\"_blank\">cliente<\/a> com replica\u00e7\u00e3o.<\/p>\n<p>Na minha opni\u00e3o, replica\u00e7\u00e3o \u00e9 uma das funcionalidades mais complicadas de se configurar e administrar no SQL Server. No meu caso, era uma replica\u00e7\u00e3o um pouco mais simples de 250 tabelas entre dois servidores e n\u00e3o era bidirecional. Com uma replica\u00e7\u00e3o merge ou bidirecional, come\u00e7a a complicar mais um pouco.<\/p>\n<p>Uma das minhas preocupa\u00e7\u00f5es era de monitorar os erros gerados pela replica\u00e7\u00e3o, mas com o comando abaixo conseguimos monitorar esses erros:<\/p>\n<p>select time, error_text, xact_seqno,command_id<br \/>\nfrom distribution.dbo.MSrepl_errors<br \/>\nwhere error_code &lt;&gt; &#8221;<\/p>\n<p style=\"text-align: center;\">\u00a0<a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3928\" title=\"ReplicacaoError\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-1024x268.png\" alt=\"\" width=\"614\" height=\"161\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-1024x268.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-300x79.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-768x201.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-700x183.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-410x107.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-100x26.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-275x72.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError-20x5.png 20w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/ReplicacaoError.png 1321w\" sizes=\"auto, (max-width: 614px) 100vw, 614px\" \/><\/a><\/p>\n<p>Dessa forma, criei um alerta para rodar a cada 30 min e \u00a0enviar um e-mail em HTML com os erros que s\u00e3o inseridos nessa tabela de log da replica\u00e7\u00e3o.<\/p>\n<p>Segue o c\u00f3digo para criar a procedure que far\u00e1 o envio desse alerta: <a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/06\/Alertas-Erros-Replicacao.txt\" target=\"_blank\">Alertas Erros Replicacao<\/a><\/p>\n<p>Basta alterar o profile e o e-mail para envio no c\u00f3digo da procedure e, em seguida, criar um job para rodar o alerta a cada 30 min.<\/p>\n<p>Caso um erro seja encontrado, ser\u00e1 enviado um alerta conforme o abaixo:<\/p>\n<p style=\"text-align: center;\">\u00a0<a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/EmailErroReplicacao.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3929\" title=\"EmailErroReplicacao\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/03\/EmailErroReplicacao-1024x315.png\" alt=\"\" width=\"574\" height=\"177\" \/><\/a><\/p>\n<p>Espero que esse alerta possa te ajudar.<\/p>\n<p><b>Gostou desse Post?<\/b><\/p>\n<p>Cadastre seu e-mail para receber novos Posts e curta minha <a href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\">P\u00e1gina no Facebook<\/a> para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Caso queira aprender mais scripts e rotinas do dia a dia de um DBA, olhe o conte\u00fado desse treinamento: <a href=\"https:\/\/www.fabriciolima.net\/cursos-online\/treinamento-tarefas-do-dia-a-dia-de-um-dba-online\/\" target=\"_blank\">Tarefas do Dia a Dia de um DBA<\/a><\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>MCITP \u2013 Database Administrator<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 Pessoal, Esse \u00e9 um post r\u00e1pido com uma dica de uma rotina que implantei em um cliente com replica\u00e7\u00e3o. Na minha opni\u00e3o, replica\u00e7\u00e3o \u00e9 uma das funcionalidades mais complicadas de se configurar e administrar no SQL Server. No meu caso, era uma replica\u00e7\u00e3o um pouco mais simples de 250 tabelas entre dois servidores e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[3,942,1248,33,280],"tags":[1241,1238,1235,1240,1239,701,1234,1236,33,1237],"class_list":["post-3924","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-consultoria-sql-server","category-queries-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-alert-replication","tag-alerta-replicacao","tag-erro-replicacao","tag-monitor-replication","tag-monitorando-replicacao","tag-replicacao","tag-replicacao-transacional","tag-replication","tag-sql-server","tag-transactional"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/3924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=3924"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/3924\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=3924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=3924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=3924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}