Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2014 :Enkripsi cadangan asli

Sebuah fitur baru di SQL Server 2014 yang banyak dari Anda belum pernah mendengarnya sampai diumumkan minggu ini di PASS Summit adalah enkripsi cadangan asli dalam Edisi Standar, Intelijen Bisnis dan Perusahaan (maaf, Web dan Express tidak didukung). Ini adalah sesuatu yang telah lama ditawarkan oleh vendor pihak ketiga, dan akhirnya masuk ke dalam produk, mendukung empat algoritma enkripsi:AES 128, AES 192, AES 256, dan Triple DES (3DES).

Jika saat ini Anda menggunakan Enkripsi Data Transparan semata-mata untuk tujuan memiliki data terenkripsi di file cadangan Anda, ini bisa menjadi cara untuk bermigrasi dari teknik itu dan memiliki cadangan terenkripsi tanpa hit yang ditempatkan TDE di sistem langsung Anda. Jika saat ini Anda menggunakan alat pihak ketiga untuk pencadangan terenkripsi, Anda harus membandingkannya dengan fungsionalitas dan kinerja pencadangan terenkripsi asli.

P.S. Anda dapat mengunduh CTP2 sekarang juga.

Saya tidak ingin membandingkan dengan produk pihak ketiga – saya yakin semuanya bekerja dengan baik, dan mungkin memiliki fitur tambahan yang bahkan belum saya pikirkan. Saya hanya ingin menguji jenis pukulan apa yang akan diambil oleh algoritma yang berbeda pada pencadangan penuh, dari dan ke disk spinny tradisional (RAID 1) dan solid state drive, dan dengan dan tanpa kompresi asli.

Jadi, saya mengunduh file data AdventureWorks2012, membuat dua salinan, menamainya awSSD.mdf dan awHDD.mdf , dan menempatkan satu di drive RAID 1 (D:\) dan satu di drive SSD (E:\). Kemudian saya lampirkan keduanya dengan FOR ATTACH_REBUILD_LOG , setel ke FULL pemulihan, mengubah pengaturan pertumbuhan otomatis default, dan mengatur lokasi default untuk file log di antaranya (karena ini adalah satu-satunya cara yang saya ketahui untuk menentukan lokasi file log yang dibuat ulang):

GUNAKAN [master];GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\CTP2_Data';GO CREATE DATABASE awHDD ON (nama file='D:\CTP2_Data\awHDD.mdf') UNTUK ATTACH_REBUILD_LOG; ALTER DATABASE awHDD SET RECOVERY FULL;ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorks2012_Log', FILEGROWTH =512000 FILEGROWTH); , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data';GO CREATE DATABASE awSSD ON (filename='E:\CTP2_Data\awSSD.mdf') UNTUK ATTACH_REBUILD_LOG; ALTER DATABASE awSSD SET RECOVERY FULL;ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorks2012_Log', FILEGROWTH =512000KB);

Selanjutnya, saya memperbesarnya menggunakan skrip ini dari Jonathan Kehayias (sehingga database dan log akan cukup besar untuk bermakna). Ini membutuhkan waktu sekitar 4 menit per database pada HDD dan SSD.

Pada saat itu, EXEC sp_helpfile; menghasilkan yang berikut untuk setiap database:

nama fileid ukuran nama file ----------------------- ------ -------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Sekarang, beberapa hal tentang fitur ini sebelum kita benar-benar dapat mulai melakukan pencadangan terenkripsi. Anda harus memiliki sertifikat (atau kunci asimetris) untuk menggunakan enkripsi, dan ini akan memerlukan kunci utama. Saya memilih sertifikat, dan membuatnya sebagai berikut:

GUNAKAN master;GOCREATE MASTER KEY ENCRYPTION OLEH PASSWORD ='p@ssw0rd';GOOPEN MASTER KEY DEKRIPSI OLEH PASSWORD ='p@ssw0rd';GOCREATE CERTIFICATE TestCert WITH SUBJECT ='GO
 Anda juga mendapatkan peringatan jika mencoba membuat cadangan terenkripsi menggunakan sertifikat yang belum dicadangkan:

Peringatan:Sertifikat yang digunakan untuk mengenkripsi kunci enkripsi database belum dicadangkan. Anda harus segera mencadangkan sertifikat dan kunci pribadi yang terkait dengan sertifikat. Jika sertifikat menjadi tidak tersedia atau jika Anda harus memulihkan atau melampirkan database di server lain, Anda harus memiliki cadangan sertifikat dan kunci pribadi atau Anda tidak akan dapat membuka database.

Dalam kasus saya, saya hanya dapat mencadangkan sertifikat dan kunci master, seperti ini:

BACKUP CERTIFICATE TestCert TO FILE ='C:\temp\TestCert.cert' WITH PRIVATE KEY ( FILE ='C:\temp\TestCert.key', ENCRYPTION BY PASSWORD ='p@ssw0rd' ); CADANGAN KUNCI MASTER KE FILE ='C:\temp\MasterKey.key' ENKRIPSI OLEH PASSWORD ='p@ssw0rd';

Sebenarnya, mencadangkan kunci master tidak diperlukan untuk melakukan pencadangan terenkripsi (atau bahkan untuk menghindari peringatan), tetapi Anda tetap harus mencadangkannya. Dan Anda mungkin ingin menggunakan kata sandi yang lebih kuat daripada p@ssw0rd , simpan di tempat lain selain drive C:pada mesin yang sama, dll. Terakhir, Anda harus memperhatikan bahwa jika Anda mengenkripsi cadangan Anda dan Anda tidak mengambil semua tindakan pencegahan yang tepat, cadangan tersebut mungkin tidak berguna jika terjadi bencana . Ini bukan fitur yang harus Anda aktifkan begitu saja tanpa ketekunan dan pengujian yang cukup.

Dengan semua itu, saya bisa melanjutkan pengujian. Sistem ini hanya memiliki satu disk berbasis piringan dan satu SSD, jadi saya tidak dapat menguji SSD -> SSD atau HDD berbeda -> HDD berbeda; hanya membuat cadangan dari satu ke yang lain, atau ke drive yang sama. Sintaks dasar untuk membuat cadangan dengan enkripsi adalah:

BACKUP DATABASE ... DENGAN ENKRIPSI (ALGORITMA =, SERVER CERTIFICATE =);

Dan empat kemungkinan nilai untuk <algorithm> adalah AES_128 , AES_192 , AES_256 dan TRIPLE_DES_3KEY .

Jadi, selanjutnya, saya membuat skrip untuk menjalankan pencadangan untuk membandingkan kinerja dan ukuran berbagai kombinasi – empat algoritme enkripsi yang berbeda (dan tanpa enkripsi), dengan dan tanpa kompresi, dari mana data berasal (HDD atau SSD) dan dari mana data dicadangkan ke (HDD atau SSD). Itu 40 backup yang berbeda, dan skrip yang saya gunakan untuk membuatnya terlihat seperti ini:

DECLARE @sql NVARCHAR(MAX) =N'';;DENGAN s(s) AS (SELECT 1 UNION ALL SELECT 2),m AS (SELECT m FROM (VALUES('AES_128'),('AES_192'),('AES_256'),('TRIPLE_DES_3KEY'),(NULL )) AS m(m)),c AS (PILIH c FROM (VALUES('NO_COMPRESSION'),('COMPRESSION')) AS c(c)),d AS (SELECT d,t FROM (VALUES('D' ,'HDD'),('E','SSD')) AS d(d,t))SELECT @sql +=N'BACKUP DATABASE aw' + CASE s WHEN 1 THEN 'HDD' ELSE 'SSD' END + ' TO DISK =''' + d + ':\backup\' + n + '.bak'' WITH INIT, ' + c + ',' + COALESCE(' ENCRYPTION (ALGORITMA =' + m + ', SERVER CERTIFICATE =TestCert),', '') + ' NAMA =''' + n + ''';' FROM ( SELECT *, n ='test' + CONVERT(VARCHAR(8000), KANAN('0' + RTRIM(r),2)) + '-' + COALESCE(m,'NO_ENCRYPTION') + '-' + KASUS KETIKA r <11 MAKA 'HDD' ELSE 'SSD' END + '-to-' + t + '-' + c FROM ( SELECT *, r =ROW_NUMBER() OVER (PARTISI OLEH d.d ORDER OLEH s.s,m.m,c.c ) DARI s CROSS JOIN m CROSS JOIN c CROSS JOIN d ) SEBAGAI x) SEBAGAI ORDER OLEH r; --EXEC sp_executesql @sql;--GO 10 SELECT CONVERT(XML, @sql);

Terlihat sangat rumit, tetapi sebenarnya hanya menghasilkan 40 BACKUP DATABASE string. Saya memilih sebagai XML sehingga, ketika Anda mengklik hasil di grid, Anda dapat melihat seluruh output – alih-alih apa PRINT atau memilih output ke kisi/teks akan membatasi Anda. Output dalam hal ini di bawah ini (klik untuk menampilkan/menyembunyikan):

BACKUP DATABASE awHDD TO DISK ='D:\backup\test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD TO DISK ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test03-AES_128-HDD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test03-AES_128-HDD-to-HDD-COMPRESSION'; CADANGAN DATABASE awHDD TO DISK ='E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSIO N.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test03-AES_128-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test04 -AES_128-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-to-SSD-NO_COMPRESSIONBASE';awUP DATA KOMPRESI'; DISK ='D:\backup\test04-AES_128-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-to- HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test05-AES_192-HDD-to-HDD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_192 , SERVER CERTIFICATE =TestCert) , NAME ='test05-AES_192-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION ( ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test06-AES_192-HDD-to-HDD-NO_COMPSION. bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test -HDD-to-HDD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test07-AES_256-HDD-to-HDD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test07-AES_256-HDD-to-SSD- COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\te st08-AES_256-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test08-AES_256-HDD-to-SSD-NO_COMPRESSION'; TO DISK ='D:\backup\test08-AES_256-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test08-AES_256-HDD-to -HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY), =SERVER TestCERTIFICATE ='test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI =(ALGORITMA =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test10-TRIPLE_DES_3KEY-HDD-to-COMPSSD-NO .bak' DENGAN INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD KE DISK TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-toaw-HDD DISKNO-ke-COMPHDD TOKUPHDD ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup \test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test12- NO_ENCRYPTION-S SD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test13-AES_128-SSD-to -HDD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\ backup\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test14-AES_128-SSDES -to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITMA =AES_128, SERVER CERTIFICATE) , NAMA ='test14-AES_128-SSD-to-H DD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_192, SERVER CERTIFICATE =TestCert), NAMA 'test15-AES_192-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITMA =AES_192 , SERVER CERTIFICATE =TestCert), NAME ='test15-AES_192-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test16-AES_192-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test16-AES to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test16-AES_192-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE =awSSD TO DISD \backup\test17-AES_256-SSD-to-HDD-COMPRE SSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITMA =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test17 -AES_256-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD DISK ='E:\backup\test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test18-AES_256-SSD-to- SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE), NAME =TestCert 'test18-AES_256-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEYLE_DES_3 , SERVER CER TIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION.bak' DENGAN INIT, KOMPRESI, ENKRIPSI (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION'; BACKUP DATABASE awSSD TO DISK ='E:\backup_test20-TRIPRESSION'; SSD-NO_COMPRESSION.bak' DENGAN INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_COMPRESSION';backup' =BACKUP DATABASE \test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to pra> 

Saya tidak perlu melakukan sesuatu yang khusus untuk mengatur waktu ini, karena saya dapat menarik semua statistik yang relevan dari database msdb setelah selesai (satu-satunya downside adalah bahwa durasinya hanya diukur dengan perincian detik, kecuali saya ingin untuk mengurai output secara manual). Jadi saya membatalkan komentar EXEC sp_executesql dan GO baris (saya ingin menjalankan setiap pencadangan 10 kali untuk mendapatkan rata-rata, mengesampingkan anomali, dll.), tekan F5, dan mulai mengerjakan salah satu sesi saya untuk PASS Summit.

Ketika saya kembali, saya memeriksa tabel msdb untuk mendapatkan ukuran / durasi untuk setiap cadangan. Permintaan ini cukup sederhana:

;DENGAN x AS( SELECT name, natural_size =backup_size/1024/1024.0, compress_size =compress_backup_size/1024/1024.0, durasi =1.0*DATEDIFF(SECOND, backup_start_date, backup_finish_date) DARI msdb.dbo.backupset WHERE name LIKE 'test %')PILIH nama, [natural_size] =MAX(natural_size), [compressed_size] =MAX(compressed_size), [min_duration] =MIN(duration), [max_duration] =MAX(duration), [avg_duration] =AVG(duration) FROM x GROUP BY nameORDER BY name;

Ini akan memberi saya data yang saya butuhkan untuk membuat beberapa grafik cantik.

Dampak pada Ukuran

Bergantung pada pengalaman Anda dengan enkripsi secara umum, Anda mungkin akan terkejut atau tidak bahwa mengenkripsi cadangan basis data memiliki dampak yang sangat kecil pada ukuran keseluruhannya. Cara kerjanya berada di luar cakupan posting ini, pasti; penjelasan sederhananya adalah – setidaknya dengan enkripsi AES – kompresi tidak terlalu efektif pada sebagian besar output karena pada dasarnya adalah omong kosong acak.

Hasil akhirnya adalah grafik ini tidak terlalu menarik. Ukuran terkompresi dan non-kompresi dari cadangan asli terhadap empat metode enkripsi yang berbeda:


Ukuran, dalam MB, cadangan dengan dan tanpa enkripsi

Seperti yang Anda lihat, hampir tidak ada dampak pada ukuran database – sekitar 0,03% peningkatan ukuran untuk cadangan yang tidak terkompresi, dan tambahan 0,04% untuk cadangan terkompresi.

Dampak pada Performa

Meskipun enkripsi memiliki dampak yang tidak berarti pada ukuran, hal itu melakukannya mempengaruhi kecepatan backup. Tetapi dalam beberapa kasus, tidak seperti yang Anda pikirkan. Berikut adalah ukuran keseluruhan runtime rata-rata untuk setiap pendekatan:


Durasi rata-rata, dalam detik, dari berbagai cadangan

Saya benar-benar mengharapkan enkripsi untuk selalu menyebabkan hit kinerja, dan Anda harus menguji di lingkungan Anda untuk melihat apakah hasil Anda berbeda dari saya. Saya akan kembali dan memperbarui ini dengan bagan baru yang menunjukkan kasus tertentu yang mengejutkan saya, dan menghapus beberapa nilai outlier untuk memastikan hasilnya benar-benar representatif.

Peringatan

Satu catatan penting:Anda tidak dapat menambahkan cadangan terenkripsi. Jika Anda membuat file cadangan terenkripsi menggunakan WITH INIT , lalu coba tambahkan cadangan terenkripsi lain ke file yang sama, Anda akan menerima kesalahan ini:

Pesan 3095, Level 16, Status 1, Baris 11
Pencadangan tidak dapat dilakukan karena 'ENCRYPTION' diminta setelah media diformat dengan struktur yang tidak kompatibel. Untuk menambahkan ke kumpulan media ini, hilangkan 'ENCRYPTION' atau buat kumpulan media baru dengan menggunakan WITH FORMAT dalam pernyataan CADANGAN Anda. Jika Anda menggunakan WITH FORMAT pada set media yang ada, semua set cadangannya akan ditimpa.
Msg 3013, Level 16, State 1, Line 11
BACKUP DATABASE berhenti secara tidak normal.

Anda dapat, secara membingungkan, menambahkan non -cadangan terenkripsi ketika file awal dienkripsi. Ini bukan maksudnya, dan merupakan bug yang saya laporkan di Connect (#805220, tetapi saat ini ditandai sebagai pribadi); mudah-mudahan mereka akan mengatasi ini sebelum RTM.

Sementara itu, Anda harus berhati-hati di sini karena tidak ada yang berubah tentang RESTORE HEADERONLY output untuk menunjukkan apakah ada cadangan terlampir yang dienkripsi. Untuk menemukan ini, Anda harus memeriksa BackupSetGUID nilai dalam output itu di Position = 1 , dan temukan backup_set_uuid yang sesuai nilai di msdb.dbo.backupset . Tabel ini memiliki kolom baru untuk mendukung enkripsi, di mana Anda bisa mendapatkan informasi ini:key_algorithm , encryptor_thumbprint , dan encryptor_type . Ini bermasalah jika Anda tidak memiliki backupset data – mungkin telah dihapus selama tugas pemeliharaan, atau mungkin Anda tidak dapat mengaksesnya karena Anda benar-benar pulih dari bencana atau hanya memiliki file .bak (atau hanya memiliki file .bak karena alasan lain). Dalam hal ini saya berharap ada cara lain untuk mengetahui dari file cadangan bahwa itu telah dienkripsi (dan bagaimana), tetapi pada saat penulisan saya tidak tahu caranya. Saya mengajukan saran (#805292, juga pribadi) bahwa output dari RESTORE HEADERONLY ditambah dengan informasi enkripsi dengan cara yang sama dengan informasi kompresi ketika fitur itu ditambahkan di SQL Server 2008.

Ketika mereka benar-benar menyelesaikan masalah ini (dan saya yakin mereka akan melakukannya), saya akan menghapus semua kebisingan ini, tetapi penting untuk menyadari hal ini sementara, jika Anda akan melakukan pengujian apa pun dengan CTP saat ini.

Selanjutnya…

Apa arti cadangan jenis ini untuk memulihkan, saya akan kembali ke pos lain, ketika saya menguji kecepatan pemulihan dan mengungkapkan area masalah apa pun di sana. Saya juga ingin meninjau kembali tes ini untuk menyelidiki cadangan log terenkripsi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa terhubung ke database eksternal dari pernyataan sql atau prosedur tersimpan?

  2. Analisis MS SQL Server untuk Mereka yang Melihatnya untuk Pertama Kali

  3. Bagaimana cara mengaktifkan MSDTC di SQL Server?

  4. Menghindari kebuntuan SQL dengan penyetelan kueri:Saran dari Brent Ozar

  5. Bagaimana cara memasukkan pandas DataFrame ke tabel Microsoft SQL Server?