{"id":668,"date":"2011-05-04T21:13:10","date_gmt":"2011-05-04T23:13:10","guid":{"rendered":"http:\/\/fabriciolima.net\/blog\/?p=668"},"modified":"2016-07-23T23:12:34","modified_gmt":"2016-07-24T02:12:34","slug":"como-fica-meu-restore-ao-executar-backups-full-e-do-log-ao-mesmo-tempo","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2011\/05\/04\/como-fica-meu-restore-ao-executar-backups-full-e-do-log-ao-mesmo-tempo\/","title":{"rendered":"Como fica meu Restore ao executar Backups FULL e do LOG ao mesmo tempo?"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>Aproveitando o \u00f3timo post do Silas Mendes (<a title=\"Silas Mendes\" href=\"http:\/\/silasmendes.com\/dba\/mito-backup-full-e-log\" target=\"_blank\">Backup FULL reinicia sequ\u00eancia do LOG. Mito?<\/a>), resolvi tirar uma d\u00favida antiga que tinha sobre backups Full e do Log, mas ainda n\u00e3o tinha parado para realizar os testes.<\/p>\n<p>A minha d\u00favida \u00e9 a seguinte: O que acontece se eu executar Backups do Log junto com um Backup Full?\u00a0 Como fica minha sequ\u00eancia de restores a partir desse backup Full? Como que eu sei qual \u00e9 o primeiro Backup do Log que eu preciso restaurar ap\u00f3s o meu Backup Full?<\/p>\n<p>Suponha que seu ambiente tenha um backup Full di\u00e1rio pela manha e backups do Log a cada 10 minutos durante o dia.<\/p>\n<p>Pela manh\u00e3 \u00e9 executado um backup Full conforme o script abaixo:<\/p>\n<p>BACKUP DATABASE FabricioLima TO DISK = &#8216;C:\\FabricioLimaFULL1.bak&#8217;<br \/>\nWITH INIT, stats = 10,name = &#8216;Backup Full 1&#8217;<\/p>\n<p>Ap\u00f3s executar esse backup, simulando um restore, cliquei com o bot\u00e3o direito em cima da database FabricioLima -&gt; Task -&gt; Restore -&gt; Database, e tenho a seguinte informa\u00e7\u00e3o:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-671\" title=\"BackupFULL_1\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-300x37.png\" alt=\"\" width=\"300\" height=\"37\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-300x37.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-410x51.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-100x12.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-275x34.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1-20x2.png 20w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_1.png 585w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Em seguida, criei uma tabela e deixei rodando um loop com um insert e um backup do Log simulando exatamente o que acontece durante o dia, manipula\u00e7\u00e3o de dados e backups do Log a cada 10 minutos.<\/p>\n<p>CREATE TABLE registroBackup\u00a0\u00a0\u00a0 (id INT IDENTITY,\u00a0\u00a0\u00a0 registro VARCHAR(50))<\/p>\n<p>DECLARE @Nome varchar(30) = &#8216;BAK do Log: &#8216;, @i INT = 1<\/p>\n<p>WHILE 1=1<br \/>\nBEGIN<br \/>\n&#8212; Insere registro<br \/>\nINSERT INTO registroBackup<br \/>\nVALUES (&#8216;Antes do &#8216;+CAST(@i AS VARCHAR(2))+&#8217;\u00ba backup de LOG&#8217;)<\/p>\n<p>SET @Nome = @Nome + CAST(@i AS VARCHAR(2))<\/p>\n<p>&#8212; Realiza o Backup do Log<br \/>\nBACKUP LOG FabricioLima TO DISK = &#8216;C:\\FabricioLimaLOG.bak&#8217;\u00a0 WITH NOINIT\u00a0 , Name = @nome<\/p>\n<p>waitfor delay &#8217;00:00:02&#8242;<br \/>\nSELECT @i += 1, @nome = &#8216;BAK do Log: &#8216;<\/p>\n<p>END<\/p>\n<p>Agora imagina que seu backup FULL tenha falhado pela manh\u00e3 e voc\u00ea precise rod\u00e1-lo novamente, entretanto, voc\u00ea esqueceu de desabilitar o backup do log\u00a0 e os 2 rodaram simultaneamente. E agora? Preciso desabilitar o job do LOG e iniciar o FULL novamente para manter a sequ\u00eancia correta de restore desse backup FULL?<\/p>\n<p>N\u00e3o!!! Vamos simular essa situa\u00e7\u00e3o.<\/p>\n<p>Com o loop em execu\u00e7\u00e3o, rodei simultaneamente outro backup FULL:<\/p>\n<p>BACKUP DATABASE FabricioLima TO DISK = &#8216;C:\\FabricioLimaFULL2.bak&#8217;<br \/>\nWITH INIT, stats = 10,name = &#8216;Backup Full: 2&#8217;<\/p>\n<p>Quando o Backup FULL acabou, parei o loop que faz backup do LOG alguns segundos depois. Agora vamos ver como ficou situa\u00e7\u00e3o dos backups. Simulando um restore do mesmo modo como como foi feito anteriormente, temos a seguinte informa\u00e7\u00e3o:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-672\" title=\"BackupFULL_2\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2.png\" alt=\"\" width=\"674\" height=\"226\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2.png 674w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2-300x101.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2-410x137.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2-100x34.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2-275x92.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupFULL_2-20x7.png 20w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><\/a><\/p>\n<p>Legal, o SQL Server j\u00e1 inclu\u00edu o meu backup FULL 2 no meio dos meus backups de LOG, ent\u00e3o \u00e9 s\u00f3 marcar o Backup FULL e todos os seus backups do Log posteriores e executar o restore. Eu realizei esse restore para uma database chamada FabricioLima2, posteriormente iremos conferir os dados das databases.<\/p>\n<p>Existe alguma forma de verificar essa informa\u00e7\u00e3o via T-SQL?<\/p>\n<p>Sim. Executando a query abaixo:<\/p>\n<p>select position, name, backup_start_date,<br \/>\nbackup_finish_date,first_lsn,last_lsn<br \/>\nfrom msdb.dbo.backupset<br \/>\nwhere backup_start_date &gt;= &#8216;20110430 17:42&#8217;\u00a0\u00a0\u00a0 &#8212; Inicio dos testes<br \/>\norder by backup_start_date<\/p>\n<p>Temos o seguinte resultado:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/BackupSet.png\"><\/a><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-680\" title=\"AnaliseFinal\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal.png\" alt=\"\" width=\"671\" height=\"211\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal-300x93.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal-410x128.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal-100x31.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal-275x86.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/05\/AnaliseFinal-20x6.png 20w\" sizes=\"auto, (max-width: 671px) 100vw, 671px\" \/><\/a><\/p>\n<p>Pode-se verificar que o Backup Full 2\u00a0 come\u00e7ou as 17:43:33 (Azul) e o backup do Log 8 (Preto) terminou e come\u00e7ou as 17:43:34.\u00a0 Ou seja, o backup Full 2 cont\u00e9m os backups do Log 5, 6 e 7, mas n\u00e3o cont\u00e9m o de n\u00famero 8.<\/p>\n<p>Entretanto, olhando datas n\u00e3o \u00e9 um m\u00e9todo confi\u00e1vel de se verificar essa informa\u00e7\u00e3o. Para ter certeza do que realmente entrou e n\u00e3o entrou no backup Full, deve-se olhar as colunas First_LSN e Last_LSN.<\/p>\n<p>Cada registro do log de transa\u00e7\u00f5es do SQL Server \u00e9 identificado de forma exclusiva por um LSN (n\u00famero da sequ\u00eancia de log). Os LSNs s\u00e3o ordenados de tal modo que se LSN2 for maior do que LSN1, a altera\u00e7\u00e3o descrita pelo registro de log mencionado por LSN2 ocorreu depois da altera\u00e7\u00e3o descrita pelo registro de log LSN.<\/p>\n<p>A coluna First_LSN cont\u00e9m o n\u00famero de sequ\u00eancia de log do primeiro ou mais antigo registro de log no conjunto de backup.<br \/>\nJ\u00e1 a coluna Last_LSN cont\u00e9m o n\u00famero de sequ\u00eancia do primeiro registro de log feito ap\u00f3s o conjunto de backup.<\/p>\n<p>Como o inicio e o fim de todos os LSN s\u00e3o iguals, olharemos apenas os n\u00fameros intermedi\u00e1rios para facilitar a explica\u00e7\u00e3o.<\/p>\n<p>\u00c9 possivel ver que o Backup Full guardou at\u00e9 o LSN 14086 (verde). J\u00e1 o Backup do Log 8 cont\u00e9m os LSN de 14085 (Vermelho) at\u00e9 14093. Perceberam que o backup FULL guardou 1 LSN do backup do Log 8? Todavia, ele n\u00e3o guardou todos os LSN&#8217;s desse backup 8 e \u00e9 por isso que ele \u00e9 o pr\u00f3ximo backup que deve ser restaurado.<\/p>\n<p>Descoberto quais arquivos precisam ser restaurados, vamos criar uma nova database chamada FabricioLima3 e restaurar os arquivos via T-SQL:<\/p>\n<p>RESTORE DATABASE [FabricioLima3] FROM\u00a0 DISK = N&#8217;C:\\FabricioLimaFULL2.bak&#8217;<br \/>\nWITH<br \/>\nMOVE N&#8217;FabricioLima&#8217; TO N&#8217;C:\\FabricioLima3.mdf&#8217;,<br \/>\nMOVE N&#8217;FabricioLima_log&#8217; TO N&#8217;C:\\FabricioLima3_Log.ldf&#8217;,\u00a0 NORECOVERY,\u00a0 NOUNLOAD,\u00a0 STATS = 10<\/p>\n<p>RESTORE LOG [FabricioLima3] FROM\u00a0 DISK = N&#8217;C:\\FabricioLimaLog.bak&#8217; WITH\u00a0 FILE = 8,\u00a0 NORECOVERY,\u00a0 NOUNLOAD<\/p>\n<p>RESTORE LOG [FabricioLima3] FROM\u00a0 DISK = N&#8217;C:\\FabricioLimaLog.bak&#8217; WITH\u00a0 FILE = 9,\u00a0 NORECOVERY,\u00a0 NOUNLOAD<\/p>\n<p>RESTORE LOG [FabricioLima3] FROM\u00a0 DISK = N&#8217;C:\\FabricioLimaLog.bak&#8217; WITH\u00a0 FILE = 10,\u00a0 RECOVERY, NOUNLOAD<\/p>\n<p>Se voc\u00ea tentar restaurar o FILE = 7 ap\u00f3s o Backup Full 2, voc\u00ea receber\u00e1 o erro abaixo:<\/p>\n<p>Msg 4326, Level 16, State 1, Line 2<br \/>\nThe log in this backup set terminates at LSN 5334000001408500001, which is too early to apply to the database. A more recent log backup that includes LSN 5334000001408600001 can be restored.<br \/>\nMsg 3013, Level 16, State 1, Line 2<br \/>\nRESTORE LOG is terminating abnormally.<\/p>\n<p>Na figura abaixo temos uma compara\u00e7\u00e3o da tabela populada pelo loop da database original para as outras 2 criadas via restore.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-674\" title=\"ComparacaoDatabases\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases.png\" alt=\"\" width=\"866\" height=\"277\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases.png 1237w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-300x96.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-1024x328.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-768x246.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-700x224.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-410x131.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-100x32.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-275x88.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2011\/04\/ComparacaoDatabases-20x6.png 20w\" sizes=\"auto, (max-width: 866px) 100vw, 866px\" \/><\/a><\/p>\n<p>Espero que essa informa\u00e7\u00e3o tenha sido \u00fatil.<\/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>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>Fala Pessoal, Aproveitando o \u00f3timo post do Silas Mendes (Backup FULL reinicia sequ\u00eancia do LOG. Mito?), resolvi tirar uma d\u00favida antiga que tinha sobre backups Full e do Log, mas ainda n\u00e3o tinha parado para realizar os testes. A minha d\u00favida \u00e9 a seguinte: O que acontece se eu executar Backups do Log junto com [&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,280],"tags":[295,297,118,302,23,301,300,316,315,321,322,296,298,299,317,318,49,33],"class_list":["post-668","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-virtual-pass-br","tag-backup-database","tag-backup-full","tag-backup-log","tag-backupset","tag-dba","tag-log-sequence-number","tag-lsn","tag-msg-3013","tag-msg-4326","tag-norecovery","tag-recovery","tag-restore-database-with-move","tag-restore-full","tag-restore-log","tag-restore-log-is-terminating-abnormally","tag-sequencia-de-restore","tag-sql","tag-sql-server"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/668","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=668"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/668\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}