4

我们有一个大型 SQL 数据库,我们在每晚备份中将其拆分为 4 个单独的 bak 文件,因此可以更轻松地将其发送到异地。我们使用此语句(数据库名称已更改)

BACKUP DATABASE [Data] TO
DISK = 'd:\back\data1.bak',
DISK = 'd:\back\data2.bak',
DISK = 'd:\back\data3.bak',
DISK = 'd:\back\data4.bak'
WITH  INIT, NOUNLOAD, NAME = 'Data backup',  NOSKIP ,  STATS = 10,  NOFORMAT

对于 bak 中的 mdf 和 ldf 文件,所有四个备份都具有相同的逻辑名称。

我希望能够将这四个备份恢复到服务器上的不同数据库中进行测试。我在这篇文章中找到了一个 t-sql 脚本,我认为它会这样做,但我不确定。有人可以帮忙吗?

我想我可以按如下方式调整和运行脚本:

RESTORE DATABASE Data_test FROM
DISK = 'd:\back\data1.bak',
DISK = 'd:\back\data2.bak',
DISK = 'd:\back\data3.bak',
DISK = 'd:\back\data4.bak'
WITH MOVE 'Prod_Data' TO 'D:\SQLDb\Data_Test1.mdf',
MOVE 'Prod_Data' TO 'D:\SQLDb\Data_Test2.ndf',
MOVE 'Prod_Data' TO 'D:\SQLDb\Data_Test3.ndf',
MOVE 'Prod_Data' TO 'D:\SQLDb\Data_Test4.ndf',
MOVE 'Prod_Log' TO 'C:\SQLtlogs\Data_test1.ldf'

你认为这行得通吗?这个测试数据库不会与恢复它的产品数据库冲突吗?任何帮助都会很棒,谢谢。

4

2 回答 2

3

好的,我实际上让它与 SSMS 的 GUI 一起工作。您所要做的就是选择任务,还原数据库,从设备中选择,然后添加单独的 bak 文件的所有四个文件,然后单击确定并使用覆盖进行还原,根据需要修改 mdf 和 ldf 的文件名,以便它们是对于测试数据库而不是生产。SSMS 知道这四个文件是同一媒体集的一部分,并将它们重新组合成 mdf 和 ldf 文件。看起来我毕竟不需要脚本。

于 2013-08-23T21:01:04.733 回答
2

我使用这个 TRANSACT-SQL 命令来完成您要求的几乎相同的事情。唯一的区别是我只是将每个逻辑文件移动到一个物理文件中。我的命令(修改为使用您的示例)如下所示:

RESTORE DATABASE Data_test FROM
DISK = 'd:\back\data1.bak',
DISK = 'd:\back\data2.bak',
DISK = 'd:\back\data3.bak',
DISK = 'd:\back\data4.bak'
WITH MOVE 'Prod_Data' TO 'D:\SQLDb\Data_Test1.mdf',
MOVE 'Prod_Log' TO 'C:\SQLtlogs\Data_test1.ldf'
于 2014-10-09T16:28:09.317 回答