MAXTRANSFERSIZE ve CHECKSUM kullanıldığında TDE etkinleştirilmiş veritabanı geri yüklenemiyor


10

Güncelleştirme : @AmitBanerjee - Microsoft SQL Server Ürün Grubu Kıdemli Program Yöneticisi, MS'in bir kusur olduğu için soruna bakacağını doğruladı .

Herkes TDE etkin SQL Server 2016 alınan yedekleri geri yükleme ve MAXTRANSFERSIZE> 65536 kullanarak sorunla karşılaştı (benim durumumda, ben TDE veritabanını sıkıştırmak böylece 65537 seçtim ) ve CHECKSUM?

Aşağıda bir repro var:

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

Sadece tam kopya yedek al .. iki kere yap

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

Şimdi bir verifyonly...

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

Hata mesajı :

Msg 3241, Seviye 16, Durum 40, Satır 11 'D: \ geçici-kısa süreli \ test_restore_KIN_test_restore_1.bak' cihazındaki medya ailesi yanlış oluşturulmuş. SQL Server bu medya ailesini işleyemiyor. Msg 3013, Seviye 16, Durum 1, Satır 11 VERİTABANI DOĞRULA anormal olarak sona eriyor.

Farklı kombinasyonlara sahip sonuçlar (1 = AÇIK, 0 = KAPALI):

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

Sorun şu şekilde olur:

Microsoft SQL Server 2016 (RTM-CU1) (KB3164674) - 13.0.2149.0 (X64) 11 Tem 2016 22:05:22 Telif Hakkı (c) Windows Server 2012 R2 Standard 6.3 (Derleme 9600) üzerinde Microsoft Corporation Enterprise Edition (64 bit) :)

Yanıtlar:


6

Sorununuzu yeniden üretebildim.

Ekleme FORMATiçin BACKUPkomuta benim için çözüldü.

Somut belgeler INITbulamasam da FORMAT, bunun yeni bir medya başlığı oluştururken mevcut medya başlığını yedekleme kümesinde tutmasıyla ilgili olduğunu düşünüyorum.

Hala bu sorunu araştırıyorum ve ek bilgi bulursam bu yanıtı güncelleyeceğim.


evet, FORMATüstbilginin üzerine de yazılır ve kullanılırken gerçekleşmez FORMAT. Yine de bu, INIT ile birlikte MAXTRANSFERSIZEve CHECKSUMbirlikte kullanıldığında yedekleme başlığının (veya bir bütün olarak yedeklemenin) bozulmasının neden olduğu bir gizemdir . Bu daha düşük versiyonlarda hiç olmadı, ama bu versiyonlarda hiç yoktu MAXTRANSFERSIZE. Cevabınız için teşekkürler. Birisi daha fazla bilgiye sahipse bunu açık tutacaktır.
Kin Shah

3

KB 4032200 ile ele alınmış gibi görünüyor:

Bu girişten:

belirtiler

Microsoft SQL Server 2016'da bir veritabanı için Saydam Veri Şifreleme'yi (TDE) etkinleştirdiğinizi varsayalım . BACKUP DATABASEHem COMPRESSIONve INITseçeneği belirtilen T-SQL deyimini kullanarak veritabanını yedeklemeye çalışın . Bu senaryoda, yeni yedekleme dosyası tarafından varolan yedekleme dosyasının üzerine yazıldığını ve yeni yedekleme dosyasının sıkıştırılmadığını fark edebilirsiniz.

çözüm

Bu sorun, SQL Server için aşağıdaki toplu güncelleştirmelerde giderilmiştir:


1

Bu, potansiyel olarak, sorunuzda referansta bulunduğunuz blog gönderisinin daha sonra başvurmak üzere güncellendiği aynı sorun olarak görünecektir :

Güncelleme 6 Nisan 2017

Kısa bir süre önce SQL Server 2016'da TDE kullanımı ve yedekleme sıkıştırmasıyla ilgili bazı sorunlar keşfettik. Onları giderirken, bilinen bu sorunların önüne geçmenize yardımcı olacak bazı ipuçları:

  • Şu anda TDE ve yedek sıkıştırmalı çizgili yedeklemelerin kullanılması önerilmez

  • Veritabanınızda 4 GB'den büyük sanal günlük dosyaları (VLF) varsa, günlük yedeklemeleriniz için TDE ile yedekleme sıkıştırması kullanmayın. Bir VLF'nin ne olduğunu bilmiyorsanız, buradan başlayın .

  • TDE ve yedekleme sıkıştırmasıyla çalışırken şimdilik IN INIT kullanmaktan kaçının. Bunun yerine şimdilik FORMAT ile kullanabilirsiniz.

SQL mühendisliği, SQL Server 2016'da bu sorunlar için düzeltmeler üzerinde çalışıyor. Paylaşacak daha fazla bilgiye sahip olduktan sonra bu blog gönderisini bir kez daha güncelleyeceğiz.

Bu nota rağmen, blog yazısı o zamandan beri başka bilgi ile güncellenmedi.

Ancak, KB 4019893 ayrıca şu sorunu da ele alabilir:

Bu KB makalesinde bildirilen hata iletisi bildirdiğinizden farklı olsa da, katkıda bulunan faktörler çok benzer. SQL Server 2016 SP1 CU3, düzeltme listesinde görüldüğü gibi ilk düzeltmeyi ekledi . Ancak, sorunun her durumda çözülmediğine dair raporlar vardır.

SQL Server 2016 SP1 CU4 de bunun için (muhtemelen güncellenmiş) bir düzeltme içerir ve KB 4019893 , o zamandan beri sorunun düzeltildiği sürüm olarak SP1 CU4'ü gösterecek şekilde güncellenmiştir.

Ne yazık ki, kendi deneyimlerimden, SP1 CU4'teki düzeltmenin bile bu sorunu tam olarak çözmediğini doğrulayabilirim. Şu anda COMPRESSION( MAXTRANSFERSIZE> 64 KB) ve kullanırken SP1 CU4 üzerinde bile sürekli bozuk yedekler üreten bir TDE özellikli veritabanı var CHECKSUM. Ben de sürekli bu ortamda birkaç düzine diğer TDE özellikli veritabanlarını sahip olmayan bir neredeyse özdeş şema ama daha küçük veri kümesi ile yapar birinin bir varyasyonu da dahil olmak üzere bu ayarları altında bozuk yedekleri üretmek. Bu, Microsoft'un buna neden olabilecek senaryolarda gerçekten parçalandığını, ancak hepsini henüz çözmediğini gösteriyor gibi görünüyor.

Ben FORMATbaşka bir cevap ve SQLCAT blog yazı referans olarak, bu soruna geçici bir çözüm bulmak için kullanarak henüz denemedim , ama ben bunu denemek mümkün ve burada sorunu giderir eğer burada bir güncelleme sağlayacaktır. Bunu yeniden üreten tek veritabanı maalesef oldukça büyük (~ 1 TB) ve fazladan fazla depolama alanı (en azından bu ölçekte) bulunmayan bir Geliştirme / KG kümesinde bulunuyor, bu yüzden test varyasyonları var lojistik açıdan zorlayıcı ve zaman alıcı olduğu kanıtlanmıştır.


Bu sorun SQL 2017'de hala var.
swaroopa kothapally
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.