Không thể khôi phục cơ sở dữ liệu đã bật TDE khi sử dụng MAXTRANSFERSIZE và CHECKSUM


10

Cập nhật : @AmitBanerjee - Trình quản lý chương trình cao cấp cho Nhóm sản phẩm Microsoft SQL Server xác nhận rằng MS sẽ xem xét vấn đề vì đây là một khiếm khuyết.

Có ai gặp phải vấn đề khôi phục sao lưu được thực hiện trên SQL Server 2016 khi bật TDE và sử dụng MAXTRANSFERSIZE> 65536 (trong trường hợp của tôi, tôi đã chọn 65537 để tôi có thể nén cơ sở dữ liệu TDE ) và CHECKSUM?

Dưới đây là một lời trách móc:

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

Sao chép toàn bộ chỉ sao lưu .. làm điều đó hai lần ..

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

Bây giờ làm một verifyonly...

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

Thông báo lỗi :

Msg 3241, Cấp 16, Bang 40, Dòng 11 Gia đình truyền thông trên thiết bị 'D: \ tạm thời ngắn hạn \ test_restore_KIN_test_restore_1.bak' được hình thành không chính xác. SQL Server không thể xử lý họ phương tiện truyền thông này. Msg 3013, Cấp 16, Tiểu bang 1, Dòng 11 XÁC NHẬN XÁC NHẬN đang chấm dứt bất thường.

Kết quả (1 = ON, 0 = OFF) với các kết hợp khác nhau:

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

Vấn đề xảy ra trên:

Microsoft SQL Server 2016 (RTM-CU1) (KB3164674) - 13.0.2149.0 (X64) Ngày 11 tháng 7 năm 2016 22:05:22 Bản quyền (c) Microsoft Corporation Enterprise Edition (64-bit) trên Windows Server 2012 R2 Standard 6.3 (Build 9600 :)

Câu trả lời:


6

Tôi đã có thể tái tạo vấn đề của bạn.

Thêm FORMATvào BACKUPlệnh đã giải quyết nó cho tôi.

Mặc dù tôi dường như không thể tìm thấy tài liệu cụ thể, nhưng theo ý kiến ​​của tôi thì điều này có liên quan đến thực tế là INITgiữ lại tiêu đề phương tiện hiện có trên bộ sao lưu trong khi FORMATtạo tiêu đề phương tiện mới.

Tôi vẫn đang nghiên cứu vấn đề này và nếu tôi tìm thấy thông tin bổ sung, tôi sẽ cập nhật câu trả lời này.


vâng, FORMATtiêu đề cũng sẽ ghi đè lên và nó không xảy ra khi sử dụng FORMAT. Tuy nhiên, đây là một bí ẩn tại sao tiêu đề sao lưu (hoặc toàn bộ bản sao lưu) bị hỏng khi sử dụng MAXTRANSFERSIZECHECKSUMcùng với INIT. Điều này không bao giờ xảy ra trên các phiên bản thấp hơn nhưng trong những phiên bản không có MAXTRANSFERSIZE. Cảm ơn câu trả lời của bạn. Sẽ giữ điều này mở nếu ai đó có thêm thông tin.
Kin Shah

3

Có vẻ như điều này có thể đã được giải quyết với KB 4032200:

Từ mục đó:

Triệu chứng

Giả sử rằng bạn bật Mã hóa dữ liệu trong suốt (TDE) cho cơ sở dữ liệu trong Microsoft SQL Server 2016. Bạn cố gắng sao lưu cơ sở dữ liệu bằng cách sử dụng BACKUP DATABASEcâu lệnh T-SQL có cả hai COMPRESSIONINITtùy chọn được chỉ định. Trong trường hợp này, bạn có thể nhận thấy rằng tệp sao lưu hiện có bị ghi đè bởi tệp sao lưu mới và tệp sao lưu mới không bị nén.

Nghị quyết

Sự cố này được khắc phục trong các bản cập nhật tích lũy sau cho SQL Server:


1

Đây có vẻ là vấn đề tương tự mà bài đăng blog bạn tham chiếu trong câu hỏi của bạn sau đó đã được cập nhật để đề cập đến:

Cập nhật ngày 6 tháng 4 năm 2017

Gần đây chúng tôi đã phát hiện ra một số vấn đề liên quan đến việc sử dụng TDE và nén sao lưu trong SQL Server 2016. Trong khi chúng tôi khắc phục chúng, đây là một số mẹo giúp bạn tránh gặp phải các vấn đề đã biết:

  • Hiện tại không nên sử dụng sao lưu sọc với TDE và nén sao lưu

  • Nếu cơ sở dữ liệu của bạn có tệp nhật ký ảo (VLF) lớn hơn 4GB thì không sử dụng nén sao lưu với TDE để sao lưu nhật ký của bạn. Nếu bạn không biết VLF là gì, hãy bắt đầu ở đây .

  • Tránh sử dụng VỚI INIT ngay bây giờ khi làm việc với TDE và nén sao lưu. Thay vào đó, bây giờ bạn có thể sử dụng VỚI FORMAT.

Kỹ thuật SQL đang nghiên cứu các bản sửa lỗi cho các vấn đề này trong SQL Server 2016. Chúng tôi sẽ cập nhật bài đăng trên blog này một lần nữa khi chúng tôi có thêm thông tin để chia sẻ.

Mặc dù lưu ý đó, bài viết trên blog đã không được cập nhật với bất kỳ thông tin nào kể từ đó.

Tuy nhiên, KB 4019893 cũng có thể giải quyết điều này:

Mặc dù thông báo lỗi được báo cáo trong bài viết KB đó khác với thông báo bạn đang báo cáo, các yếu tố đóng góp nghe có vẻ rất giống nhau. SQL Server 2016 SP1 CU3 trước tiên bao gồm sửa lỗi, như được thấy trong danh sách hotfix của nó . Tuy nhiên, đã có báo cáo rằng nó không giải quyết vấn đề trong mọi tình huống.

SQL Server 2016 SP1 CU4 cũng bao gồm một bản sửa lỗi (có lẽ được cập nhật) cho điều nàyKB 4019893 đã được cập nhật để hiển thị SP1 CU4 như phiên bản mà sự cố đã được khắc phục.

Thật không may, tôi có thể xác nhận từ kinh nghiệm của bản thân mình rằng ngay cả bản sửa lỗi trong SP1 CU4 cũng không giải quyết được hoàn toàn vấn đề đó. Tôi hiện có một cơ sở dữ liệu hỗ trợ TDE vẫn tạo ra các bản sao lưu bị hỏng liên tục ngay cả trên SP1 CU4 khi sử dụng COMPRESSION(thông qua MAXTRANSFERSIZE> 64 KB) và CHECKSUM. Tôi cũng có vài chục cơ sở dữ liệu khác TDE-bật trong môi trường này một cách nhất quán không tạo ra các bản sao lưu tham nhũng theo các cài đặt, bao gồm cả một trong đó là một biến thể của một trong đó có, với một sơ đồ gần giống nhưng dữ liệu nhỏ hơn. Điều này dường như cho thấy Microsoft thực sự đang sứt mẻ những tình huống có thể gây ra điều này, nhưng vẫn chưa giải quyết được tất cả.

Tôi chưa thử sử dụng FORMATđể khắc phục vấn đề này, như được tham khảo trong một câu trả lời khác và bài đăng trên blog SQLCAT , nhưng tôi sẽ cung cấp một bản cập nhật ở đây nếu tôi có thể thử nó và nó giải quyết vấn đề. Cơ sở dữ liệu tôi có sao chép này không may là khá lớn (~ 1 TB) và nằm trong cụm Phát triển / QA không có nhiều không gian lưu trữ có sẵn (ít nhất là ở quy mô đó), do đó, các biến thể thử nghiệm này đã được chứng minh là thách thức logic và tốn thời gian.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.