Eu tenho vários bancos de dados, a maioria deles com vários arquivos (dados e logs) e vários backups diff e trn. Já tenho um script de restauração (agendado e funcionando em outro servidor) que pega todos os arquivos necessários e os restaura pelo caminho UNC. Há uma verificação no início que verifica se o banco de dados existe, caso contrário, gera um erro. Mas, em vez disso, quero criar o banco de dados e restaurá-lo. Não quero usar a MOVE
opção no RESTORE
extrato. Já fiz algumas pesquisas e o que encontrei não atende as minhas necessidades.
Então, como posso criar uma CREATE
declaração para corresponder ao que restaurarei na próxima etapa? Talvez uma pergunta boba, mas não consigo descobrir como fazê-lo.
Editar
Do comentário de Aaron, entendo agora por que não posso impedir o uso de arquivos MOVE
. Mas então devo criar o banco de dados com todos os grupos de arquivos necessários, correto? Algo assim :
CREATE DATABASE [Testdb] ON PRIMARY
( NAME = N'Testdb', FILENAME = N'F:\SQLDBs\Testdb.mdf' , SIZE = 102400KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),
FILEGROUP [TEST_DATA]
( NAME = N'Test_Data', FILENAME = N'F:\SQLDBs\Test_Data.ndf' , SIZE = 5242880KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),
FILEGROUP [TEST_DATA2]
( NAME = N'Test_Data2', FILENAME = N'F:\SQLDBs\Test_Data2.ndf' , SIZE = 5242880KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),
FILEGROUP [TEST_INDEX]
( NAME = N'Test_Index', FILENAME = N'F:\SQLDBs\Test_Index.ndf' , SIZE = 5242880KB,
MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB )
LOG ON
( NAME = N'Testdb_log', FILENAME = N'G:\SQLLogs\Testdb_log.ldf' , SIZE = 1048576KB,
MAXSIZE = 2048GB , FILEGROWTH = 1048576KB )
GO
ALTER DATABASE [Testdb] SET COMPATIBILITY_LEVEL = 100
GO
Acho que o principal problema é que você acha que criar o banco de dados primeiro permitirá que você ignore os arquivos
WITH MOVE
. Este não é o caso.Se os caminhos do arquivo de destino não corresponderem aos contidos no arquivo de backup, a presença de um banco de dados (e seus locais de arquivo) não fará diferença.
RESTORE
vai olhar para os locais de arquivo especificados no arquivo de backup, ignorando completamente o banco de dados existente. E isso só pode ser substituído usandoWITH MOVE
.