Tidak dapat mengembalikan basis data yang diaktifkan TDE ketika MAXTRANSFERSIZE dan CHECKSUM digunakan

10

Pembaruan : @AmitBanerjee - Manajer Program Senior untuk Grup Produk Microsoft SQL Server mengonfirmasi bahwa MS akan memeriksa masalah ini karena itu adalah kerusakan.

Adakah yang mengalami masalah memulihkan cadangan yang diambil pada SQL Server 2016 dengan TDE diaktifkan dan menggunakan MAXTRANSFERSIZE> 65536 (dalam kasus saya, saya telah memilih 65537 sehingga saya dapat mengompres basis data TDE ) dan CHECKSUM?

Di bawah ini adalah 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

Ambil salinan lengkap hanya cadangan .. lakukan dua kali ..

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

Sekarang lakukan verifyonly...

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

Pesan eror :

Msg 3241, Level 16, Negara 40, Jalur 11 Keluarga media di perangkat 'D: \ temporary-short-term \ test_restore_KIN_test_restore_1.bak' salah terbentuk. SQL Server tidak dapat memproses keluarga media ini. Msg 3013, Level 16, Negara 1, Baris 11 VERIFIKASI DATABASE berakhir secara tidak normal.

Hasil (1 = ON, 0 = OFF) dengan kombinasi berbeda:

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

Masalahnya terjadi pada:

Microsoft SQL Server 2016 (RTM-CU1) (KB3164674) - 13.0.2149.0 (X64) 11 Jul 2016 22:05:22 Hak cipta (c) Edisi Microsoft Corporation Enterprise (64-bit) pada Windows Server 2012 R2 Standar 6.3 (Build 9600) :)

Kin Shah
sumber

Jawaban:

6

Saya bisa mereproduksi masalah Anda.

Menambahkan FORMATke BACKUPperintah dipecahkan itu untuk saya.

Meskipun saya tidak dapat menemukan dokumentasi yang konkret, menurut pendapat saya ini terkait dengan fakta bahwa INITmempertahankan tajuk media yang ada pada perangkat cadangan sementara FORMATmembuat tajuk media baru.

Saya masih meneliti masalah ini dan jika saya menemukan informasi tambahan, saya akan memperbarui jawaban ini.

Scott Hodgin
sumber
ya, FORMATheader akan menimpa juga dan itu tidak terjadi saat menggunakan FORMAT. Masih ini merupakan misteri mengapa header cadangan (atau cadangan secara keseluruhan) rusak saat menggunakan MAXTRANSFERSIZEdan CHECKSUMbersama dengan INIT. Ini tidak pernah terjadi pada versi yang lebih rendah tetapi pada mereka tidak ada MAXTRANSFERSIZE. Terima kasih atas jawaban anda. Ini akan tetap terbuka jika seseorang memiliki info lebih lanjut.
Kin Shah
3

Sepertinya ini mungkin telah diatasi dengan KB 4032200:

Dari entri itu:

Gejala

Asumsikan bahwa Anda mengaktifkan Enkripsi Data Transparan (TDE) untuk database di Microsoft SQL Server 2016. Anda mencoba untuk membuat cadangan database dengan menggunakan pernyataan BACKUP DATABASET-SQL yang memiliki keduanya COMPRESSIONdan INITopsi yang ditentukan. Dalam skenario ini, Anda mungkin memperhatikan bahwa file cadangan yang ada ditimpa oleh file cadangan baru, dan file cadangan baru tidak dikompresi.

Resolusi

Masalah ini diperbaiki pada pembaruan kumulatif berikut untuk SQL Server:

Paul White 9
sumber
1

Ini tampaknya berpotensi menjadi masalah yang sama dengan posting blog yang Anda rujuk dalam pertanyaan Anda kemudian diperbarui untuk merujuk ke:

Pembaruan 6 April 2017

Kami baru-baru ini menemukan beberapa masalah yang terkait dengan penggunaan TDE dan kompresi cadangan di SQL Server 2016. Sementara kami memperbaikinya, berikut adalah beberapa kiat untuk membantu Anda menghindari masalah yang diketahui:

  • Saat ini tidak disarankan untuk menggunakan cadangan bergaris dengan TDE dan kompresi cadangan

  • Jika database Anda memiliki file log virtual (VLFs) lebih besar dari 4GB maka jangan gunakan kompresi cadangan dengan TDE untuk cadangan log Anda. Jika Anda tidak tahu apa itu VLF, mulailah dari sini .

  • Hindari menggunakan DENGAN INIT untuk saat ini ketika bekerja dengan TDE dan kompresi cadangan. Sebaliknya, untuk saat ini Anda dapat menggunakan DENGAN FORMAT.

Rekayasa SQL sedang mengerjakan perbaikan untuk masalah ini di SQL Server 2016. Kami akan memperbarui posting blog ini sekali lagi setelah kami memiliki informasi lebih lanjut untuk dibagikan.

Meskipun demikian, postingan blog belum diperbarui dengan informasi lebih lanjut sejak itu.

Namun, KB 4019893 juga dapat mengatasi ini:

Meskipun pesan kesalahan yang dilaporkan dalam artikel KB itu berbeda dari yang Anda laporkan, faktor-faktor yang berkontribusi terdengar sangat mirip. SQL Server 2016 SP1 CU3 pertama kali menyertakan perbaikan, seperti terlihat dalam daftar perbaikan terbaru . Namun, ada laporan bahwa itu tidak menyelesaikan masalah di semua situasi.

SQL Server 2016 SP1 CU4 juga mencakup perbaikan (mungkin diperbarui) untuk ini , dan KB 4019893 sejak itu telah diperbarui untuk menunjukkan SP1 CU4 sebagai versi masalah yang diperbaiki.

Sayangnya, saya dapat mengkonfirmasi dari pengalaman saya sendiri bahwa bahkan perbaikan di SP1 CU4 tidak sepenuhnya menyelesaikan masalah itu. Saat ini saya memiliki satu basis data yang diaktifkan TDE yang masih menghasilkan cadangan yang korup secara konsisten bahkan pada SP1 CU4 saat menggunakan COMPRESSION(melalui MAXTRANSFERSIZE> 64 KB) dan CHECKSUM. Saya juga memiliki beberapa lusin basis data berkemampuan TDE lain dalam lingkungan ini yang secara konsisten tidak menghasilkan cadangan yang korup di bawah pengaturan itu, termasuk yang merupakan variasi dari yang ada, dengan skema yang hampir identik tetapi dengan dataset yang lebih kecil. Ini tampaknya menunjukkan bahwa Microsoft memang memotong skenario yang dapat menyebabkan ini, tetapi belum menyelesaikan semuanya.

Saya belum mencoba menggunakan FORMATuntuk mengatasi masalah ini, seperti yang dirujuk dalam jawaban lain dan posting blog SQLCAT , tetapi saya akan memberikan pembaruan di sini jika saya bisa mencobanya dan itu menyelesaikan masalah. Satu database yang saya miliki yang mereproduksi ini sayangnya agak besar (~ 1 TB), dan berada di cluster Pengembangan / QA yang tidak memiliki banyak ruang penyimpanan tambahan yang tersedia (setidaknya pada skala itu), jadi menguji variasi ini memiliki terbukti secara logistik menantang dan memakan waktu.

Kevin M. Owen
sumber
Masalah ini masih ada di SQL 2017.
swaroopa kothapally