我对还原 2016 SQL Server 数据库的正确语法有疑问。
一个数据库 1 mdf 没问题。但我需要恢复一个包含 3 个 mdf 文件和 73 个 ndf 文件的数据库,然后应用 2 个差异备份。
RESTORE DATABASE [Database]
FROM DISK = N'E:\Data\Server_Database_20210213221000_full_1_of_2.bak',
DISK = N'E:\Data\Server_Database_20210213221000_full_2_of_3.bak'
DISK = N'E:\Data\Server_Database_20210213221000_full_3_of_3.bak'
WITH FILE = 1, REPLACE,
MOVE 'Database' TO 'E:\Data\Database.mdf',
MOVE 'FactPart00' TO 'E:\Data1\FactPart\FactDatePart00.ndf',
MOVE 'FactPart01' TO 'E:\Data1\FactPart\FactDatePart01.ndf',
MOVE 'FactPart02' TO 'E:\Data1\FactPart\FactDatePart02.ndf',
... all the way to 73
上面的部分有效,我的问题是现在如何恢复差异文件文件名
Server_Database_DIFF_20210214_220209.bak
要恢复差异,我还需要引用所有 ndf 文件或者只是恢复。我的语法应该是什么样的?我没有错误,因为我担心损坏数据库而没有运行它。
要恢复差异备份,请在此处查看官方文档:
https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-differential-database-backup-sql-server?view=sql-server-ver15#using-transact- sql
您必须使用 NORECOVERY 子句恢复完整备份。然后进行最后一次差异备份并恢复它。
像这样的东西:
如果在恢复完整备份文件时已经完成,则在恢复差异备份文件时无需再次指定 MOVE 子句
你不需要只应用最后一个差异
此处对其他评论和答案的小补充:
如果在生成完整备份和生成差异备份之间的时间跨度内将数据库文件添加到数据库,则在恢复差异备份时应指定 MOVE 选项(如果需要更改比较文件的位置备份的元数据中的内容)。
完整备份不知道该文件,因为它在生成完整备份时不存在,因此引用“不存在”的内容会给您一条错误消息。
关于拥有许多数据库文件,请注意 SSMS 有一个 GUI 选项,可以将所有数据文件移动到某个位置,并将所有日志文件移动到 som(其他)位置。即,更少的复制和粘贴/替换。在restore GUI中选择from device,修改两条路径,让它生成restore命令并在GUI中编写脚本来获取SQL命令。