#SQLServer – Um pouco sobre os tipos de #backup

Nesta primeira publicação vou falar um pouco sobre os tipos de backups do Microsoft SQL Server 2008. Esse é um assunto já bem discutido, mas nunca é demais falar dele. Ainda mais porque é um dos mais abordados na prova para MCTS em SQL Server.

O SQL Server 2008 possui 4 tipos básicos de backup:

  • Completo (Full)
  • Diferencial (Diferential)
  • Log de transação ( Transaction Log)
  • Grupo de Arquivos (File Group)

Backup Full

A estrutura de um banco de dados SQL Server é formado por páginas de dados. No backup full, o SQL Server faz o backup de todas as páginas que contenham dados. As que não possuírem não é feito backup.

Esse tipo de backup é a base para a recuperação de um banco de dados e deve existir antes que você utilize qualquer outro tipo.

Pra garantir consistência e acesso de todos os usuários ao mesmo tempo o SQL Server executa as seguintes etapas:

1.       Bloqueia o banco de dados (paralisa as transações)

2.       Coloca uma marca no log de transação

3.       Libera o bloqueio do banco de dados

4.       Extrai todas as páginas dos arquivos de dados  e grava no dispositivo de backup (disco, fita, etc.)

5.       Bloqueia o banco de dados (paralisando novamente as transações)

6.       Coloca uma marca no log de transação

7.       Libera o bloqueio do banco de dados

8.       Extrai a parte do log entre as marcas e anexa no backup

Durante a operação de backup full, só existem duas operações que não podem ser realizadas: adicionar/remover arquivos do banco e reduzir (shrink) um banco.

A sintaxe genérica para se realizar um backup de banco de dados é a seguinte:

Backing Up a Whole Database

BACKUP DATABASE { database_name | @database_name_var }

TO <backup_device> [ ,…n ]

[ <MIRROR TO clause> ] [ next-mirror-to ]

[ WITH { DIFFERENTIAL | <general_WITH_options> [ ,…n ] } ]

[;]

Backing Up Specific Files or Filegroups

BACKUP DATABASE { database_name | @database_name_var }

<file_or_filegroup> [ ,…n ]

TO <backup_device> [ ,…n ]

[ <MIRROR TO clause> ] [ next-mirror-to ]

[ WITH { DIFFERENTIAL | <general_WITH_options> [ ,…n ] } ]

[;]

Creating a Partial Backup

BACKUP DATABASE { database_name | @database_name_var }

READ_WRITE_FILEGROUPS [ , <read_only_filegroup> [ ,…n ] ]

TO <backup_device> [ ,…n ]

[ <MIRROR TO clause> ] [ next-mirror-to ]

[ WITH { DIFFERENTIAL | <general_WITH_options> [ ,…n ] } ]

[;]

Backing Up the Transaction Log (full and bulk-logged recovery models)

BACKUP LOG { database_name | @database_name_var }

TO <backup_device> [ ,…n ]

[ <MIRROR TO clause> ] [ next-mirror-to ]

[ WITH { <general_WITH_options> | <log-specific_optionspec> } [ ,…n ] ]

[;]

<backup_device>::=

{

{ logical_device_name | @logical_device_name_var }

| { DISK | TAPE } =

{ physical_device_name | @physical_device_name_var }

}

<MIRROR TO clause>::=

MIRROR TO <backup_device> [ ,…n ]

<file_or_filegroup>::=

{

FILE = { logical_file_name | @logical_file_name_var }

| FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

}

<read_only_filegroup>::=

FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }

<general_WITH_options> [ ,…n ]::=–Backup Set Options

COPY_ONLY

| { COMPRESSION | NO_COMPRESSION }

| DESCRIPTION = { text | @text_variable }

| NAME = { backup_set_name | @backup_set_name_var }

| PASSWORD = { password | @password_variable }

| { EXPIREDATE = { date | @date_var }

| RETAINDAYS = { days | @days_var } }

–Media Set Options

{ NOINIT | INIT }

| { NOSKIP | SKIP }

| { NOFORMAT | FORMAT }

| MEDIADESCRIPTION = { text | @text_variable }

| MEDIANAME = { media_name | @media_name_variable }

| MEDIAPASSWORD = { mediapassword | @mediapassword_variable }

| BLOCKSIZE = { blocksize | @blocksize_variable }

–Data Transfer Options

BUFFERCOUNT = { buffercount | @buffercount_variable }

| MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

–Error Management Options

{ NO_CHECKSUM | CHECKSUM }

| { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }

–Compatibility Options

RESTART

–Monitoring Options

STATS [ =percentage ]

–Tape Options

{ REWIND | NOREWIND }

| { UNLOAD | NOUNLOAD }

–Log-specific Options

{ NORECOVERY | STANDBY =undo_file_name }

| NO_TRUNCATE

Explicando algumas cláusulas:

  • MIRROR TO – permite fazer quatro cópias de um mesmo backup em uma única operação
  • INIT – sobrescreve o arquivo com o conteúdo do novo backup
  • NOINIT – anexa um arquivo ao backup existente
  • CHECKSUM – verifica se houve algum erro ou inconsistência nas páginas do banco
  • STOP_ON_ERROR – para se o CHECKSUM encontrar alguma inconsistência
  • CONTINUE_AFTER_ERROR – continua a realizar o backup, mesmo que ocorra erro em alguma página

Backups de Log de Transação

Os arquivos de log de transação contêm as alterações feitas no banco de dados. Ele possui duas partes: a ativa e a inativa. A parte ativa do log contêm informações que ainda não foram efetivadas no banco de dados; enquanto a parte inativa contêm as informações que já foram efetivadas.

O backup de log captura todas as transações efetivadas no log desde o último backup de log ou backup full. Como o backup de log contém somente informações que alteração no banco de dados é necessário um ponto de partida para utilizá-lo, que pode ser um backup full ou um backup diferencial.

A sintaxe do backup de log já está contida no exemplo anterior.

Backups Diferenciais

Um backup diferencial obtém todas as extensões que mudaram do último backup full realizado até o momento. O principal objetivo dele é diminuir o número de backups do log no instante de uma restauração (restore) do banco de dados.

Esse, ao contrário do backup de log, não é incremental. Ele contém todas as páginas alteradas desde o último backup completo.

Backups de grupo de arquivos

Para se ganhar tempo e desempenho, você pode realizar backup somente de um arquivo ou de um grupo de arquivos. Com isso a operação de backup se torna mais rápida e a restauração também, pois no momento da restauração, que normalmente o banco fica indisponível (conforme veremos num próximo post sobre Restore), neste caso isso não ocorre. Só fica indisponível a parte que o arquivo ou grupo de arquivo está restaurando.

Para reduzir também o tamanho do backup pode ser feito o que chamamos de backup parcial, especificando a opção READ_WRITE_FILEGROUPS, ou seja, só é feito backup dos arquivos que sofre modificação.

Num próximo post falo mais um pouco sobre Restore e também sobre Snapshot.

Espero que tenha sido útil pra vocês!

Abraço!

Fonte de pesquisa:

Anúncios

Uma resposta em “#SQLServer – Um pouco sobre os tipos de #backup

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s