Sql-Server

使用 MAXTRANSFERSIZE 和 CHECKSUM 時無法恢復啟用 TDE 的數據庫

  • April 11, 2020

更新@AmitBanerjee - Microsoft SQL Server 產品組的高級項目經理確認 MS 將調查該問題,因為它是一個缺陷。

MAXTRANSFERSIZE是否有人在啟用 TDE 並使用> 65536(在我的情況下,我選擇 65537 以便我可以壓縮 TDE 數據庫)的情況下恢復在 SQL Server 2016 上進行的備份時遇到問題CHECKSUM

下面是一個複製品:

--- create database 
create database test_restore
go
-- create table
create table test_kin (fname char(10))
go
-- Enable TDE 

use master
GO
CREATE CERTIFICATE test_restore WITH SUBJECT = 'test_restore_cert'
GO
SELECT name, pvt_key_encryption_type_desc, * FROM sys.certificates WHERE name = 'test_restore'
GO
use test_restore
go
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE test_restore
GO 
alter database test_restore set encryption ON

只備份完整副本.. 做兩次..

backup database test_restore 
to disk = 'D:\temporary-short-term\test_restore_KIN_test_restore_1.bak' -- change as per your location !!
with init, stats =10  -- overwrite ..using INIT !!
, maxtransfersize = 65537
, compression
,CHECKSUM

現在做一個verifyonly

restore verifyonly from disk = 'D:\temporary-short-term\test_restore_KIN_test_restore_1.bak'

錯誤資訊 :

消息 3241,級別 16,狀態 40,第 11 行設備“D:\temporary-short-term\test_restore_KIN_test_restore_1.bak”上的媒體系列格式不正確。SQL Server 無法處理此媒體系列。消息 3013,級別 16,狀態 1,第 11 行驗證數據庫異常終止。

不同組合的結果(1 = ON,0 = OFF):

+-------------------------+-------------+----------+--------+
| MAXTRANSFERSIZE (65537) | COMPRESSION | CHECKSUM | RESULT |
+-------------------------+-------------+----------+--------+
|                       1 |           1 |        1 | FAIL   |
|                       1 |           1 |        0 | PASS   |
|                       1 |           0 |        1 | FAIL   |
|                       0 |           0 |        0 | PASS   |
|                       0 |           1 |        1 | PASS   |
|                       0 |           1 |        0 | PASS   |
+-------------------------+-------------+----------+--------+

問題發生在:

Microsoft SQL Server 2016 (RTM-CU1) (KB3164674) - 13.0.2149.0 (X64) 2016 年 7 月 11 日 22:05:22 版權所有 (c) Microsoft Corporation Enterprise Edition (64-bit) o​​n Windows Server 2012 R2 Standard 6.3 (Build 9600) :)

我能夠重現您的問題。

添加FORMATBACKUP命令中為我解決了它。

雖然我似乎找不到具體的文件,但我認為這與INIT在備份集中保留現有媒體標頭同時FORMAT創建新媒體標頭的事實有關。

我仍在研究這個問題,如果我找到更多資訊,我會更新這個答案。

似乎這可能已通過 KB 4032200 解決:

從那個條目:

症狀

假設您在 Microsoft SQL Server 2016 中為數據庫啟用透明數據加密 (TDE)。您嘗試使用同時指定了和選項的**BACKUP DATABASET-SQL 語句備份數據庫。在這種情況下,您可能會注意到現有的備份文件被新的備份文件覆蓋,並且新的備份文件沒有被壓縮。COMPRESSION****INIT**

解決

此問題已在 SQL Server 的以下累積更新中得到修復:

引用自:https://dba.stackexchange.com/questions/158632