O backup de database é uma cópia de todos objetos e dados presentes no banco num determinado momento. O backup do SQL Server 2000 é dinâmico, isto é, pode ser executado com usuários conectados e transações em andamento. O backup dinâmico só é possível porque as transações que ocorreram durante  a execução do backup são também armazenadas no arquivo de backup.

Um backup de database irá refletir a posição do banco ao término do backup, isto é, se a transação-A foi iniciada e concluída durante a execução do backup, toda movimentação de dados ocasionada pela transação será contemplada no arquivo de backup.

O comando T-SQL BACKUP  é responsável pela execução de backups; na Listagem 1 podemos confirmar a execução do backup do database dbTeste no arquivo em disco dump_dbTeste_full.bak, localizado no diretório em c:\temp:

Listagem 1: Executando backup do database dbTeste

backup database dbTeste to disk='c:\temp\dump_dbTeste_full.bak'
----------------------------------------------------------------------------------------------------
Processed 80 pages for database 'dbTeste', file 'dbTeste_Data' on file 1.
Processed 1 pages for database 'dbTeste', file 'dbTeste_Log' on file 1.
BACKUP DATABASE successfully processed 81 pages in 0.361 seconds (1.818 MB/sec).

Um backup de database – também conhecido por backup FULL -  pode ser efetuado diretamente no Enterprise Manager. Para isso, clique no database e, com o botão direito do mouse acionado, selecione e a seguir para que a tela SQL Server Backup receba o foco.

A tela para execução de backups possui duas guias: General e Options. A guia General destina-se à execução do backup propriamente dito; em Options pode-se estabelecer algumas configurações para o backup que será processado. O preenchimento da guia General será detalhado a seguir.

Que database será backupeado?

O database objeto do backup deverá ser selecionado na caixa Database. Os itens Name e Description são opcionais e servem para qualificar e backup que está em andamento.

Que tipo de backup será executado?

Para um backup de database, deveremos selecionar Database – Complete em no item Backup.

Em que dispositivo será efetuado o backup?

Deve-se determinar o local do backup no item Destination. Se houverem unidades de fita  instaladas no servidor, existirão duas possibilidades: Tape e Disk, caso contrário somente Disk estará disponível. Ao clicar no botão para selecionar o destino, a tela Select Backup Destination receberá o foco.

Para escolher nesse momento o nome do arquivo e path para backup, selecione File name e depois clique para concluir. A outra opção é selecionar um Backup device.

O que é um Backup Device?

Um backup device nada mais é do que um nome lógico persistente (alias) para um dispositivo de backup.

Porque utilizar um device se posso especificar o dispositivo na linha do comando backup ?

A principais vantagens da utilizaçãio de devices são: flexibilidade e padronização. Vamos a um exemplo prático:  você pode criar uma rotina genérica para bakup do database northwind utilizando o device DISCO_RIGIDO_LOCAL:

BACKUP database northwind to DISCO_RIGIDO_LOCAL

No servidor-A, DISCO_RIGIDO_LOCAL está mapeado para C:\Backups\dump_db.bak   e no servidor-B D:\Backups\dump_db.bak.

O que fazer se já existirem backups no dispositivo selecionado ?

Para que o backup atual seja apendado, isto é, colocado “ao final” dos backups pré-existentes no dispositivo, selecione . Para que o backup atual sobrescreva os backups pré-existentes na midia,  selecione.

Como fazer para schedular o backup?

Para criar um job para execução automática de backups, selecione Schedule ao final da página. Para definir a periodicidade do job, clique nas reticências.

Para explorar todo o potencial do comando backup, existem diversas opções de configuração que podem ser ativadas e/ou selecionadas na guia Options (ver Figura 1), e que serão discutidas a seguir.

Configurações gerais do backup

Figura 1: Configurações gerais do backup

(1) Verify backup upon completion

Selecionando esse opção, o comando RESTORE VERIFYONLY será executado após o término do backup de database para validar o arquivo de backup. Um exemplo de backup com validação do arquivo encontra-se na Listagem 2.

Listagem 2: Backup com posterior validação

backup database dbTeste to disk = N'C:\temp\dump_dbTeste.bak'
with name = N'dbTeste backup'
go
restore verifyonly from disk= N'C:\temp\dump_dbTeste.bak'
go

Observações:

  1. Um mesmo arquivo de backup pode armazenar vários backups. O padrão é apendar o backup atual no dispositivo (=cláusula NOINIT, pode ser omitida). Para que o backup corrente inicialize o dispositovo, utilize a cláusule INIT.
  2. No comando de verificação RESTORE VERIFYONLY, se a cláusula FILE não for especificada somente o primeiro arquivo encontrado na mídia de backup será verificado. Para consultar a posição de um backup num dispostivo, utilise o comando RESTORE HEADERONLY.

(2) Eject tape after backup

Essa opção só tem validade quando o backup for executado em uma unidade de fita magnética e seu efeito é “ejetar” a fita após término do backup.

(3) Remove inactive entries from transaction log

Essa opção é utilizada somente para backups de log. Quando um backup de log é efetuado, o padrão é truncar (=limpar) todas as transações já finalizadas com COMMIT ou ROLLBACK. Assim, sempre que um backup de log é executado as “transações inativas”, ou seja, aquelas cuja imagem já foi propagada para o database serão excluidas do log.

O arquivo de log não pode ser truncado se o database estiver com problemas de integridade que não são passíveis de correção (status SUSPECT por exemplo); nesses casos o backup de log deve ser executado com essa opção desligada, que irá acrescentar a cláusula NO_TRUNCATE ao comando de backup. A omissão dessa diretiva fará com que o backup de log seja truncado.

Backup de log com a opção “Remove inactive entries from transaction log”  (padrão):

BACKUP LOG [dbTeste]
TO  DISK = N'C:\temp\dump_dbTeste.bak'

Backup de log com a opção “Remove inactive entries from transaction log” desligada:

BACKUP LOG [dbTeste]
TO  DISK = N'C:\temp\dump_dbTeste.bak'
with NO_TRUNCATE

(4) Check media set name and backup set expiration

Se estiver habilitado, o backup só será executado se o label definido para a mídia de backup for igual àquele especificado em  Media Set Name:

Listagem 3: Backup especificando MEDIANAME

backup database dbTeste
TO  DISK = N'C:\temp\dump_dbTeste.bak'
with MEDIANAME = 'MIDIA-X'
  • Observação 1: como o arquivo C:\temp\dump_dbTeste.bak  foi criado sem MediaName,  o backup da Listagem 2 apresentará erro de execução. Para contornar esse problema, utilize a cláusula FORMAT  para inicializar o dispositivo e inicializar o nome da midia;
  • Observação 2: para verificar o label da fita, utilize o comando RESTORE HEADERONLY.

(5) Backup set wil expire after / on

É “data de validade” do backup set. A data de expiração de um backup é um mecanismo de prevenção: evita-se que uma fita com um backup válido seja acidentalmente sobrescrita. A cláusula RETAINDAYS=<nro-de-dias> ou EXPIREDATE = <data-de-validade> controlam, respectivamente,  o número de dias para retenção ou data de expiração (ver Listagem 4.).

Listagem 4: Definindo prazo de retenção do arquivo de backup

backup database dbTeste
to disk = 'C:\temp\dump_dbTeste_full.bak'
witn INIT, RETAINDAYS=1
  • Observação 1: a opção “Backup set will expire” torna-se “selecionável” apenas quando “Overwrite existing midia” (=cláusula INIT, que sobrescreve a mídia) estivar habilitada na guia General; 
  • Observação 2: a diferença entre INIT e FORMAT é que FORMAT, além de sobrescrever o conteúdo da mídia com o backup corrente, também inicializa o label do dispositivo (=MEDIANAME).

(6) Initialize and label media

A inicialização da mídia e label faz com que o conteúdo atual da mídia seja sobrescrito e o label renomeado.

backup database dbTeste
to disk = 'C:\temp\dump_dbTeste_full.bak'
with INIT,
    MEDIANAME      = N'Midia-X', 
    MEDIADESCRIPTION = N'Backup de 16-Out-2005'

Um backup de log é uma cópia de todas as transações que ocorreram no database num determinado intervalo de tempo. Backups de log são incrementais, isto é, registram somente as transações que ocorreram à partir do último backup de log ou backup de database. Backups de log devem ser restaurados respeitando-se a ordem cronológica da geração, isto é , o backup de log das 10:00hs deve ser restaurado antes do backup de log das 11:00hs, e assim por diante.

Como gerar um backup de log

Para gerar um backup de log à partir do Enterprise Manager, selecione o database e, com o botão direito do mouse acionado, clique em e por último em para que a tela de execução de backup (ver Figura 2) receba o foco.

Executando backup de log do database dbTeste

Figura 2: Executando backup de log do database dbTeste

As opções em destaque nessa figura assinalam o tipo de backup (=Transaction Log), o destino do backup (=Destination=c:\temp\dump_dbTeste_full.bak)  e informam também que, se o arquivo em disco C:\temp\dump_dbTeste_full.bak já existir, o backup de log corrente deverá ser adicionado na mídia, preservando o conteúdo anterior. Para executar o backup, basta pressionar a tecla OK.

O comando T-SQL BACKUP LOG também pode ser utilizado em oposição ao Enterprise Manager para geração de backups de log (ver Listagem 5).

Listagem 5: Executando backup de log do database db_Teste com o comando T-SQL BACKUP LOG

BACKUP LOG [dbTeste]
    TO DISK = N'C:\temp\dump_dbTeste_full.bak'               -- midia onde sera efetuado o backup
WITH  NAME      = N'dbTeste backup (Log)'                   -- nome do backup
     ,DESCRIPTION = N'Backup do log do database dbTeste'    -- descricao  do backup
     ,STATS = 10    -- o progresso do backup será visualizado em incrementos de 10%
     ,NOINIT        -- não irá inicializar a Midia (=Append to Midia)

Backups em disco podem ser efetuados em unidades remotas; para isso especifique o path no formato UNC - \\nome-do-servidor\nome-do-diretorio-compartilhado\nome-do-arquivo. Para backups em fita utilize o dispositivo adequado (por exemplo tape=’\\.\tape0’) , mas lembre-se que não são permitidos backups em unidades de fita remotas.

Como visualizar o conteudo de uma midia de backup

O comando RESTORE HEADERONLY pode ser utilizado para listar os backups armazenados na mídia (ver Figura 3).

Listando os backups existentes na midia

Figura 3: Listando os backups existentes na midia

Pelo fato do backup de log ser incremental, é bastante comum acumularmos dezenas de arquivos até o próximo backup de database. Se houver necessidade de restauração, todos esses arquivos serão utilizados na recuperação. À medida que o número de arquivos aumenta, crescem também as chances de ocorrerem erros durante a restauração (midia inválida, arquivo inexistente, etc.).

Configurações gerais

Para explorar todo o potencial do comando backup, existem diversas opções de configuração que podem ser ativadas e/ou selecionadas na guia Options (ver Figura 4), e que serão discutidas a seguir.

Configurações gerais do backup

Figura 4: Configurações gerais do backup

(1) Verify backup upon completion

Selecionando esse opção, o comando RESTORE VERIFYONLY será executado após o término do backup de database para validar o arquivo de backup. Um exemplo de backup com validação do arquivo encontra-se na Listagem 6.

Listagem 6: Backup com posterior validação

backup database dbTeste to disk = N'C:\temp\dump_dbTeste.bak'
with name = N'dbTeste backup'
go
restore verifyonly from disk= N'C:\temp\dump_dbTeste.bak'
go

Observações:

  1. Um mesmo arquivo de backup pode armazenar vários backups. O padrão é apendar o backup atual no dispositivo (=cláusula NOINIT, pode ser omitida). Para que o backup corrente inicialize o dispositovo, utilize a cláusule INIT.
  2. No comando de verificação RESTORE VERIFYONLY, se a cláusula FILE não for especificada somente o primeiro arquivo encontrado na mídia de backup será verificado. Para consultar a posição de um backup num dispostivo, utilise o comando RESTORE HEADERONLY.

(2) Eject tape after backup

Essa opção só tem validade quando o backup for executado em uma unidade de fita magnética e seu efeito é “ejetar” a fita após término do backup.

(3) Remove inactive entries from transaction log

Essa opção é utilizada somente para backups de log. Quando um backup de log é efetuado, o padrão é truncar (=limpar) todas as transações já finalizadas com COMMIT ou ROLLBACK. Assim, sempre que um backup de log é executado as “transações inativas”, ou seja, aquelas cuja imagem já foi propagada para o database serão excluidas do log.

O arquivo de log não pode ser truncado se o database estiver com problemas de integridade que não são passíveis de correção (status SUSPECT por exemplo); nesses casos o backup de log deve ser executado com essa opção desligada, que irá acrescentar a cláusula NO_TRUNCATE ao comando de backup. A omissão dessa diretiva fará com que o backup de log seja truncado.

Backup de log com a opção “Remove inactive entries from transaction log”  (padrão):

BACKUP LOG [dbTeste]
TO  DISK = N'C:\temp\dump_dbTeste.bak'

Backup de log com a opção “Remove inactive entries from transaction log” desligada:

BACKUP LOG [dbTeste]
TO  DISK = N'C:\temp\dump_dbTeste.bak'
with NO_TRUNCATE

(4) Check media set name and backup set expiration

Se estiver habilitado, o backup só será executado se o label definido para a mídia de backup for igual àquele especificado em  Media Set Name:

Listagem 7: Backup especificando MEDIANAME

backup database dbTeste
TO  DISK = N'C:\temp\dump_dbTeste.bak'
with MEDIANAME = 'MIDIA-X'
  • Observação 1: como o arquivo C:\temp\dump_dbTeste.bak  foi criado sem MediaName,  o backup da Listagem 2 apresentará erro de execução. Para contornar esse problema, utilize a cláusula FORMAT  para inicializar o dispositivo e inicializar o nome da midia;
  • Observação 2: para verificar o label da fita, utilize o comando RESTORE HEADERONLY.

(5) Backup set wil expire after / on

É “data de validade” do backup set. A data de expiração de um backup é um mecanismo de prevenção: evita-se que uma fita com um backup válido seja acidentalmente sobrescrita. A cláusula RETAINDAYS=<nro-de-dias> ou EXPIREDATE = <data-de-validade> controlam, respectivamente,  o número de dias para retenção ou data de expiração (ver Listagem 8.).

Listagem 8: Definindo prazo de retenção do arquivo de backup

backup database dbTeste
to disk = 'C:\temp\dump_dbTeste_full.bak'
witn INIT, RETAINDAYS=1
  • Observação 1: a opção “Backup set will expire” torna-se “selecionável” apenas quando “Overwrite existing midia” (=cláusula INIT, que sobrescreve a mídia) estivar habilitada na guia General; 
  • Observação 2: a diferença entre INIT e FORMAT é que FORMAT, além de sobrescrever o conteúdo da mídia com o backup corrente, também inicializa o label do dispositivo (=MEDIANAME).

(6) Initialize and label media

A inicialização da mídia e label faz com que o conteúdo atual da mídia seja sobrescrito e o label renomeado.

backup database dbTeste
to disk = 'C:\temp\dump_dbTeste_full.bak'
with INIT,
    MEDIANAME      = N'Midia-X', 
    MEDIADESCRIPTION = N'Backup de 16-Out-2005'

Backup é um requisito fundamental de toda instalação; mas sua execução muitas vezes é deixada “em segundo plano” – até o dia em que a restauração for inevitável.

Até a próxima!