使用 MAXTRANSFERSIZE 和 CHECKSUM 时无法恢复启用 TDE 的数据库

Kin*_*hah 10 sql-server restore transparent-data-encryption sql-server-2016

更新@AmitBanerjee - Microsoft SQL Server 产品组的高级项目经理确认 MS 将调查该问题,因为它是一个缺陷。

有没有人遇到过在启用 TDE 并使用MAXTRANSFERSIZE> 65536(在我的情况下,我选择 65537 以便我可以压缩 TDE 数据库)的情况下恢复在 SQL Server 2016 上进行的备份的问题CHECKSUM

下面是一个repro:

--- 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
Run Code Online (Sandbox Code Playgroud)

仅进行完整副本备份.. 做两次..

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
Run Code Online (Sandbox Code Playgroud)

现在做一个verifyonly...

restore verifyonly from disk = 'D:\temporary-short-term\test_restore_KIN_test_restore_1.bak'
Run Code Online (Sandbox Code Playgroud)

错误信息 :

消息 3241,级别 16,状态 40,第 11 行 设备“D:\temporary-short-term\test_restore_KIN_test_restore_1.bak”上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。消息 3013,级别 16,状态 1,第 11 行 VERIFY DATABASE 异常终止。

不同组合的结果(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   |
+-------------------------+-------------+----------+--------+
Run Code Online (Sandbox Code Playgroud)

问题发生在:

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

Sco*_*red 6

我能够重现您的问题。

添加FORMATBACKUP命令为我解决了它。

虽然我似乎找不到具体的文档,但我认为这与INITFORMAT创建新媒体标头时在备份集上保留现有媒体标头的事实有关。

我仍在研究这个问题,如果我找到更多信息,我会更新这个答案。