Copy Only Backup’s

Posted on março 10, 2011

1


 

Copy_Only é um novo tipo de backup que podemos fazer a partir da versão 2005 do SQL Server. Essa nova funcionalidade foi incluída para se conseguir realizar um backup do banco de dados, sem alterar o procedimento de backup e restore do ambiente.

Os tipos de backups com copy_only que podem ser tirados são:

      · Backup FULL (Todos os modos de recuperação)

      · Backup de LOG

O copy only backup, não pode ser realizado em modo de recuperação SIMPLE, porque o modelo não guarda informações de LOG no arquivo de .LDF (Arquivo de log do banco de dados).

Para conseguirmos entender melhor essa funcionalidade, vamos fazer o seguinte:

–verificação da existência do banco de dados

IF DB_ID (‘InsideBackup’) IS NOT NULL

DROP DATABASE InsideBackup

–criação do banco de dados

CREATE DATABASE InsideBackup

ON PRIMARY

(NAME = ‘InsideBackup’,

FILENAME = ‘C:\Temp\InsideBackup\InsideBackup.mdf’,

SIZE = 10MB)

LOG ON

(NAME = ‘Inside_Log’,

FILENAME = ‘C:\Temp\InsideBackup\InsideBackup.ldf’,

SIZE = 2MB)

O Banco de dados que acabamos de criar na pasta:

clip_image001

–usando o banco de dados

USE InsideBackup

–criação da tabela

CREATE TABLE tb_info

(

cod INT IDENTITY NOT NULL,

nome VARCHAR(1000) NOT NULL,

pad CHAR(100) NOT NULL

)

–backup dos dados

BACKUP DATABASE InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackup_FULL.bak’

WITH INIT, CHECKSUM

 

O Backup do banco de dados que acabamos de criar na pasta:

clip_image002

Nesse momento, iremos realizar a inserção de dados na tabela criada, a cada lote de inserção de dados, iremos fazer um backup de log, para no final, conseguirmos analisar todos os backup gerados.

–adicionando dados na tabela

DECLARE @INT INT

SET @INT = 1

WHILE (@INT <= 9999)

BEGIN

INSERT INTO tb_info (nome, pad) VALUES (‘Luan.Moreno’,‘Sr.Nimbus’)

SET @INT = @INT + 1

END

–backup do log

BACKUP LOG InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_ncpo1.trn’

WITH INIT, CHECKSUM

–adicionando dados na tabela

DECLARE @INT INT

SET @INT = 1

WHILE (@INT <= 19999)

BEGIN

INSERT INTO tb_info (nome, pad) VALUES (‘Luan.Moreno’,‘Sr.Nimbus’)

SET @INT = @INT + 1

END

–backup do log

BACKUP LOG InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_ncpo2.trn’

WITH INIT, CHECKSUM

Todo backup, apresenta um LSN (Log Sequence Number), esse número é responsável, por colocar uma sequência lógica nos backups. Os LSNs, são usados internalmente, para o processos de restauração. É partir deles, que o SQL Server consegue saber qual sequência é necessária para realizar o restore do banco de dados. Quando um backup é restaurado, os dados são restaurados ao LSN correspondente ao momento em que o backup foi retirado.

O Backups InsideBackupLog_ncpo1.trn e InsideBackupLog_ncpo2.trn na pasta:

clip_image003

Depois de termos realizado esses backups, vamos inserir mais alguns dados, e realizar o próximo backup com copy_only, e logo em seguida, iremos realizar mais dois backups sem copy_only, para assim conseguirmos ter uma boa análise.

–adicionando dados na tabela

DECLARE @INT INT

SET @INT = 1

WHILE (@INT <= 29999)

BEGIN

INSERT INTO tb_info (nome, pad) VALUES (‘Luan.Moreno’,‘Sr.Nimbus’)

SET @INT = @INT + 1

END

 

–backup do log com Copy Only

BACKUP LOG InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_wcpo.trn’

WITH INIT, CHECKSUM, COPY_ONLY

–adicionando dados na tabela

DECLARE @INT INT

SET @INT = 1

WHILE (@INT <= 49999)

BEGIN

INSERT INTO tb_info (nome, pad) VALUES (‘Luan.Moreno’,‘Sr.Nimbus’)

SET @INT = @INT + 1

END

–backup do log

BACKUP LOG InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_ncpo3.trn’

WITH INIT, CHECKSUM

–adicionando dados na tabela

DECLARE @INT INT

SET @INT = 1

WHILE (@INT <= 9999)

BEGIN

INSERT INTO tb_info (nome, pad) VALUES (‘Luan.Moreno’,‘Sr.Nimbus’)

SET @INT = @INT + 1

END

–backup do log

BACKUP LOG InsideBackup

TO DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_ncpo4.trn’

WITH INIT, CHECKSUM

 

Os Backups InsideBackupLog_wcpo.trn, InsideBackupLog_ncpo3.trn e InsideBackupLog_ncpo4.trn na pasta, sendo o backup InsideBackupLog_wcpo.trn gerado com COPY_ONLY:

clip_image004clip_image005

 

Antes de analisarmos internalmente todos nossos backups gerados, vamos realizar um resumo do que fizemos até agora.

Os Backups InsideBackupLog_ncpo1.trn e InsideBackupLog_ncpo2:

clip_image006

    Os dois primeiros backups de log, foram gerados sem copy_only, se analisarmos conseguimos ver que no backup InsideBackupLog_ncpo1.trn foi colocado no log as primeiras 10 Mil inserções na base de dados.

     No backup de nome InsideBackupLog_ncpo2 foram colocados mais 20 Mil inserções dos dados.

O Backup InsideBackupLog_wcpo.trn:

clip_image007

     O backup de nome InsideBackupLog_wcpo.trn, que foi o backup gerado com  copy_only, apresenta 30 Mil inserções na base de dados.

Os Backups InsideBackupLog_ncpo3.trn e InsideBackupLog_ncpo4:

clip_image008

     No backup de nome InsideBackupLog_ncpo3.trn apresenta-se, inseridos 50 Mil dados.

    E no backup de nome InsideBackupLog_ncpo4.trn foram inseridos mais 10 Mil registros.

Depois de analisarmos todos os backups gerados, vamos agora ver internalmente, qual a diferença entre os backups sem copy_only e o backup gerado com copy_only.

Para conseguirmos analisar os backups, vamos utilizar um comando para visualizar a estrutura interna dos backups, que nos traz informações de: cabeçalho, FirstLSN, LastLSN, CheckpointLSN, Data de criação, e entre outros.

RESTORE HEADERONLY

FROM DISK = ‘C:\Temp\InsideBackup\InsideBackupLog_%.trn’

·    % = substituir pelo nome final do backup

Assim conseguimos ver as seguintes informações do backup:

Backup: InsideBackupLog_ncpo1.trn e InsideBackupLog_ncpo2.trn

clip_image010

Temos que, o LSN começa com o número destacado acima, dando início a sequência dos logs.

clip_image012

Temos agora, que o FirstLSN desse backup, é exatamente o LastLSN do backup InsideBackupLog_ncpo1.trn, ou seja, o LSN está seguindo uma sequência lógica.

Backup: 1. InsideBackupLog_wcpo.trn (Copy Only Backup),

2. InsideBackupLog_ncpo3.trn

3. InsideBackupLog_ncpo4.trn

1.

clip_image014

2.clip_image016

3.

clip_image018

Se analisarmos, o backup InsideBackupLog_wcpo.trn (Copy Only Backup), vemos que ele segue a sequência normal do log, o FirstLSN dele, é na verdade, o LastLSN do backup InsideBackupLog_ncpo2, sendo assim ele não realizou nenhuma alteração no encadeamento do log.

Agora, se analisarmos o backup InsideBackupLog_ncpo3.trn, vamos ver que, o FirstLSN dele, é novamente o LastLSN do backup InsideBackupLog_ncpo2, ou seja, como o backup InsideBackupLog_wcpo.trn, foi gerado com copy_only, então ele não muda o encadeamento dos LSNs, fazendo com que o backup InsideBackupLog_ncpo3.trn, continue pegando a sequência do backup anterior, que não foi gerado com copy_only.

E para finalizar, se olharmos para o backup InsideBackupLog_ncpo4.trn, vemos que agora, o FirstLSN dele, não é mais o LastLSN do backup InsideBackupLog_ncpo2, mas sim do backup InsideBackupLog_ncpo3.trn, assim seguindo uma sequência do LSN.

Se pesquisarmos no books online (BOL), vemos que:“Um backup copy only, é um backup que é independente da sequência convencional .” Ou seja, o backup com copy_only é ótimo para realizar backups pontuais, backups que não afetem sua rotina de backup.

Posted in: SQL Server 2008