AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 158632
Accepted
Kin Shah
Kin Shah
Asked: 2016-12-20 14:35:11 +0800 CST2016-12-20 14:35:11 +0800 CST 2016-12-20 14:35:11 +0800 CST

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

  • 772

更新:@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) :)

sql-server restore
  • 3 3 个回答
  • 1511 Views

3 个回答

  • Voted
  1. Best Answer
    Scott Hodgin - Retired
    2016-12-21T05:06:29+08:002016-12-21T05:06:29+08:00

    我能够重现您的问题。

    添加FORMAT到BACKUP命令中为我解决了它。

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

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

    • 6
  2. Paul White
    2017-08-10T05:30:32+08:002017-08-10T05:30:32+08:00

    似乎这可能已通过 KB 4032200 解决:

    • 修复:在 SQL Server 2016 中启用 TDE 的数据库中使用 INIT 和 COMPRESSION 选项时无法压缩备份文件

    从那个条目:

    症状

    假设您在 Microsoft SQL Server 2016 中为数据库启用透明数据加密 (TDE)。您尝试使用同时指定了和选项的BACKUP DATABASET-SQL 语句备份数据库。在这种情况下,您可能会注意到现有的备份文件被新的备份文件覆盖,并且新的备份文件没有被压缩。COMPRESSIONINIT

    解析度

    此问题已在 SQL Server 的以下累积更新中得到修复:

    • SQL Server 2016 RTM 的累积更新 7
    • SQL Server 2016 SP1 的累积更新 4
    • 3
  3. Kevin M. Owen
    2017-08-18T19:55:12+08:002017-08-18T19:55:12+08:00

    这似乎与您在问题中引用的博客文章后来更新为引用的问题相同:

    2017 年 4 月 6 日更新

    我们最近发现了一些与 SQL Server 2016 中使用 TDE 和备份压缩相关的问题。虽然我们修复了这些问题,但这里有一些提示可以帮助您避免遇到这些已知问题:

    • 目前不建议使用带 TDE 和备份压缩的条带备份

    • 如果您的数据库具有大于 4GB 的虚拟日志文件 (VLF),则不要将备份压缩与 TDE 一起用于日志备份。如果您不知道 VLF 是什么,请从这里开始。

    • 在使用 TDE 和备份压缩时,暂时避免使用 WITH INIT。相反,现在您可以使用 WITH FORMAT。

    SQL 工程正在努力修复 SQL Server 2016 中的这些问题。一旦我们有更多信息要分享,我们将再次更新此博客文章。

    尽管有这样的说明,但自那以后,博客文章还没有更新任何进一步的信息。

    但是,KB 4019893也可以解决这个问题:

    • 修复:当您在 SQL Server 2016 中启用 TDE 的数据库上使用压缩和校验和进行备份时,还原失败

    尽管该知识库文章中报告的错误消息与您报告的错误消息不同,但促成因素听起来非常相似。SQL Server 2016 SP1 CU3 首先包含该修复程序,如其修复程序列表所示。然而,有报道称它并没有在所有情况下都解决这个问题。

    SQL Server 2016 SP1 CU4 还包括一个(可能已更新)对此的修复,并且KB 4019893已更新以将 SP1 CU4 显示为修复问题的版本。

    不幸的是,我可以根据自己的经验确认,即使 SP1 CU4 中的修复程序也不能完全解决该问题。我目前有一个启用 TDE 的数据库,即使在 SP1 CU4 上使用COMPRESSION(通过MAXTRANSFERSIZE> 64 KB)和CHECKSUM. 在这个环境中,我还有几十个其他启用 TDE 的数据库,它们在这些设置下始终不会产生损坏的备份,其中一个是它的变体,它具有几乎相同的架构但数据集更小。这似乎表明微软确实在解决可能导致这种情况的情况,但尚未解决所有问题。

    正如另一个答案和 SQLCAT博客文章中所引用的那样,我尚未尝试使用FORMAT来解决此问题,但如果我能够尝试并解决问题,我将在此处提供更新。不幸的是,我拥有的一个能够重现此问题的数据库相当大(~1 TB),并且驻留在没有太多额外存储空间可用的开发/质量检查集群中(至少在那个规模上),因此测试它的变体有事实证明,在后勤方面具有挑战性且耗时。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve