Mais Populares

21 de dezembro de 2016

Restaurar banco SQL Server com código SQL

Temos opções de realizar a restauração de um banco de dados de um sistema utilizando o SQL Server Management Studio, mas, nem sempre podemos tê-lo a mão, ou principalmente quando se é necessário realizar o procedimento com muitas bases de dados para análise ou perícia de dados.

Veremos aqui opções para você conseguir restaurar as bases de dados, sem utilizar as janelas, apenas usando linha de comando, para agilizar o processo.





O comando básico para restaurar uma base de dados é da seguinte forma:

RESTORE DATABASE novo_banco FROM DISK = 'X:\XPTO\BACKUP\banco.bak' WITH REPLACE, RECOVERY

Entretanto, o SQL Server, trabalha com arquivos lógicos, e neste modelo, só poderá realizar o restore da própria base de dados que foi feita backup antes, sobre a mesma base.
Se tentar subir a base em outra base de dados (por exemplo para manter 2 ativas), ocorrerá erros semelhantes abaixo (endereços e linhas foram substituídas para exemplo):

Msg 1834, Level 16, State 1, Line X
The file 'X:\XPTO\DATA\banco.mdf' cannot be overwritten.  It is being used by database 'banco'.
Msg 3156, Level 16, State 4, Line X
File 'banco' cannot be restored to 'X:\XPTO\DATA\banco.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 1834, Level 16, State 1, Line X
The file 'X:\XPTO\DATA\banco.ldf' cannot be overwritten.  It is being used by database 'banco'.
Msg 3156, Level 16, State 4, Line X
File 'banco_log' cannot be restored to 'X:\XPTO\DATA\banco.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line X
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line X
RESTORE DATABASE is terminating abnormally.

Para conseguir resolver esta questão, primeiro você deve examinar seu arquivo  "X:\XPTO\BACKUP\banco.bak" e verificar seus arquivos lógicos (um bak pode possuir também vários outros backups, neste exemplo, supomos que tenha apenas um único backup full).

Utilize o comando para verificar os arquivos lógicos do arquivo BAK:
restore filelistonly from disk = 'X:\XPTO\BACKUP\banco.bak'
Então irá exibir o nome lógico dos arquivos contidos dentro deste arquivo de backup.

Utilize então os nomes lógicos e altere o caminho aonde o sistema do banco de dados irá salvar os arquivos MDF e LDF.

Como exemplo, segue o restore completo para realizar para outra base de dados:

RESTORE DATABASE novo_banco FROM DISK = 'X:\XPTO\BACKUP\banco.bak' WITH REPLACE, RECOVERY, MOVE 'banco' TO 'X:\XPTO\DATA\novo_banco.mdf',
MOVE 'banco_log' TO 'X:\XPTO\DATA\novo_banco.ldf';
Caso ocorra outro erro ao tentar utilizar a base de dados como:

Msg 927, Level 14, State 2, Line X
Database 'novo_banco' cannot be opened. It is in the middle of a restore.

Utilize o comando:

alter database novo_banco set multi_user with rollback immediate;


Observação:
Os endereços X:\XPTO\DATA, referem-se ao caminho onde o seu SQL Server salva as bases de dados (arquivos mdf e ldf). Geralmente possuem na mesma pasta os arquivos master.mdf e master.ldf. Exemplo: "C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA".

Os endereços X:\XPTO\BACKUP, referem-se a qualquer caminho onde seu sistema tem o arquivo de backup, a mídia "banco.bak".



Nenhum comentário :

Postar um comentário

Deixe seu comentário abaixo e curta Tutorial TI no facebook!