我的任务是定期复制数据库,每天两次,我不应该破坏任何备份链,也不应该积累这些临时备份。因此,我尝试进行copy_only
备份init
以覆盖单个备份文件。
我的数据库使用 TDE 加密。
我backup compression
在服务器级别使用,“备份压缩默认值”在我的 sys.configurations 中为 1。我没有with compression
在我的命令中使用显式选项。
这是我完整的@@version:
Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64) Sep 23 2020 16:03:08 版权所有 (C) 2019 Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Datacenter 10.0 (Build 14393) :)(管理程序)
我的问题是下面的这个错误:
消息 3241,级别 16,状态 40,第 8 行设备“W:\SQL_backup\copy_only\billing_prod2_test.bak”上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。消息 3013,级别 16,状态 1,第 8 行 RESTORE DATABASE 异常终止。
这是我执行的完整代码:
backup database billing_prod2
to disk = 'W:\SQL_backup\copy_only\billing_prod2_test.bak'
with init, copy_only--, format;
go
restore database billing_1
from disk = 'W:\SQL_backup\copy_only\billing_prod2_test.bak'
with move 'billing_prod2' to 'E:\SQL_data\billing_1.mdf',
move 'billing_prod2_log' to 'E:\SQL_data\billing_1_log.ldf',
replace
第一次执行时没有错误,完整备份的大小约为35Mb,并且可以完美恢复。
第二次备份执行没有错误,但奇怪的是大小为 260Mb。这是我在磁盘上看到的大小,并且在输出中写入了相同的大小,restore headeronly
它仍然可以毫无错误地执行。但是当我这样做时restore database
,就会出现上面提到的错误。
我尝试使用另一个数据库和另一个磁盘执行相同的代码来保存备份,但结果始终相同:第一次工作,第二次文件被覆盖但大小不同,不仅仅是双倍大小,它几乎是初始大小的 10 倍。restore headeronly
永远不会失败,并且总是只报告备份文件中的一个文件,但大小是多倍的并且restore database
失败了。
只有当我添加format
选项时,备份的大小才变得正常并且恢复成功。
我的问题是:在这种情况下,为什么我应该在备份中使用格式才能恢复?
这确实是 SQL Server 中的一个错误。我们(@sepupic 和我)进行了一些离线讨论并设法缩小了范围:错误发生在以下情况:
复制: