恢復沒有 FORMAT 但使用 INIT 的加密數據庫的 copy_only 備份失敗
我的任務是定期複製數據庫,每天兩次,我不應該破壞任何備份鏈,也不應該積累這些臨時備份。因此,我嘗試進行
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 和我)進行了一些離線討論並設法縮小了範圍:錯誤發生在以下情況:
- 您使用 TDE
- 備份被壓縮
- 您指定 COPY_ONLY
- 您指定 INIT
- 備份文件存在
揚聲器:
--The database has TDE --Backupfile doesn't exist at this stage BACKUP DATABASE db1Encrypted TO DISK = 'R:\db1Encrypted.bak' WITH INIT, COPY_ONLY, COMPRESSION, CHECKSUM --backup file 660 kb RESTORE VERIFYONLY FROM DISK = 'R:\db1Encrypted.bak' WITH CHECKSUM --OK --Backupfile now exists, below causes unreadable backup BACKUP DATABASE db1Encrypted TO DISK = 'R:\db1Encrypted.bak' WITH INIT, COPY_ONLY, COMPRESSION, CHECKSUM --backup file 3890 kb RESTORE VERIFYONLY FROM DISK = 'R:\db1Encrypted.bak' WITH CHECKSUM --Fails "The media family on device 'R:\db1Encrypted.bak' is incorrectly formed"