{"id":1316,"date":"2019-06-13T14:50:04","date_gmt":"2019-06-13T14:50:04","guid":{"rendered":"https:\/\/www.tiagoneves.net\/blog\/?p=1316"},"modified":"2019-06-13T15:23:41","modified_gmt":"2019-06-13T15:23:41","slug":"deixando-sua-rotina-de-backup-mais-inteligente","status":"publish","type":"post","link":"https:\/\/www.tiagoneves.net\/blog\/deixando-sua-rotina-de-backup-mais-inteligente\/","title":{"rendered":"Deixando sua rotina de backup mais inteligente"},"content":{"rendered":"<p>Fala galera!<\/p>\n<p>Tudo certo com voc\u00eas?<\/p>\n<p>No post de hoje gostaria de compartilhar um novo recurso do SQL Server 2017 que \u00e9 o <strong>Smart Backup<\/strong> e depois tamb\u00e9m foi disponibilizado no <strong>Service Pack 2 do SQL Server 2016.<\/strong><\/p>\n<p>Basicamente o que temos de novo \u00e9 uma coluna na DMV (<em>Dynamic Management View<\/em>) <a href=\"https:\/\/docs.microsoft.com\/pt-br\/sql\/relational-databases\/system-dynamic-management-views\/sys-dm-db-file-space-usage-transact-sql\">sys.dm_db_file_space_usage<\/a> chamada \u201c<strong><em>modified_extent_page_count\u201d<\/em><\/strong>. Essa coluna traz o <strong>n\u00famero de p\u00e1ginas<\/strong> que foram <strong>alteradas<\/strong> desde o seu <strong>\u00faltimo backup full<\/strong>. Verificando essas contagens de p\u00e1ginas podemos deixar as nossas rotinas de backup mais inteligentes, pois o n\u00famero de p\u00e1ginas modificadas pode ser usado para rastrear as altera\u00e7\u00f5es do banco de dados desde o \u00faltimo backup full e com isso decidir se o backup diferencial poderia ser o mais indicado nesse caso.<\/p>\n<p>Normalmente utilizamos uma pol\u00edtica de fazer um backup full no s\u00e1bado ou domingo e backups diferenciais durante a semana. Utilizando essa estrat\u00e9gia tradicional, muitas vezes acontece de o backup diferencial de sexta-feira j\u00e1 estar quase do tamanho do backup full e tem casos que at\u00e9 maior, o que leva a um tempo maior em caso de necessidade de se fazer um restore.<\/p>\n<p>Com essa nova feature podemos deixar as nossas rotinas de backup mais inteligentes validando se o <strong>percentual de p\u00e1ginas alteradas \u00e9 75% do total de p\u00e1ginas do bando de dados<\/strong>. Nesse caos, j\u00e1 valeria a pena fazer um backup full ao inv\u00e9s de um backup diferencial!<\/p>\n<p>Vejamos na pratica como funciona:<\/p>\n<p>Antes vamos realizar um backup full da nossa database para zerar o percentual de p\u00e1ginas alteradas.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">Backup Database Northwind\nTo disk = 'D:\\SQLSERVER\\BKP\\NorthWind_Dados_Full.bak'\nwith compression, format, stats=5<\/pre>\n<pre class=\"theme:ssms2012 lang:tsql decode:true \">SELECT DB_NAME(database_id) DB_Name,\n       total_page_count TotalPaginas,\n       modified_extent_page_count TotalExtent_Modificado,\n       CAST((modified_extent_page_count + mixed_extent_page_count) * 1.00 \/ allocated_extent_page_count AS NUMERIC(18, 2)) [%_PagModificadas]\nFROM sys.dm_db_file_space_usage;\n<\/pre>\n<p><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_zerado.png?ssl=1\" rel=\"lightbox[1316]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1817 aligncenter\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_zerado.png?resize=418%2C73&#038;ssl=1\" alt=\"\" width=\"418\" height=\"73\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_zerado.png?w=418&amp;ssl=1 418w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_zerado.png?resize=300%2C52&amp;ssl=1 300w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/a><\/p>\n<p>Como podemos observar o %_PagModificadas est\u00e1 zerado.<\/p>\n<p>O script abaixo faz uma valida\u00e7\u00e3o se o percentual de p\u00e1ginas alteradas \u00e9 maior que 75% e se o dia da semana est\u00e1 entre segunda-feira e quinta-feira ou se \u00e9 domingo. Se essa cl\u00e1usula for verdadeira, a rotina vai executar um <strong>backup full<\/strong>, caso contr\u00e1rio, executa o <strong>backup diferencial<\/strong>.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">DECLARE @threshold_bkp_full NUMERIC(18,2), @dia_semena int\n\nSELECT @threshold_bkp_full =  CAST((modified_extent_page_count + mixed_extent_page_count) * 1.00 \/ allocated_extent_page_count AS NUMERIC(18, 2))\nFROM sys.dm_db_file_space_usage;\n\nSELECT @dia_semena = DATEPART(WEEKDAY,GETDATE())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n-- 1 - Domingo\n-- 2 - Segunda-feira\n-- 3 - Ter\u00e7a-feira\n-- 4 - Quarta-feira\n-- 5 - Quinta-feira\n-- 6 - Sexta-feira\n-- 7 - S\u00e1bado\n\nIF (@threshold_bkp_full &gt; '0.75' AND @dia_semena in (2,3,4,5)) OR @dia_semena = 1\n\nBEGIN \n\nBACKUP DATABASE Northwind\nTO  DISK = 'D:\\SQLSERVER\\BKP\\NorthWind_Dados_Full.bak'\nWITH COMPRESSION,\n     FORMAT,\n     STATS = 5\nPRINT 'Backup FULL'\nEND\n\nELSE\nBEGIN \nBACKUP DATABASE Northwind\nTO  DISK = 'D:\\SQLSERVER\\BKP\\NorthWind_Dados_Dif.bak'\nWITH COMPRESSION,\n     FORMAT,\n\t DIFFERENTIAL,\n     STATS = 5\nPRINT 'Backup Diferencial'\nEND\n<\/pre>\n<p>Sugerindo que esse backup full foi realizado em um Domingo, durante a Segunda-feira a empresa trabalhou normalmente e algumas p\u00e1ginas foram alteradas.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_segundafeira.png?ssl=1\" rel=\"lightbox[1316]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1818 aligncenter\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_segundafeira.png?resize=420%2C78&#038;ssl=1\" alt=\"\" width=\"420\" height=\"78\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_segundafeira.png?w=420&amp;ssl=1 420w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_segundafeira.png?resize=300%2C56&amp;ssl=1 300w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><\/a><\/p>\n<p>Podemos observar que na segunda-feira apenas 3% das p\u00e1ginas de dados foram alteradas. Com isso, a nossa rotina de backup vai realizar o backup diferencial, como \u00e9 esperado.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?ssl=1\" rel=\"lightbox[1316]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-1823 aligncenter\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?resize=678%2C195&#038;ssl=1\" alt=\"\" width=\"678\" height=\"195\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?resize=1024%2C294&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?resize=300%2C86&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?resize=768%2C221&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?w=1537&amp;ssl=1 1537w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Backup_diff.png?w=1356&amp;ssl=1 1356w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Agora vamos simular que chegamos na Quinta-feira e j\u00e1 tivemos bastante altera\u00e7\u00f5es no banco, milhares de registros novos e milhares de update aconteceram. Com isso, ultrapassamos o nosso threshold de 75% de p\u00e1ginas modificadas.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_quinta-feira.png?ssl=1\" rel=\"lightbox[1316]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1828 aligncenter\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_quinta-feira.png?resize=427%2C71&#038;ssl=1\" alt=\"\" width=\"427\" height=\"71\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_quinta-feira.png?w=427&amp;ssl=1 427w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_quinta-feira.png?resize=300%2C50&amp;ssl=1 300w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/a><br>Como podemos ver na Quinta-feira o nosso percentual de p\u00e1ginas alteradas chegou a 83%, com isso a nossa rotina vai executar um backup full.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?ssl=1\" rel=\"lightbox[1316]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1829\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?resize=678%2C193&#038;ssl=1\" alt=\"\" width=\"678\" height=\"193\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?w=1535&amp;ssl=1 1535w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?resize=300%2C85&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?resize=768%2C219&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?resize=1024%2C292&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/05\/Smart_Backup_bkp_full.png?w=1356&amp;ssl=1 1356w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Como foi dito na introdu\u00e7\u00e3o do post, essa nova feature nos ajuda a otimizar a nossa estrat\u00e9gia de backups. O script de valida\u00e7\u00e3o do % de p\u00e1ginas modificadas e dia da semana pode ser melhor customizados, no exemplo do post coloquei algo bem simples mesmo.<\/p>\n<p>Bom pessoal a ideia desse post foi apresentar essa nova feature apesar de n\u00e3o ser novidade, pois o SQL Server 2019 j\u00e1 est\u00e1 saindo do forno e muitos ainda n\u00e3o conheciam.<\/p>\n<p>Espero que tenham gostado.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Tiago Neves<\/p>\n<p>Curta a minha p\u00e1gina no <a href=\"https:\/\/www.facebook.com\/TiagoNevesDBA\" target=\"_blank\" rel=\"noreferrer noopener external nofollow\" aria-label=\"Facebook (opens in a new tab)\" data-wpel-link=\"external\">Facebook<\/a>.<\/p>\n<p><\/p>\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala galera! Tudo certo com voc\u00eas? No post de hoje gostaria de compartilhar um novo recurso do SQL Server 2017 que \u00e9 o Smart Backup e depois tamb\u00e9m foi disponibilizado no Service Pack 2 do SQL Server 2016. Basicamente o que temos de novo \u00e9 uma coluna na DMV (Dynamic Management View) sys.dm_db_file_space_usage chamada \u201cmodified_extent_page_count\u201d. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1835,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_91251433_91251433":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Ol\u00e1 pessoal, Neste post vamos conhecer uma feature que est\u00e1 dispon\u00edvel no SQL Server 2017. O SMART BACKUP, com ela podemos deixar nossas rotinas de backup mais inteligente.","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpscppro_dont_share_socialmedia":false,"_wpscppro_custom_social_share_image":0,"_facebook_share_type":"","_twitter_share_type":"","_linkedin_share_type":"","_pinterest_share_type":"","_linkedin_share_type_page":"","_instagram_share_type":"","_medium_share_type":"","_threads_share_type":"","_google_business_share_type":"","_selected_social_profile":[],"_wpsp_enable_custom_social_template":false,"_wpsp_social_scheduling":{"enabled":false,"datetime":null,"platforms":[],"status":"template_only","dateOption":"today","timeOption":"now","customDays":"","customHours":"","customDate":"","customTime":"","schedulingType":"absolute"},"_wpsp_active_default_template":true},"categories":[210,220,26,20],"tags":[214,127,270,28,269],"class_list":["post-1316","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backup","category-sql-server-2017","category-sqlserver-2016","category-sqlserver-geral","tag-backup","tag-dbasqlserver","tag-smartbackups","tag-sqlserver2016","tag-sqlserver2017"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2019\/06\/smart_backup_sqlserver-e1560309562855.png?fit=280%2C152&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6eIyh-le","jetpack-related-posts":[{"id":2414,"url":"https:\/\/www.tiagoneves.net\/blog\/sql-server-2016-esta-chegando-ao-fim-do-suporte-o-que-isso-significa-na-pratica\/","url_meta":{"origin":1316,"position":0},"title":"SQL Server 2016 est\u00e1 chegando ao fim do suporte: o que isso significa na pr\u00e1tica?","author":"tiagoneves","date":"27 de abril de 2026","format":false,"excerpt":"O SQL Server 2016 ter\u00e1 seu suporte estendido encerrado em 14 de julho de 2026, o que resultar\u00e1 na falta de atualiza\u00e7\u00f5es de seguran\u00e7a e suporte. Continuar usando essa vers\u00e3o traz riscos como vulnerabilidades e n\u00e3o conformidade regulat\u00f3ria. Planejar a migra\u00e7\u00e3o para vers\u00f5es mais recentes ou cloud deve ser prioridade\u2026","rel":"","context":"Em &quot;Seguran\u00e7a&quot;","block_context":{"text":"Seguran\u00e7a","link":"https:\/\/www.tiagoneves.net\/blog\/category\/seguranca\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/1316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/comments?post=1316"}],"version-history":[{"count":19,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/1316\/revisions"}],"predecessor-version":[{"id":1837,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/1316\/revisions\/1837"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/media\/1835"}],"wp:attachment":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/media?parent=1316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/categories?post=1316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/tags?post=1316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}