Você está na página 1de 4

Restaurar Backup via Script

Existem trs tipos bsicos de backups no SQL Server: o backup completo, o backup diferencial e o backup incremental. O dois ltimos sempre trabalham em conjunto com o backup completo. Uma estratgia de backup algo muito particular de cada negcio; em alguns ambientes crticos inadimissvel a perda de um minuto de informao, j em outros lugares, na ocasio de uma falha, um backup do dia anterior a soluo ideal; logo, a forma como mesclar os diferentes tipos de backups uma questo a ser analisada (e testada!) com muito critrio. No entanto de uma coisa temos certeza: toda estratgia de backup incluir um backup completo (comumente chamado de backup FULL) e neste texto iremos focar na recuperao (via script) de um backup completo no SQL Server; para isso utilizaremos como base dois cenrios:

O primeiro cenrio abordar o restore de um backup FULL sobre a base original (do backup), por exemplo, sua base de dados atual sofreu alteraes inadequadas e agora precisa da restaurao do ltimo backup para reaver os dados anteriores. No segundo cenrio iremos visualizar um DBA que recebe um backup completo de um cliente e precisa restaur-lo em outro ambiente, por exemplo, para sua equipe de desenvolvimento.

CENRIO 1 Temos aqui um arquivo de backup chamado AdventuresWorks_FULL.bak. Antes de restaur-lo precisamos verificar qual o contedo desse arquivo fsico e se o backup existente ir atender a necessidade do restore; para isso utilizaremos o seguinte comando: ? 1restore headeronly from disk ='C:\LabRestore\AdventuresWorks_FULL.bak' Veja o resultado:

No resultado da execuo do comando RESTORE HEADERONLY podemos identificar que o arquivo em questo contm trs backups (sim! um arquivo fsico pode conter inmeros backups de uma mesma base). Observe a posio de cada backup dentro do arquivo (campo Position), o tamanho de cada um (BackupSize) e suas respectivas datas (BackupStartDate).

No nosso exemplo vamos restaurar o backup do dia 03 de Fevereiro, logo, o backup a ser restaurado ser o da posio 2 (dois). Vamos ao script: ? 1USE MASTER 2 3GO 4 5RESTORE DATABASE AdventureWorks 6 7FROM DISK = 'C:\LabRestore\AdventuresWorks_FULL.bak' 8 9WITH FILE = 2, REPLACE, STATS = 10 A base de dados a ser restaurada a AdventureWorks, o arquivo de backup est localizado no endereo: C:\LabRestore\AdventuresWorks_FULL.bak. O backup que ser restaurado est na posio 2 deste arquivo (FILE = 2). Como a base j existe necessrio sobrescrev-la, para isto utilizamos a opo REPLACE. O STATS mostrar o progresso da restaurao em intervalos de 10 em 10%. Importante: Numa operao de restore a base no deve estar em uso por nenhum usurio (inclusive voc), por isso antes de iniciar o script direcionamos a sesso para o database Master. Se a base estiver em uso, a seguinte mensagem de erro ser exibida: Msg 3101, Level 16, State 1, Line 1 Exclusive access could not be obtained because the database is in use. Se tudo estiver ok, ao final da execuo do script voc ver uma mensagem similar a esta: RESTORE DATABASE successfully processed 22514 pages in 10.209 seconds (18.065 MB/sec). CENRIO 2 Neste cenrio o DBA dever restaurar um backup completo recebido de um cliente externo. O arquivo de backup est identificado como SistemaX_FULL.bak e ser restaurado no ambiente de desenvolvimento que composto por um servidor com um nico disco (C:\). Vamos analisar o contedo do arquivo com o RESTORE HEADERONLY: ? 1restore headeronly from disk = 'C:\LabRestore\SistemaX_FULL.bak' Veja o resultado:

No resultado acima verificamos que existe um nico backup neste arquivo. A base do cliente (campo DatabaseName) est identificada por SistemaX e podemos verificar tambm outros dados como o tamanho do backup e data. At aqui tudo bem, mas neste cenrio precisamos analisar novos elementos, isso porque a base em questo ainda no existe e ao efetuar a restaurao o SQL Server ir trazer alm dos objetos deste banco (tabelas, procedures, triggers) suas configuraes originais como: endereo dos arquivos fsico de dados e log, modo de recovery, etc. Para verificar o estado de algumas destas propriedades podemos utilizar o comando RESTORE FILELISTONLY: ? 1restore filelistonly from disk = 'C:\LabRestore\SistemaX_FULL.bak' Veja o resultado:

Observe que a base do cliente e seus respectivos arquivos de dados e log esto localizados em discos diferentes. Neste caso, se o DBA realizar um restore comum (como o script utilizado no exemplo anterior) o SQL Server tentar alocar estes arquivos em seus caminhos de origem, logo precisamos alterar este comportamento, j que neste cenrio o servidor onde ser realizado o restore s possui um disco. Veja o comando: ? 01 USE MASTER 02 03GO 04 05RESTORE DATABASE SistemaX 06FROM DISK = 'C:\LabRestore\SistemaX_FULL.bak' 07WITH 08MOVE 'SistemaX' TO 'C:\LabRestore\SistemaX.mdf', MOVE 'SistemaX_log' TO 'C:\LabRestore\SistemaX_log.ldf', 09STATS = 10 10 A base de dados a ser restaurada a SistemaX e o arquivo de backup est em: C:\LabRestore\SistemaX_FULL.bak. Observe que adicionamos a opo MOVE; esta opo direciona os arquivos de dados e log para um novo caminho. O restante no muda; continuo utilizando o STATS e desta vez no precisamos do REPLACE j que a base no existia.

importante destacar que os comandos RESTORE FILELISTONLY e RESTORE HEADERONLY no so obrigatrios num processo de restaurao de banco; eles so comandos que recuperam informaes sobre os arquivos de backup e estas informaes podem auxiliar o DBA no processo de restaurao. Existem outros comandos similares, como o RESTORE VERIFYONLY que verifica se o arquivo de backup est legvel. CONCLUSO Como podemos verificar, o restore de um backup full, via script no difcil, basta conhecer os comandos certos para recuperar informaes sobre o contedo do arquivo de backup; estas informaes iro auxiliar o usurio na construo do comando de restore

Você também pode gostar