Não é possível restaurar o banco de dados habilitado para TDE quando MAXTRANSFERSIZE e CHECKSUM são usados

10

Atualização : @AmitBanerjee - Gerente de Programa Sênior do Grupo de Produtos Microsoft SQL Server confirmou que a MS analisará o problema por ser um defeito.

Alguém encontrou um problema ao restaurar backups feitos no SQL Server 2016 com o TDE ativado e usando MAXTRANSFERSIZE> 65536 (no meu caso, eu escolhi 65537 para compactar o banco de dados TDE ) e CHECKSUM?

Abaixo está uma reprodução:

--- 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

Faça backup completo da cópia completa .. faça-o duas vezes ..

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

Agora faça um verifyonly...

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

Mensagem de erro :

Mensagem 3241, nível 16, estado 40, linha 11 A família de mídia no dispositivo 'D: \ temporário-curto-prazo \ test_restore_KIN_test_restore_1.bak' está formada incorretamente. O SQL Server não pode processar esta família de mídia. A mensagem 3013, nível 16, estado 1, linha 11 VERIFY DATABASE está sendo finalizada de maneira anormal.

Resultados (1 = ON, 0 = OFF) com diferentes combinações:

+-------------------------+-------------+----------+--------+
| 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   |
+-------------------------+-------------+----------+--------+

O problema ocorre em:

Microsoft SQL Server 2016 (RTM-CU1) (KB3164674) - 13.0.2149.0 (X64) 11 de julho de 2016 22:05:22 Copyright (c) Microsoft Corporation Enterprise Edition (64 bits) no Windows Server 2012 R2 Standard 6.3 (Build 9600 :)

Kin Shah
fonte

Respostas:

6

Consegui reproduzir o seu problema.

Adicionar FORMATao BACKUPcomando resolveu isso para mim.

Embora eu não consiga encontrar documentação concreta, é minha opinião que isso esteja relacionado ao fato de INITmanter o cabeçalho de mídia existente no conjunto de backup enquanto FORMATcria um novo cabeçalho de mídia.

Ainda estou pesquisando esse problema e, se encontrar informações adicionais, atualizarei esta resposta.

Scott Hodgin
fonte
sim, o FORMATcabeçalho também sobrescreverá e isso não acontece quando o uso FORMAT. Ainda assim, é um mistério o motivo pelo qual o cabeçalho do backup (ou o backup como um todo) é corrompido ao usar MAXTRANSFERSIZEe CHECKSUMjunto com o INIT. Isso nunca aconteceu nas versões inferiores, mas naquelas não havia MAXTRANSFERSIZE. Obrigado pela sua resposta. Manterá isso aberto se alguém tiver mais informações.
Kin Shah
3

Parece que isso pode ter sido resolvido com o KB 4032200:

A partir dessa entrada:

Sintomas

Suponha que você habilite a TDE (criptografia de dados transparente) para um banco de dados no Microsoft SQL Server 2016. Tente fazer backup do banco de dados usando a BACKUP DATABASEinstrução T-SQL que possui a opção COMPRESSIONe INITespecificadas. Nesse cenário, você pode perceber que o arquivo de backup existente é substituído pelo novo arquivo de backup e o novo arquivo de backup não está compactado.

Resolução

Esse problema foi corrigido nas seguintes atualizações cumulativas para o SQL Server:

Paul White 9
fonte
1

Parece ser o mesmo problema em que a postagem do blog que você mencionou na sua pergunta foi atualizada posteriormente para se referir a:

Atualização 6 de abril de 2017

Recentemente, descobrimos alguns problemas relacionados ao uso da TDE e à compactação de backup no SQL Server 2016. Enquanto os corrigimos, aqui estão algumas dicas para ajudá-lo a evitar os problemas conhecidos:

  • Atualmente, não é aconselhável usar backups distribuídos com TDE e compactação de backup

  • Se o seu banco de dados tiver arquivos de log virtual (VLFs) maiores que 4 GB, não use a compactação de backup com o TDE para seus backups de log. Se você não sabe o que é um VLF, comece aqui .

  • Evite usar WITH INIT por enquanto ao trabalhar com TDE e compactação de backup. Em vez disso, por enquanto você pode usar WITH FORMAT.

A engenharia do SQL está trabalhando nas correções para esses problemas no SQL Server 2016. Atualizaremos esta postagem no blog novamente quando tivermos mais informações para compartilhar.

Apesar dessa nota, a postagem do blog não foi atualizada com mais informações desde então.

No entanto, o KB 4019893 também pode solucionar isso:

Embora a mensagem de erro relatada nesse artigo da Base de Dados seja diferente da que você está relatando, os fatores contribuintes parecem muito semelhantes. O SQL Server 2016 SP1 CU3 incluiu primeiro a correção, como visto em sua lista de hotfix . No entanto, houve relatos de que ele não resolveu o problema em todas as situações.

O SQL Server 2016 SP1 CU4 também inclui uma correção (presumivelmente atualizada) para isso , e o KB 4019893 foi atualizado para mostrar o SP1 CU4 como a versão em que o problema foi corrigido.

Infelizmente, posso confirmar por minha própria experiência que mesmo a correção no SP1 CU4 não resolve completamente esse problema. Atualmente, tenho um banco de dados habilitado para TDE que ainda produz backups corrompidos consistentemente, mesmo no SP1 CU4 ao usar COMPRESSION(via MAXTRANSFERSIZE> 64 KB) e CHECKSUM. Também tenho várias dezenas de outros bancos de dados habilitados para TDE neste ambiente que consistentemente não produzem backups corrompidos nessas configurações, incluindo um que é uma variação do que ocorre, com um esquema quase idêntico, mas com um conjunto de dados menor. Isso parece indicar que a Microsoft está realmente esquecendo os cenários que podem causar isso, mas ainda não resolveu todos eles.

Ainda não tentei usá-lo FORMATpara solucionar esse problema, conforme mencionado em outra resposta e na postagem do blog SQLCAT , mas fornecerei uma atualização aqui se puder tentar e resolver o problema. Infelizmente, o único banco de dados que eu reproduz isso é bastante grande (~ 1 TB) e reside em um cluster de Desenvolvimento / QA que não possui muito espaço de armazenamento extra disponível (pelo menos nessa escala), portanto, testar variações disso provado ser logisticamente desafiador e demorado.

Kevin M. Owen
fonte
Esse problema ainda existe no SQL 2017.
swaroopa kothapally