«

»

maio 09

Script de backup nomeando o arquivo pela data e hora

Neste post vou mostrar um script fácil para backup com data e hora no nome do arquivo, muito útil se você deseja separar seus backups por arquivo. Exemplo:

Ano|Mês|Dia|h|m|s .bak

2011-08-18_20.36.40.bak
2011-08-19_20.35.10.bak
2011-08-20_20.36.20.bak
2011-08-21_20.36.10.bak

Para ajustar ao seu ambiente, basta trocar o caminho na variável @PATH.

Declarando as variáveis para poder utilizá-las:

DECLARE @PATH CHAR(8)
DECLARE @FILEEXTENSION CHAR(4)
DECLARE @DATE VARCHAR(20)
DECLARE @FULLPATH CHAR(32)

Atribuindo o caminho para a variável @PATH (alterar para o caminho onde deseja que o arquivo bak seja criado). Exemplo:

SET @PATH = ‘D:\BackupSQL\’

Esta é a parte mais complicada deste script, vamos entendê-la:

Vamos colocar na variável @DATE a data atual, usando as seguintes funções:

REPLACE

para substituir os espaços por um _ (underline) como no exemplo abaixo:

REPLACE(‘troca os espaços desta frase por #’,’ ‘,’#’)
Resultado:     troca#os#espaços#desta#frase#por##

Após o REPLACE, abrimos parênteses, colocamos o conteúdo que queremos alterar entre aspas simples e separamos por vírgula os dois parâmetros necessários: o que trocar? substituir por o que? Portanto coloquei a frase, o espaço entre aspas simples e o # também entre aspas simples dizendo: “Troque os espaços por tralhas”

GETDATE() e CONVERT

SELECT CONVERT(nvarchar(30), GETDATE(), 120) -> Estamos usando o GETDATE e o CONVERT. São 2 parâmetros, um a esquerda e outro a direita do GETDATE. O da esquerda – nvarchar(30) – é onde vai ficar a informação temporariamente pois não há uma variável declarada explicitamente para isso. Já o da direita – 120 – é o formato de código 120, motivo da utilização do CONVERT, porque a data pode ser obtida em muitos formatos diferentes. Para saber o código do formato que você deseja (ou escolher um entre todos os disponíveis)  consulte esta tabela no MSDN da Microsoft:

http://msdn.microsoft.com/pt-br/library/ms187928.aspx

Veja o formato que obtivemos com o código 120:

Aug 18 2011 8:23PM

Traz a data e hora em um formato inadequado para nome de arquivos do Windows porque possui o sinal de dois pontos e porque não é exatamente o formato que queremos para o nome do nosso arquivo. Agora vamos colocar um conteúdo na variável DATE e, ao mesmo tempo, vamos transformar a data para o formato que queremos e substituir os caracteres para ser possível utilizar como nome de arquivo no Windows:

SET @DATE = REPLACE((CONVERT(nvarchar(30), GETDATE(), 120)),’ ‘,’_’)

Observe que estamos usando o REPLACE junto com o CONVERT, já trocando os espaços pelo underline. Agora vamos utilizar novamente para trocar o sinal de dois pontos (:) por apenas ponto (.)

SET @DATE = REPLACE(@DATE,’:’,’.’)

Atribuindo um valor fixo (.bak) para a variável @FILEEXTENSION

SET @FILEEXTENSION = ‘.bak’

Colocando todas as informações que preparamos dentro da variável @FULLPATH

SET @FULLPATH = @PATH+@DATE+@FILEEXTENSION

@PATH -> temos o diretório do backp;
@DATE -> temos a data convertida do jeito que queremos;
@FILEEXTENSION -> a extensão do arquivo .bak.

E finalmente, fazemos o backup full da base no caminho que queremos, trocando nome_da_base pelo nome da base que deseja obter o backup:

BACKUP DATABASE nome_da_base TO DISK=@FULLPATH

Segue script, mas recomendo que digite para memorizar os comandos e suas sintaxes:

DECLARE @PATH VARCHAR(20)
DECLARE @FILEEXTENSION CHAR(4)
DECLARE @DATE VARCHAR(20)
DECLARE @FULLPATH CHAR(44)
SET @PATH = ‘D:\BackupSQL\’
SET @DATE = REPLACE((CONVERT(nvarchar(30), GETDATE(), 120)),’ ‘,’_’)
SET @DATE = REPLACE(@DATE,’:’,’.’)
SET @FILEEXTENSION = ‘.bak’
SET @FULLPATH = @PATH+@DATE+@FILEEXTENSION

BACKUP DATABASE nome_da_base TO DISK=@FULLPATH

Espero que tenham gostado, abs!.

2 comentários

  1. Rodolfo

    Otimo script. Preciso acrescentar o nome do banco no nome do arquivo de backup..como fazer isso?

  2. Luiz Mercante

    Olá Rodolfo!

    Altere a linha abaixo:

    SET @PATH = ‘D:\BackupSQL\nome_da_base’

    Abs!

Deixe uma resposta