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.
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:
- 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.
- 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.
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).
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.
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:
- 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.
- 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!