{"id":8022,"date":"2017-12-05T12:39:44","date_gmt":"2017-12-05T14:39:44","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=8022"},"modified":"2017-12-05T12:39:44","modified_gmt":"2017-12-05T14:39:44","slug":"casos-do-dia-a-dia-resolvendo-a-falha-de-um-job-automaticamente-com-a-opcao-retry-job","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2017\/12\/05\/casos-do-dia-a-dia-resolvendo-a-falha-de-um-job-automaticamente-com-a-opcao-retry-job\/","title":{"rendered":"Casos do Dia a Dia: Resolvendo a falha de um job automaticamente com a op\u00e7\u00e3o RETRY JOB"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Quem a\u00ed nunca teve uma falha de job onde a solu\u00e7\u00e3o para essa falha foi simplesmente executar o job novamente?<\/p>\n<p>Isso acontece muito em jobs de backup onde trafegamos os dados para outro local na rede.<\/p>\n<p>Por um momento de instabilidade na rede na madrugada ou no fim de semana, todo o backup falha. Nesse caso, ou voc\u00ea fica atento a essas notifica\u00e7\u00f5es de falhas e resolve na hora ou s\u00f3 vai resolver o problema quando chegar no trabalho.<\/p>\n<p>Temos isso em alguns clientes. J\u00e1 debatemos com eles o problema, mas muitos n\u00e3o conseguem solucionar a intermit\u00eancia de rede.<\/p>\n<p>Os jobs falhavam, receb\u00edamos as notifica\u00e7\u00f5es e t\u00ednhamos que logar no cliente para resolver. <strong>O que acaba gerando\u00a0custo para o cliente do nosso valor hora que seria utilizado para coisas mais relevantes no ambiente.<\/strong><\/p>\n<p>Amenizando o problema&#8230;<\/p>\n<p>O ideal \u00e9 que seja investigado a causa raiz dessa intermit\u00eancia na rede para resolver o problema em <strong>definitivo<\/strong>. Contudo, essa a\u00e7\u00e3o nem sempre tem um retorno r\u00e1pido e podemos continuar <strong>sem Backup<\/strong> (<span style=\"color: #ff0000;\"><strong>isso \u00e9 CR\u00cdTICO<\/strong><\/span>) ou ter que agir <strong>manualmente<\/strong> toda vez que o JOB falhar.<\/p>\n<p>Uma solu\u00e7\u00e3o <strong>paliativa<\/strong> \u00e9 utilizar a op\u00e7\u00e3o <strong>RETRY<\/strong> no JOB.<\/p>\n<p>Para\u00a0configurar essa op\u00e7\u00e3o, basta seguir os passos\u00a0abaixo conforme o print:<\/p>\n<p><strong>Propriedades do JOB -&gt; Steps -&gt; Propriedades do Step 1 -&gt; Advanced -&gt;\u00a0<\/strong><\/p>\n<p><strong>Retry attempts: 3<\/strong> (n\u00famero de tentativas)<\/p>\n<p><strong>Retry interval (minutes): 1<\/strong> (intervalo em minutos)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8023\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao.png\" alt=\"\" width=\"691\" height=\"375\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao.png 691w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao-300x163.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao-410x223.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao-100x54.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao-275x149.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_Configuracao-20x11.png 20w\" sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><\/p>\n<p>Para explicar o funcionamento do <strong>RETRY<\/strong>, criei um JOB que ir\u00e1 <strong>falhar por 3 vezes<\/strong> e <strong>funcionar na quarta execu\u00e7\u00e3o<\/strong>.<\/p>\n<p>Primeiro criei a tabela abaixo:<\/p>\n<pre class=\"lang:tsql decode:true\">CREATE TABLE Teste_Retry(id INT)\r\n\r\nINSERT INTO Teste_Retry VALUES(1)<\/pre>\n<p>Depois inclui o script abaixo no JOB que usa minha tabela de teste para controlar as 3 primeiras falhas e a quarta execu\u00e7\u00e3o com sucesso:<\/p>\n<pre class=\"lang:tsql decode:true \">DECLARE @Tentativa INT\r\n\r\nSELECT @Tentativa = id\r\nFROM Teste_Retry\r\n\r\n--SELECT @Tentativa\r\n\r\nUPDATE Teste_Retry\r\nSET id = id + 1\r\n\r\nIF (@Tentativa &lt; 4)\r\nBEGIN\r\nPRINT 'TENTATIVA ' + CAST(@Tentativa AS VARCHAR) + ': VOU FALHAR E EXECUTAR NOVAMENTE PELO RETRY!'\r\nSELECT 1 \/ 0\r\nEND\r\nELSE\r\nBEGIN\r\nPRINT 'TENTATIVA ' + CAST(@Tentativa AS VARCHAR) + ': EXECUTEI COM SUCESSO!!!'\r\nEND<\/pre>\n<p>Segue abaixo\u00a0algumas <strong>observa\u00e7\u00f5es\u00a0<\/strong>ap\u00f3s a execu\u00e7\u00e3o do JOB:<\/p>\n<ul>\n<li>Repare que o <strong>Status<\/strong> do JOB fica como <strong>&#8220;Between retries&#8221;<\/strong> enquanto n\u00e3o terminar as tentativas\u00a0ou executar com sucesso\/erro.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8024\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN.png\" alt=\"\" width=\"665\" height=\"63\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN.png 665w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN-300x28.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN-410x39.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN-100x9.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN-275x26.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_BETWEEN-20x2.png 20w\" sizes=\"auto, (max-width: 665px) 100vw, 665px\" \/><\/p>\n<ul>\n<li>Conforme esperado, ap\u00f3s 3 tentativas, o JOB finaliza com sucesso e fica com o Status <strong>&#8220;Succeeded&#8221;<\/strong>\u00a0na <strong>tentativa 4<\/strong>.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8025\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED.png\" alt=\"\" width=\"693\" height=\"62\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED.png 693w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED-300x27.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED-410x37.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED-100x9.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED-275x25.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_STATUS_SUCCEEDED-20x2.png 20w\" sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><\/p>\n<ul>\n<li>Repare\u00a0como fica o History do JOB. Apesar de executar com sucesso na \u00faltima tentativa, o hist\u00f3rico fica com uma <strong>exclama\u00e7\u00e3o<\/strong> por ter utilizado o <strong>RETRY<\/strong>.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8026\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY.png\" alt=\"\" width=\"1216\" height=\"117\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY.png 1216w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-300x29.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-1024x99.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-768x74.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-700x67.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-410x39.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-100x10.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-275x26.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/08\/RETRY_JOB_HISTORY-20x2.png 20w\" sizes=\"auto, (max-width: 1216px) 100vw, 1216px\" \/><\/p>\n<p><strong>Fabr\u00edcio, mas como vou saber se meu backup est\u00e1 falhando e fazendo o RETRY?<\/strong><\/p>\n<p>Basta implantar minhas rotinas de <a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/10\/05\/video-criando-15-alertas-no-sql-server-em-apenas-5-minutos\/\" target=\"_blank\" rel=\"noopener\">Alerta<\/a> ou o meu <a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/05\/01\/criando-um-e-mail-de-checklist-diario-no-sql-server\/\" target=\"_blank\" rel=\"noopener\">Checklist<\/a> que ser\u00e1 avisado quando isso acontecer.<\/p>\n<p><strong>Resumindo:<\/strong><\/p>\n<p>Como podemos observar, a op\u00e7\u00e3o <strong>RETRY<\/strong> \u00e9 muito simples de ser configurada e pode ser muito \u00fatil.<\/p>\n<p>No\u00a0caso do JOB do Backup, utilizamos 3 tentativas e um intervalo de 1 hora entre as execu\u00e7\u00f5es. Dessa forma,\u00a0o problema ser\u00e1 resolvido automaticamente sem precisar de interven\u00e7\u00e3o manual (custo $$$).<\/p>\n<p>Isso j\u00e1 nos economizou horas de trabalho a noite e nos fins de semana.<\/p>\n<p><b>Gostou dessa Dica?<\/b><\/p>\n<p>Curta, comente, compartilhe com os coleguinhas\u2026<\/p>\n<p>Assine meu canal no <a href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\" rel=\"noopener noreferrer\">Youtube<\/a> e curta minha p\u00e1gina no <a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"nofollow external noopener noreferrer\" data-wpel-link=\"external\">Facebook<\/a> para receber Dicas de Leituras, V\u00eddeos e Eventos sobre SQL Server.<\/p>\n<p>At\u00e9 a pr\u00f3xima.<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>Microsoft Data Platform MVP<\/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, Quem a\u00ed nunca teve uma falha de job onde a solu\u00e7\u00e3o para essa falha foi simplesmente executar o job novamente? Isso acontece muito em jobs de backup onde trafegamos os dados para outro local na rede. Por um momento de instabilidade na rede na madrugada ou no fim de semana, todo o backup [&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,6,33,280],"tags":[1549,1260,954,18,23,1547,228,1548,33],"class_list":["post-8022","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-casos-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-agent","tag-alerta","tag-backup","tag-checklist","tag-dba","tag-falha-backup","tag-job","tag-retry-job","tag-sql-server"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/8022","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=8022"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/8022\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=8022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=8022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=8022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}