Por: Atif Shehzad | Actualizado: 2009-06-15 | Comentários (4) | Relacionado: Mais > Backup

Problema

Eu implementei um plano de backup para as minhas bases de dados do SQL Server. Eu faço um backup diário com suporte a backups diferenciais de hora em hora. Um plano de restauração é documentado com base neste plano de backup juntamente com a localização e hora dos backups mencionados no plano. Frequentemente sou obrigado a actualizar o servidor de teste ou desenvolvimento com uma cópia arecent do banco de dados de produção. Para este propósito, eu faço um backup completo da base de dados necessária. O problema é que tais backups ad hoc interrompem a minha sequência de recuperação planeada no caso de uma recuperação necessária. Existe alguma forma de os meus backups ad hoc não interromperem a sequência do meu plano de backup?

Solução

Felizmente no SQL Server 2005 e seguintes, temos uma opção de backup para tal situação. Esta opção de backup é conhecida como Copy Only backups. Esta opção é especificamente para criar um backup ad hoc que não irá perturbar a sequência de restauro planeada para essa base de dados.

Copy Only backups podem ser usados para criar um backup completo ou um logbackup de transação. Esta opção não é implementada para backups diferenciais. Em cenários práticos você raramente precisará criar um backup de log de cópia apenas, no entanto a opção apenas cópia pode ser usada frequentemente com backups completos.

Embora a opção apenas cópia esteja disponível para o SQL Server 2005, não há como criá-los usando SSMS no SQL 2005. Se você tem SSMS 2008 você pode usar aGUI ou você tem que usar uma instrução T-SQL para criar cópias de segurança somente de cópia.

Primeiro vamos ver como isto pode ser feito usando o SSMS 2008 para criar cópias de segurança apenas

  • Vá para a janela do banco de dados de backup como você faria para um backup normal
  • Apenas abaixo do menu “Tipo de backup”, encontrará uma caixa de verificação para “Copy OnlyBackup”
  • Clique nesta caixa de verificação
  • Preencha todas as outras informações relacionadas como faria para uma cópia de segurança normal e clique em OK

Nota: A caixa de seleção para “Backup apenas cópia de segurança” também estará ativa para backups diferenciais, mas não terá outro efeito além da criação de um backup diferencial normal.

Segundo, para criar uma cópia de segurança só com T-SQL você pode emitir o seguinte comando:

-- Create full backup with Copy Only optionBACKUP DATABASE AdventureWorks TO DISK = 'D:\WithoutCopyOnly_AdventureWorks.bak'WITH COPY_ONLYGO

Provendo o conceito

Antes de ir mais longe será bom resumir o conceito de que uma cópia de segurança completa com a opção só cópia é independente da sequência dos seus outros backups normais.Assim, depois de criar um backup com a opção somente cópia, você poderá trabalhar com o plano de recuperação baseado nos seus backups programados sem que isso afete o seu processo de restauração.

Utilizaremos a informação LSN (log sequence number) para rastrear o backup completo, que é a base para os backups diferenciais. Primeiro vamos anotar o LSN para a base de dados da AdventureWorks.

--Script # 1: Note current differential base LSNSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Note differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO

O diferencial_base_lsn afecta a sequência em que a combinação de backups deve ser restaurada numa recuperação. Você também pode obter informações detalhadas sobre oLSN de qualquer banco de dados na tabela msdb..backupset.

Agora temos que confirmar que um backup completo sem a opção Copy Only atualizará o diferencial_base_lsn. Para este efeito vamos emitir um comando de backup completo sem a opção Copy Only e vamos notar a alteração no LSN para provar que o LSN da base diferencial actualizada é o LSN do nosso último backup completo.

--Script # 2: Create full backup and compare LSN information-- Create full backup -- Run script after changing Backup pathBACKUP DATABASE AdventureWorks TO DISK = 'D:\WithoutCopyOnly_AdventureWorks.bak'GO-- Get differential_base_lsn after full backupSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Updated differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO-- Get LSN of recent full backup for match purposeSELECT database_name, backup_start_date, is_copy_only,first_lsn as 'LSN of full bakup'FROM msdb..backupset WHERE database_name = 'AdventureWorks'ORDER BY backup_start_date DESCGO

No seguinte conjunto de resultados, podemos verificar que o LSN foi alterado para a base de restauração diferencial e corresponde ao nosso LSN de backup completo. Ambos os LSNs marcados abaixo são os mesmos, o que confirma que o último backup é a nossa base diferencial.

Agora vamos criar um backup completo com a opção Copy Only e será provado que o backup completo com a opção Copy Only não afetará o LSN diferencial da nossa base de dados. Em outras palavras, o backup completo com a opção Copy Only não afetará o backup completo da base de dados para os backups diferenciais.

--Script # 3: Create full backup with copy only option and compare LSN information-- Create full backup with copy only option-- Run script after changing Backup pathBACKUP DATABASE AdventureWorks TO DISK = 'D:\CopyOnly_AdventureWorks.bak'WITH COPY_ONLYGO-- Get differential_base_lsn after full backup with copy only optionSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Un changed differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO-- Get LSN of recent full backup with copy only option for match purposeSELECT database_name, backup_start_date, is_copy_only,first_lsn as 'LSN of last full bakup'FROM msdb..backupset WHERE database_name = 'AdventureWorks'ORDER BY backup_start_date DESCGO

Na imagem seguinte podemos verificar que após um backup completo com a opção Apenas Cópia, o LSN da base diferencial permanece inalterado e corresponde ao LSN do backup completo anterior (ambos estão marcados em vermelho). Note também que o último backup completo com a opção Copy Only também está lá (marcado a verde).

As considerações seguintes serão úteis ao utilizar os backups com a opção Copy Only.

  • A opção Apenas Cópias também funcionará para bancos de dados de nível de compatibilidade 80 no SQL Server 2005, instância
  • Blogs de backups de transações com a opção Apenas Cópias preserva o ponto de arquivo existente, portanto não truncará os logs de transações desse banco de dados.
  • Não é necessário considerar melhoramentos enquanto restaurar um backup criado com a opção Apenas Cópias.
  • Um backup completo com a opção Copy Only não pode ser usado como base para backups de restauração de dados com a opção Copy Only
  • Um backup de registo com a opção Copy Only pode ser criado para bases de dados com modelo de recuperação completo ou apenas com registo em massa.
  • >

  • Uma cópia de segurança completa com a opção Copy Only pode ser criada para bases de dados com qualquer modelo de recuperação.
Passos seguintes

Embora retire qualquer cópia de segurança do seu plano de backup, considere a utilização da opção Copy Only para evitar qualquer confusão e perturbação do seu plano de recuperação. Mantendo em mente que os backups do Copy Only são independentes dos backups normais.

  • Então da próxima vez que precisar de actualizar os seus ambientes de teste ou desenvolvimento -considerar a opção Copy Only para não interromper o seu processo de recuperação
  • Para informações sobre modelos de recuperação de bases de dados clique em qualquer lugar ou aqui
  • Aqui está uma dica relacionada sobre os backups APENAS deCOPY

A última actualização: 2009-06-15
>

>
>

>

>

>

>>

Sobre o autor
>Atif Shehzad é um apaixonado DBA SQL Server, revisor técnico e autor do artigo.
Ver todas as minhas dicas
Recursos relacionados

  • Mais Dicas DBA Server SQL…

Deixe uma resposta

O seu endereço de email não será publicado.