Recentemente tive problemas com o restore do SQL Server que deu um erro e não estava conseguindo restaurar um backup de uma base de projetos na base de desenvolvimento, conversando com meu amigo DBA Sandro Bichbich ele me mostrou uma maneira de criar uma query que faz o restore (bem mais rápido por sinal que a ferramenta do próprio SQL Server).
Ao invés de utilizarmos a ferramenta nativa do SQL:
Podemos criar uma query que faça esse trabalho, porém é importante que essa query não esteja sendo executada na database que estamos utilizando para ser restaurada, para isso vamos utilizar a database master.
Agora vamos executar o seguinte código:
RESTORE FILELISTONLY from disk = 'Local onde se encontra o backup'
Feito isso vamos pegar o resultado do LogicalName para criar o seguinte código:
RESTORE DATABASE [Base a ser restaurada] FROM DISK = 'Local onde se encontra o backup'
WITH FILE = 1, NOUNLOAD , STATS = 1, RECOVERY ,
move 'NomeLógico' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\BaseASerRestaurada.mdf',
move 'NomeLógico_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\BaseASerRestaurada_log.LDF',
REPLACE
Go
No meu caso o resultado ficou assim:
RESTORE FILELISTONLY from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\DynamicsAX_Proj.bak'
RESTORE DATABASE [DynamicsAX_Dev] FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\DynamicsAX_Proj.bak'
WITH FILE = 1, NOUNLOAD , STATS = 1, RECOVERY ,
move 'DynamicsAx_Proj' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DynamicsAx_Dev.mdf',
move 'DynamicsAx_Proj_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DynamicsAx_Dev_log.LDF',
REPLACE
Go
[]'s
Alexssander