«

»

ago 23

Script de restore

Há algum tempo precisei migrar uma base com mais de 4TB, era um SAP de uma grande empresa de auditoria no Brasil. Sem acesso ao servidor de origem, só me restou um backup full de 10 dias atrás e um compartilhamento onde ficavam os backups de transaction log. Os backups eram gerados de 15 em 15 minutos, ou seja, 4 arquivos por hora. São 96 arquivos por dia portanto temos 960 arquivos. Como restaurar todos estes backups?

A data da migração já estava agendada, obviamente que sem me consultar se o tempo seria suficiente, portanto eu precisava correr. O script abaixo foi desenvolvido pensando da seguinte forma: os nomes dos arquivos seguem um padrão e eles precisam ser restaurados em sequência. O SQL não permite restaurá-los fora de ordem matando a consistência da base, portanto não preciso me preocupar muito com isso, mas preciso restaurar na ordem senão o SQL apresenta erro e não restaura.

Restaurei o backup full com a opção NO RECOVERY, para que a base ficasse em modo de restore possibilitando restaurar os TLogs. O padrão da nomenclatura do arquivo era:

CPC_backup_201204201400 (nome da base, palavra backup, ano, mês, dia, hora, minuto).

 

Apenas manipulando texto e usando a função LEN do próprio SQL fiz o script abaixo:
 
— declarando as variáveis para colocar caminho, extensão, data, hora e uma pra concatenar tudo
DECLARE @PATH VARCHAR(60)

DECLARE @FILEEXTENSION VARCHAR(4)
DECLARE @DATE VARCHAR(8)
DECLARE @TIME VARCHAR(4)
DECLARE @FULLPATH VARCHAR(80)

 

– definindo o valor das variáveis
SET @PATH = ‘E:\BKP TLOG_13_04\Backup_Tlogs\CPC_backup_’
SET @DATE = ‘20120420’
SET @TIME = ‘1400’
SET @FILEEXTENSION = ‘.trn’

 

— esse ROTINA_RESTORE é pra usar GOTO igual em arquivos batch
ROTINA_RESTORE:

 

— se a variável TIME tiver apenas 3 caracteres, concatene tudo e adicione um zero pra hora
IF (SELECT LEN(@TIME))=3
SET @FULLPATH = @PATH+@DATE+’0’+@TIME+@FILEEXTENSION

 

— senão, concatene tudo sem adicionar o zero
ELSE
SET @FULLPATH = @PATH+@DATE+@TIME+@FILEEXTENSION

 

— um print só pra eu saber em que arquivo está no momento
PRINT ‘Iniciando o restore de —> ‘+@FULLPATH
RESTORE LOG CPC
FROM DISK = @FULLPATH
WITH NORECOVERY;
PRINT @FULLPATH+’ ‘+’ —> restaurado com sucesso!’


—  ajusta para o próximo arquivo
SET @TIME = @TIME + 15 



— se chegar em 24:00 devemos aumentar o dia certo?
IF @TIME = 2400
BEGIN
SET @TIME = ‘0000’
SET @DATE = @DATE + 1
GOTO ROTINA_RESTORE;
END 


–senão chegar em 24:00, é só voltar para ROTINA_RESTORE
ELSE
GOTO ROTINA_RESTORE;

 

No momento da migração era só restaurar 3 arquivos desses, o tail log e pronto, tá migrado. Não trata erros, não faz nada automático a não ser restaurar os arquivos que precisa, não pinta a tela de cor de rosa, não faz estrelinhas mas permitiu um downtime da base de 09 minutos e ainda garantiu minha presença na festa da empresa hehehe senão eu ia ficar restaurando base até o dia seguinte.

Acho que o script é útil, dá pra você adaptar para o padrão de nomes de arquivos que você pode precisar restaurar.

.

4 comentários

Pular para o formulário de comentário

  1. Angelo Maximo

    Excelente Luiz, realmente uma dica muito boa.
    Fiquei com uma dúvida: uma vez que você definiu o script para deixar a base com a opção NORECOVERY, você teve que aplicar o último log manualmente, com a opção RECOVERY ?

    Já adicionei esse script na minha “base”, hehehe.

  2. Luiz Mercante

    O último log, também chamado de tail log, foi enviado pelo cliente com um nome X. Fiz o restore manualmente usando a opção WITH RECOVERY mas poderia ter deixado como NORECOVERY e, quando eu quisesse deixar a base online executaria apenas:

    RESTORE DATABASE nomedabase WITH RECOVERY

  3. Ivan

    Luiz boa tarde. Estou fazendo uma migração de datacenter aqui na empresa e preciso copiar as bases de sql do datacenter antigo para o novo. Você saberia informar se eu copiar os arquivos .bak do datacenter antigo para o novo e restaurar as bases vou ter o banco restabelecido? Existe alguma dica que voce poderia me dar nesse processo? Muito obrigado.

  4. Luiz Mercante

    Meu caro, gostei muito da sua pergunta e acabei escrevendo este outro artigo aqui:
    http://sqldicas.com.br/dicas/dicas-uteis-de-migraca/

    Não tenho como responder sua pergunta com exatidão pois não conheço o ambiente nem o negócio. Espero ter ajudado, abs!

Deixe uma resposta