As pastas padrão para uma instância do SQL são armazenadas no registro do servidor
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\[your specific instance ID]\MSSQLServer
Você pode usar xp_regread
para extrair esse valor e usá-lo em seus scripts de restauração. Aqui está um exemplo:
DECLARE @DataDirectory VARCHAR(255)
DECLARE @LogDirectory VARCHAR(255)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer',
@value_name='DefaultData',
@DataDirectory=@DataDirectory OUTPUT
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer',
@value_name='DefaultLog',
@LogDirectory=@LogDirectory OUTPUT
RESTORE DATABASE MyDB
FROM DISK = 'X:\SQLBackups\MyDB.bak'
WITH MOVE 'MyDB_Data' TO @DataDirectory + 'MyDB.mdf',
MOVE 'MyDB_Log' TO @LogDirectory + 'MyDB.ldf';
Você substituiria MSSQL10_50.MSSQLSERVER pelo ID da instância do servidor na qual você está executando a restauração.
Algo mais fácil é usar xp_instance_regread
, que identifica automaticamente o ID da instância em que você está trabalhando. Então, o acima seria reescrito como tal:
DECLARE @DataDirectory nvarchar(255)
DECLARE @LogDirectory nvarchar(255)
EXEC master..xp_instance_regread
@rootkey=N'HKEY_LOCAL_MACHINE',
@key=N'Software\Microsoft\Microsoft SQL Server\MSSQLServer',
@value=N'DefaultData',
@DataDirectory=@DataDirectory OUTPUT
EXEC master..xp_instance_regread
@rootkey=N'HKEY_LOCAL_MACHINE',
@key=N'Software\Microsoft\Microsoft SQL Server\MSSQLServer',
@value=N'DefaultLog',
@LogDirectory=@LogDirectory OUTPUT
RESTORE DATABASE MyDB
FROM DISK = 'X:\SQLBackups\MyDB.bak'
WITH MOVE 'MyDB_Data' TO @DataDirectory + 'MyDB.mdf',
MOVE 'MyDB_Log' TO @LogDirectory + 'MyDB.ldf';
(Nota: estou trabalhando com o SQL Server 2008 R2 aqui)
Em relação à movimentação dos bancos de dados, você pode desanexar o banco de dados da origem, copiar os dados físicos e os arquivos de log para o local de destino e reconectá-los (bem como de volta na máquina de origem). Eu prefiro o processo de backup / restauração pessoalmente, especialmente se você estiver em uma posição onde você precisa ftp para fazer a transferência de arquivos.
Você pode até configurar a replicação, o espelhamento ou o envio de logs, mas acho que, no seu caso, isso seria um exagero. Eu ficaria com o método de backup / restauração.