Banco de Dados

Ξ Deixe um comentário

Backup e Restore SQL Server – Parte 2

publicado por Fábio Oliveira

Hoje daremos continuidade à primeira parte do artigo sobre Backup e Restore com o SQL Server.

Backup T-LOG: Só pode ser usado quando há um backup full já feito e quando a base está em modo de recuperação full, ele armazena todas as transações feitas pelo banco de dados a partir de um backup full. Este tipo de backup é incremental, ou seja, ele depende do backup T-LOG anterior para não haver uma grande perda de informação.

Vamos ao seguinte exemplo, imagine a seguinte rotina de backup de uma base de dados:

Rotina Backup

Agora imagine que o Backup T-LOG 2 tivesse sofrido algum desastre e ele estivesse inacessível de restauração para nós, o que iríamos conseguir restaurar com os Backups 1 e 3? Como havia descrito acima, o backup do tipo T-LOG ele é incremental, e precisa de todos os seus backups para que seja feita uma recuperação completa da nossa base. No nosso exemplo, perdemos o segundo backup, tendo em vista isto, não conseguiremos restaurar o nosso terceiro backup, pois para restaurá-lo precisaríamos do segundo backup. Ou seja, perderíamos informações a partir das 21:00, horário em que foi feito nosso primeiro backup T-LOG.

Essa foi a parte conceitual e espero que tenham entendido, vamos colocar esse conceito em prática!

IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME = ‘TESTEBACKUP’)
DROP DATABASE TESTEBACKUP

CREATE DATABASE TESTEBACKUP
GO

USE TESTEBACKUP
GO

ALTER DATABASE TESTEBACKUP
SET RECOVERY FULL

CREATE TABLE TABELA
(
COL1 INT IDENTITY,
COL2 VARCHAR(20)
)
GO

INSERT INTO TABELA VALUES (‘BACKUPS BANCO’)
GO 20

Inseri 20 registros na tabela e quero fazer meu backup FULL das 20:00

–BACKUP 20:00

BACKUP DATABASE TESTEBACKUP TO DISK = ‘D:\BACKUPS LOG\BACKUPFULL.BAK’

Agora vamos fazer uma instrução UPDATE no meu banco:

UPDATE TABELA SET COL2 = ‘BACKUP 1’ WHERE COL1 IN (1,2,3)

Select8

Vamos realizar nosso backup T-LOG das 21:00

–BACKUP 21:00
BACKUP LOG TESTEBACKUP TO DISK = ‘D:\BACKUPS LOG\BACKUPLOG2100.TRM’

Vamos agora fazer a instrução DELETE na nossa base:

DELETE FROM TABELA WHERE COL1 BETWEEN 4 AND 10

Chegou a hora de fazer o backup das 22:00

–BACKUP 22:00
BACKUP LOG TESTEBACKUP TO DISK = ‘D:\BACKUPS LOG\BACKUPLOG2200.TRM’

Após realizado o backup das 22:00, vamos usar a instrução INSERT:
INSERT INTO TABELA VALUES(‘INSERINDO..’)

Select9

E vamos ao nosso ultimo backup da nossa rotina, o das 23:00

–BACKUP 23:00
BACKUP LOG TESTEBACKUP TO DISK = ‘D:\BACKUPS LOG\BACKUPLOG2300.TRM’

Select10

Pois bem, nossos backups e as alterações foram feitas de acordo com a tabela de rotina de backup que deixei no começo do artigo onde:

  • Backup 21:00 – Armazenou a instrução UPDATE
  • Backup 22:00 – Armazenou a instrução DELETE
  • Backup 23:00 – Armazenou a instrução INSERT

Vamos supor, conforme também o nosso exemplo, que o backup das 22:00 tivesse sido corrompido por algum motivo? Na hora de fazer a restauração, o SQL Server deixaria que restaurássemos o backup das 21:00, porém ao darmos a instrução para tentarmos restaurar o backup das 23:00 o SQL Server retornaria um erro. Por que para restaurar o backup das 23:00, precisaríamos do backup das 22:00, fazendo sentido a definição de backup incremental.

Provocaremos o erro, primeiramente vamos deletar nossa base e restaurar o backup FULL e o primeiro backup de T-LOG:

USE MASTER
GO

DROP DATABASE TESTEBACKUP
GO

Restaurando nosso backup FULL:

RESTORE DATABASE TESTEBACKUP FROM DISK = ‘D:\BACKUPS LOG\BACKUPFULL.BAK’ WITH NORECOVERY

Restaurando nosso backup das 21:00:

RESTORE LOG TESTEBACKUP FROM DISK = ‘D:\BACKUPS LOG\BACKUPLOG2100.TRM’ WITH NORECOVERY

Pois bem, agora tentarei restaurar o backup das 23:00, uma vez que o backup das 22:00 foi comprometido. Veja como o SQL Server reage:

RESTORE LOG TESTEBACKUP FROM DISK = ‘D:\BACKUPS LOG\BACKUPLOG2300.TRM’ WITH NORECOVERY

Mensagem retornada pelo SQL Server:

Msg 4305, Level 16, State 1, Line 64

The log in this backup set begins at LSN 34000000050500001, which is too recent to apply to the database. An earlier log backup that includes LSN 34000000050000001 can be restored.
Msg 3013, Level 16, State 1, Line 64
RESTORE LOG is terminating abnormally.

Ou seja, ele está dizendo que o backup com a LSN 34000000050500001 (backup das 23:00) depende que o backup da LSN 34000000050000001 (backup das 22:00) seja restaurado antes que ele, pois ele depende do backup das 22:00 para ser restaurado com sucesso.

Com isso, perdemos informações após às 21:00 horas.

Espero que tenham gostado dos artigos sobre Backup e Restore e até a próxima!

Autor

Formado em Análise e Desenvolvimento de Sistemas, 22 anos, trabalho atualmente com suporte à sistemas de varejo, estudante da plataforma SQL Server e autor de artigos no site Guia DBA.

Fábio Oliveira

Comentários

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade



Siga-nos!

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.

Artigos Recentes