quinta-feira, 27 de janeiro de 2011

Restaurando backup de banco de dados no diretorio padrão do SQLServer


Muitas vezes ao realizar o restore de um banco de dados no SQLServer um erro ocorre informando-nos que o SQLServer não tem acesso ao diretório de restauração. Isso porque no arquivo de backup é gravado o diretório original dos arquivos MDF(dados e log) de onde o backup foi realizado.

Eventualmente, se tentarmos restaurar o backup em outra instalação do SQLServer, podemos ter uma configuração diferente do banco de dados, ou seja, o diretorio padrão dos arquivos mdf podem diferentes da primeira instalação. Nesse caso temos que mudar manualmente esse diretório durante o procedimento de restore. Podemo fazer isso usando o assistente de restore que vem no Microsoft SQL Server Studio. Para isso basta selecionar o opção Options e informar os diretórios para os arquivos MDF (dados e log)

Outra forma de realizar esse procedimento é através de um script que faça todo o trabalho para nós. Esse script deverá acessar as tabelas de sistema do SQLServer e obter os nomes do diretório padrão para armazenamento dos arquivos MDF e então fazer o restore nesses diretorios.

DECLARE @DATA_PATH NVARCHAR(300); 
DECLARE @LOG_PATH NVARCHAR(300); 
SET @DATA_PATH = (SELECT SUBSTRING(PHYSICAL_NAME, 1, CHARINDEX(N'MASTER', LOWER(PHYSICAL_NAME)) - 1) FROM SYS.MASTER_FILES WHERE DATABASE_ID = 1 AND FILE_ID = 1) + N'NOME_BANCO_DADOS.MDF'; 
SET @LOG_PATH = (SELECT SUBSTRING(PHYSICAL_NAME, 1, CHARINDEX(N'MASTLOG', LOWER(PHYSICAL_NAME)) - 1) FROM SYS.MASTER_FILES WHERE DATABASE_ID = 1 AND FILE_ID = 2) + N'NNOME_BANCO_DADOS_LOG.LDF'; 
RESTORE DATABASE [NESQ] FROM DISK = N'%sNOME_BANCO_DADOS.BAK' WITH FILE = 1, NOUNLOAD, MOVE N'NOME_BANCO_DADOS' TO @DATA_PATH, MOVE N'NOME_BANCO_DADOS_LOG' TO @LOG_PATH, REPLACE GO