我有几个数据库,其中大多数有多个文件(数据和日志)和多个 diff 和 trn 备份。我已经有一个恢复脚本(已安排并在其他服务器上工作),它获取所有需要的文件并通过 UNC 路径恢复它们。开始有一个检查,验证数据库是否存在,如果不存在,则抛出错误。但我想改为创建数据库然后恢复它。我不想使用声明中的MOVE
选项RESTORE
。我进行了一些 搜索,发现的内容无法满足我的需求。
那么,我如何创建一个CREATE
语句来匹配我将在下一步恢复的内容呢?也许是一个愚蠢的问题,但找不到如何去做。
编辑
从 Aaron 的评论中,我现在明白了为什么我不能阻止使用MOVE
. 但是我应该用所有需要的文件组创建数据库,对吗?是这样的:
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
我认为主要问题是您认为首先创建数据库将允许您绕过
WITH MOVE
. 不是这种情况。如果目标文件路径与备份文件中包含的路径不匹配,则数据库(及其文件位置)的存在不会产生影响。
RESTORE
将查看备份文件中指定的文件位置,完全忽略现有数据库。这只能通过使用来覆盖WITH MOVE
。