P>
Clique aqui para ler todos os artigos desta edição
Backups com SQL Server 2000 - Parte IV
Point-in-Time recovery, restaurações de backups de filegroup e diferenciais
Paulo Ribeiro
Leitura obrigatória: SQL Magazine 20, Utilizando Filegroups para Ganho de Performance e Gerenciamento de Espaço.
Leitura obrigatória: SQL Magazine 21, Backups com SQL Server 2000 Parte I - Modelos de Recovery.
Leitura obrigatória: SQL Magazine 22, Backups com SQL Server 2000 Parte II - Executando Backups.
Leitura obrigatória: SQL Magazine 23, Backups com SQL Server 2000 Parte III - Restaurando Backups.
Continuaremos nessa matéria com o assunto iniciado na edição anterior: restauração de databases. Já vimos diversos exemplos de restauração, realizamos também simulações de recuperação de dados em ambientes de produção a partir de arquivos de log. Agora, partiremos para cenários mais abrangentes de restauração, envolvendo backups diferenciais, filegroups e o chamado point-in-time recovery. Boa leitura!
Restauração a partir de backups diferenciais
Relembrando:
· Um backup diferencial irá copiar somente as páginas alteradas desde o último backup de database (backup FULL);
· A restauração de um backup diferencial é um processo de duas etapas: deve-se restaurar o backup de database, seguido do último backup diferencial;
· Backups diferenciais são freqüentemente utilizados em conjunto com backups de log para diminuir número de arquivos e tempo total gasto no processo de restauração.
Para exemplificar um processo de restauração que inclui backups diferenciais, foram reproduzidos uma série de eventos conforme apresentado na Tabela 1. Nosso objetivo será reconstituir o database dbTeste após um crash na unidade D:, onde está localizado o filegroup secundário do database dbTeste (FG_INDICE). O script de criação do database dbTeste encontra-se na Listagem 1.
Listagem 1. Script para criação do database dbTeste.
use master
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'dbTeste')
DROP DATABASE [dbTeste]
GO
-- Criando o database dbTeste
CREATE DATABASE [dbTeste]
ON PRIMARY
(
NAME = N'dbTeste_Data_Prim',
FILENAME = N'c:\temp\dbTeste_Data_Prim.MDF' ,
SIZE = 5,
FILEGROWTH = 10%
)
,
FILEGROUP FG_INDICE
(
NAME = N'dbTeste_Data_Sec',
FILENAME = N'd:\temp\dbTeste_Data_Sec.NDF', -- se você não possui unidade D:, troque para C:
SIZE = 5,
FILEGROWTH = 10%
)
LOG ON
(
NAME = N'dbTeste_log',
FILENAME = N'c:\temp\dbTeste_log.LDF' ,
SIZE = 3,
FILEGROWTH = 10%
)
GO
-- alterando o recovery do database para FULL para que possamos trabalhar com backups de log
alter database dbTeste set recovery FULL
GO
Tabela 1. Cenário de um ambiente de produção que utiliza backups diferenciais e log.
Instante |
Operação |
Comando |
t0 |
Backup Full |
use dbTeste go backup database dbTeste to disk='C:\temp\DUMP_dbTeste.bak' with NAME='[t0] Backup FULL dbTeste',INIT |
t1 |
Movimentação |
create table teste (codigo int PRIMARY KEY, descricao char(20)) on FG_INDICE |
t2 |
Backup de Log |
backup log dbTeste to disk='C:\temp\DUMP_dbTeste.bak' with name='[t2] Backup log dbTeste ' |
t3 |
Movimentação |
insert into teste values (3,'produto-3') |
t4 |
Backup de Log |
backup log dbTeste to disk='C:\temp\DUMP_dbTeste.bak' with name='[t4] Backup log dbTeste ' |
t5 |
... |