Restore do log no SQL  Server 2005

 

Em uma empresa às 16:00 horas, toca o telefone na área de TI:

(Usuário) – Acabei de excluir o registro de um Aluno que não devia ter sido excluído.

(TI) – Não tem como lançar as informações novamente?

(Usuário) – O sistema exclui junto todo o histórico do aluno, seria muito trabalho.

(TI) – Eu só tenho o backup de ontem de noite, pode ser?

(Usuário) – Nem pensar, realizamos diversos procedimentos hoje que não temos como repetir.

 

E agora?

 

Para esta situação vamos considerar que o sistema é de pequeno a médio porte, utiliza SQL Server 2005 e o TI resolveu fazer somente um backup full diário.

Neste artigo não entrarei no mérito de que o TI poderia ser mais prudente e optar por outras formas de realizar o backup para ter mais segurança para as informações.

Vamos considerar a situação proposta e tentar resolver o problema.

Para que exista ao menos uma possibilidade de recuperar os dados o modelo de recuperação do banco de dados deve ser “Full”. Para verificarmos esta opção vá nas propriedades do banco de dados na ferramenta Microsoft SQL Server Management Studio, conforme apresentado na figura 1.

 

13-03-07pic01.JPG
Figura 1
– Propriedades do banco de dados, verificando modelo de recuperação.

 

Quando o modelo de recuperação é “Full” todas as atualizações realizadas no banco de dados são armazenadas no log de transações, desta forma podemos retornar o banco de dados para qualquer posição do dia. Já no modelo “Simple” as atualizações não são registradas no log e no nosso exemplo não teríamos como resolver o problema.

Para realizarmos um laboratório semelhante ao caso do TI, vou propor a criação de uma tabela conforme a Listagem 1.

 

Listagem 1 – Criação da tabela Alunos

CREATE TABLE ALUNOS

  (CODIGO          INTEGER  NOT NULL,

   NOME            VARCHAR(40)  NOT NULL,

   DATANASCIMENTO  DATETIME,

   ENDERECO        VARCHAR(40),

   CIDADE          VARCHAR(20),

   PRIMARY KEY (CODIGO));

 

INSERT INTO ALUNOS VALUES(1,'Eusébio Lima','15-jun-1988','Av.das Laranjeiras, 537','Caxias do Sul');

INSERT INTO ALUNOS VALUES(2,'Maria da Silva','20-may-1992','Rua da Oliveiras, 23','Caxias do Sul');

INSERT INTO ALUNOS VALUES(3,'João da Silva','01-mar-1994','Rua Central, 1537','Caxias do Sul');

 

 

Agora realize um backup Full do banco de dados:

 

Backup Database SQLMagazine To Disk=’C:\Backup\SQLMagazine.BAK’


13-03-07pic02.JPG 

Figura 2 – Backup Full do banco de dados.

Agora vamos realizar novas operações e por fim excluir o registro do aluno 2, conforme apresentado na Listagem 2. Para facilitar o exemplo execute em separado a exclusão do registro e verifique em que hora a operação está sendo executada.

 

Listagem 2 – Operações adicionais ao banco de dados

INSERT INTO ALUNOS VALUES(4,'Lima Lopes','12-dec-1994','Rua São João, 223','Caxias do Sul');

INSERT INTO ALUNOS VALUES(5,'Joana Souza','31-jan-1993','Rua São Pedro, 22','Caxias do Sul');

 

Verificar a hora em que vai executar esta operação

 

DELETE ALUNOS

 WHERE CODIGO = 2;

 

Agora temos a mesma situação do nosso amigo do TI: existem informações anteriores que estão no backup Full do banco de dados, temos novas operações (a inclusão de dois registros) e temos a operação que não devia ter sido executada (a exclusão do aluno 2).

A primeira coisa de devemos fazer agora é realizar um backup do log das transações do banco de dados, conforme apresentado na Figura 3.

 

13-03-07pic03.JPG

Figura 3 – Backup do log de transações do banco de dados.

 

Agora podemos ter dois caminhos a seguir, conforme a utilização do sistema:

1.      Recuperamos o backup diretamente no banco de dados.

2.      Restauramos o backup em outra área ou servidor e copiamos os dados manualmente para o banco de dados original.

Neste exemplo vamos restaurar diretamente para o banco de dados original.

Abra a tela de restore do banco de dados, serão relacionados os últimos backups executados. Marque o último backup Full e o backup do log de transações, conforme a Figura 4. A seguir clique no botão para escolher um horário (“To a point in time”) até onde o restore deve ser executado.

        

13-03-07pic04.JPG 

Figura 4 – Restore do banco de dados.

 

Na tela que será aberta (Figura 5), escolha a opção para especificar a data e hora, e informe os dados indicando um momento posterior as duas inclusões na tabela e anterior a exclusão do aluno 2.


13-03-07pic05.JPG 

Figura 5 – Informação da Data e Hora limite para restaurar.

 

Agora basta executar o restore e conferir as informações após o procedimento.

Obviamente que todas as operações realizadas após a data/hora informada serão perdidas, por isto avalie antes se houve algum outro procedimento importante após este horário.