Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2014:Естествено архивно криптиране

Нова функция в SQL Server 2014, за която много от вас не бяха чували, докато не беше обявена тази седмица на срещата PASS Summit, е естествено резервно криптиране в Standard, Business Intelligence и Enterprise Editions (за съжаление, Web и Express не се поддържат). Това е нещо, което доставчиците на трети страни предлагат от дълго време и най-накрая си пробива път в продукта, поддържайки четири алгоритма за криптиране:AES 128, AES 192, AES 256 и Triple DES (3DES).

Ако понастоящем използвате прозрачно криптиране на данни единствено с цел да имате криптирани данни във вашите архивни файлове, това може да е начин да мигрирате от тази техника и да имате криптирани архиви без удара, който TDE поставя във вашата жива система. Ако в момента използвате инструмент на трета страна за криптирани архиви, трябва да го сравните с функционалността и производителността на собствените криптирани архиви.

P.S. Можете да изтеглите CTP2 точно сега.

Не исках да се сравнявам с продукти на трети страни – сигурен съм, че всички вършат добра работа и вероятно имат допълнителни функции, за които дори не съм се замислял. Просто исках да тествам какъв удар биха понесли различните алгоритми при пълно архивиране, от и към традиционните въртящи се дискове (RAID 1) и твърдотелни устройства, както и със и без естествена компресия.

И така, изтеглих файла с данни AdventureWorks2012, направих две копия, кръстих ги awSSD.mdf и awHDD.mdf и постави един на RAID 1 устройството (D:\) и един на SSD устройството (E:\). След това прикачих и двете с FOR ATTACH_REBUILD_LOG , задайте ги на FULL възстановяване, промени настройките за автоматично нарастване по подразбиране и зададе местоположението по подразбиране за регистрационни файлове между тях (тъй като това е единственият начин, който знам да уточня местоположението на повторно изградения лог файл):

ИЗПОЛЗВАЙТЕ [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 CREATEHDDATABONASE 'D:\CTP2_Data\awHDD.mdf') ЗА ATTACH_REBUILD_LOG; ALTER DATABASE AWHDD SET Recovery Full; Alter Database AWHDD Промяна на файла (име =n'adventureworks2012_data ', filegrowth =512000kb); alter database awhdd modify file (name =n'adventureworks2012_log', filegrowth =512000kb); , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data';СЪЗДАДЕТЕ БАЗА ДАННИ awSSD ON (filename='E:\CTP2_Data\awSSD.mdf') ЗА ATTACH_REBU; ПРОМЕНИ БАЗА ДАННИ awSSD НАСТРОИ ВЪЗСТАНОВЯВАНЕ НА ПЪЛНО; ПРОМЕНИ БАЗА ДАННИ awSSD ПРОМЕНИ ФАЙЛ (ИМЕ =N'AdventureWorks2012_Data', FILEGROWTH =512000KB); ПРОМЕНИ БАЗА ДАННИ awSSD МОДИФИЦИЯ НА ФАЙЛ =NAME (NAME_Works'0KV =10000000000); 

След това ги увеличих с помощта на този скрипт от Джонатан Кехайяс (така че както базата данни, така и дневникът да са достатъчно големи, за да имат смисъл). Това отне около 4 минути на база данни както на HDD, така и на SSD.

В този момент EXEC sp_helpfile; дава следното за всяка база данни:

name fileid име на файл размер ----------------------- ------ --------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Сега, няколко неща за тази функция, преди да можем действително да започнем да извършваме криптирани архиви. Трябва да имате сертификат (или асиметричен ключ), за да използвате криптиране, а това от своя страна ще изисква главен ключ. Избрах сертификат и го създадох, както следва:

ИЗПОЛЗВАЙТЕ главен;GOCREATE ГЛАВНИЯ КЛЮЧ, ШИФИРОВАНЕ С ПАРОЛА ='p@ssw0rd';GOOPEN ГЛАВНИЯ КЛЮЧ ДЕКРИПЦИЯ ЧРЕЗ ПАРОЛА ='p@ssw0rd';GOCREATE CERTIFICATE TestCert WITH SUBJECT =preest 'Encryption'; 

Също така получавате предупреждение, ако се опитате да създадете криптирано архивиране с помощта на сертификат, който сам по себе си не е архивиран:

Предупреждение:Сертификатът, използван за криптиране на ключа за криптиране на базата данни, не е архивиран. Трябва незабавно да архивирате сертификата и частния ключ, свързан със сертификата. Ако сертификатът някога стане недостъпен или ако трябва да възстановите или прикачите базата данни на друг сървър, трябва да имате резервни копия както на сертификата, така и на частния ключ, или няма да можете да отворите базата данни.

В моя случай мога просто да архивирам сертификата и главния ключ, както следва:

РЕЗЕРВЕН СЕРТИФИКАТ TestCert КЪМ ФАЙЛ ='C:\temp\TestCert.cert' С ЧАСТЕН КЛЮЧ ( ФАЙЛ ='C:\temp\TestCert.key', ШИФИРАНЕ С ПАРОЛА ='p@ssw0rd'); РЕЗЕРВЕН ГЛАВЕН КЛЮЧ ЗА ФАЙЛА ='C:\temp\MasterKey.key' ШИФИРАНЕ С ПАРОЛА ='p@ssw0rd';

Строго погледнато, архивирането на главния ключ не е необходимо за извършване на криптирано архивиране (или дори за избягване на предупреждението), но все пак трябва да архивирате това. И вероятно ще искате да използвате по-силна парола от p@ssw0rd , съхранявайте го някъде, различно от C:устройство на същата машина и т.н. И накрая, трябва да внимавате, че ако шифровате вашите архивни копия и не вземете всички правилни предпазни мерки, те може да са безполезни в случай на бедствие . Това не е функция, която просто трябва да включите без достатъчно старание и тестване.

Като изключим всичко това, можех да продължа с тестването. Тази система има само един диск с една плоча и един SSD, така че не можах да тествам SSD -> различен SSD или HDD -> различен твърд диск; само архивиране от едно към друго или към едно и също устройство. Основният синтаксис за архивиране с криптиране е:

РЕЗЕРВНО КОПИРОВАНИЕ БАЗА ДАННИ... С ШИФИРАНЕ (АЛГОРИТЪМ =<алгоритъм>, СЕРТИФИКАТ НА СЪРВЪР =<сертификат>);

И четирите възможни стойности за <algorithm> са AES_128 , AES_192 , AES_256 и TRIPLE_DES_3KEY .

След това генерирах скрипта за стартиране на архивирането, за да сравня производителността и размера на различни комбинации – четирите различни алгоритма за криптиране (и без криптиране), със и без компресия, откъде идват данните (HDD или SSD) и откъде данните се архивират на (HDD или SSD). Това са 40 различни архива и скриптът, който използвах, за да го генерирам, изглежда така:

DECLARE @sql NVARCHAR(MAX) =N'';;WITH 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 (ИЗБЕРЕТЕ c ОТ (СТОЙНОСТИ('NO_COMPRESSION'),('COMPRESSION')) КАТО c(c)),d AS (ИЗБЕРЕТЕ d,t ОТ (СТОЙНОСТИ('D' ,'HDD'),('E','SSD')) AS d(d,t))SELECT @sql +=N'BACKUP DATABASE aw' + СЛУЧАЙ s КОГАТО 1 THEN 'HDD' ELSE 'SSD' END + ' КЪМ ДИСК =''' + d + ':\backup\' + n + '.bak'' С INIT, ' + c + ',' + КОАЛЕСЦИЯ(' ШИФИРАНЕ (АЛГОРИТЪМ =' + m + ', СЕРТИФИКАТ НА СЪРВЪР =TestCert),', '') + ' ИМЕ =''' + n + ''';' ОТ ( SELECT *, n ='тест' + CONVERT(VARCHAR(8000), RIGHT('0' + RTRIM(r),2)) + '-' + COALESCE(m,'NO_ENCRYPTION') + '-' + СЛУЧАЙ, КОГАТО r <11 ТОГАВА 'HDD' ДРУГИ 'SSD' END + '-to-' + t + '-' + c ОТ ( ИЗБЕРЕТЕ *, r =ROW_NUMBER() НАД (РАЗДЕЛЯНЕ ПО d.d РЕД ПО s.s,m.m,c.c ) ОТ s КРЪСТО ПРИСЪЕДИНЯВАНЕ m КРЪСТО СЪЕДИНЕНИЕ c КРЪСТО ПРИСЪЕДИНЕНИЕ d ) КАТО x) КАТО y ПОРЪЧАЙТЕ ПО r; --EXEC sp_executesql @sql;-- ИЗБЕРЕТЕ 10 ИЗБЕРЕТЕ CONVERT(XML, @sql);

Изглежда наистина сложно, но всъщност просто генерира 40 BACKUP DATABASE струни. Избирам като XML, така че когато щракнете върху резултатите в мрежата, можете да видите целия изход – вместо това, което PRINT или избирането на изхода в мрежа/текст ще ви ограничи до. Резултатът в този случай е по-долу (щракнете, за да покажете/скриете):

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'; РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСКА ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ИМЕ ='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION DATABASE';BACKaw КЪМ ДИСКА ='E:\backup\test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION =BACKUP HDDATABASE'; 'D:\backup\test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE:awHDD' ='BACKUP DATABASE:awHDD' \backup\test03-AES_128-HDD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КРИПИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), ИМЕ ='test03-AES_128-HDD-TO-HD'; РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСКА ='E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSIO N.bak' С INIT, КОМПРЕСИЯ, ШИФИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test03-AES_128-HDD-to-SSD-COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awHDDE КЪМ ДИСК:4\back\'test -AES_128-HDD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), ИМЕ ='test04-AES_128-HDD-to-PRESHDATA'; ДИСК ='D:\backup\test04-AES_128-HDD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРВЪРЕН СЕРТИФИКАТ =TestCert), ИМЕ ='test-128-HD HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРОВАНИЕ (АЛГОРИТЪМ =AES_192, SERVER NAME =Test) 'test05-AES_192-HDD-to-HDD-COMPRESSION';РЕзервно копие на БАЗА ДАННИ awHDD КЪМ ДИСКА ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КОМПРЕСИЯ, ШИФРОВАНИЕ 19 (АЛАЛГИ) , СЕРТИФИКАТ НА СЪРВЪР =TestCert) , ИМЕ ='test05-AES_192-HDD-to-SSD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСК ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION АЛГОРИТЪМ =AES_192, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСК ='D:\backup\test06-AES_192-HDSDNO-HDDSION. bak' С INIT, NO_COMPRESSION, ENCRYPTION (АЛГОРИТЪМ =AES_192, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awHDD'07-DISK =-HDD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test07-AES_256-HDD-to-HDD-COMPRESSION =DISKUPADAWHDDATA BACKUP TO BACKDATA 'E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test07-AES_256-SSDD- КОМПРЕСИЯ';РЕзервно копие на БАЗА ДАННИ awHDD КЪМ ДИСКА ='E:\backup\te st08-AES_256-HDD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРТИФИКАТ НА СЪРВЪР =TestCert), NAME ='test08-AES_256-HDDATA-COMPRESSION-to-COMPRESSION-to_COMPRESSION'; КЪМ ДИСКА ='D:\backup\test08-AES_256-HDD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), NAME-A ='test-256 -HDD-NO_COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСКА ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРОВАНИЕ (АЛГОРИТМ =TRIPLECEYRTNAME, Test) ='test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD КЪМ ДИСК ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak' С INIT, NC COMPRESSION =TRIPLE_DES_3KEY, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), NAME ='test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD НА ДИСК ='E:\backup\test10-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awHDD TO DISK ='E:\backup\test10-TRIPLE_DES-HDD-3 .bak' С INIT, NO_COMPRESSION, ENCRYPTION (АЛГОРИТЪМ =TRIPLE_DES_3KEY, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION\TEST TEST';1-СКАЧАНЕ НА ДАННИ ЗА ДАННИ ЗА КОПИРОВАНИЕ\BACKUP TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРОВАНЕ (АЛГОРИТЪМ =TRIPLE_DES_3KEY, СЕРВЪР CERTIFICATE =TestCert), NAME ='test10-TRIPLE-KEY-HDDSDAW DASE_3KEY-HDDSDAWD ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ИМЕ ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК =' :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ИМЕ ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК ='E:\backup ='E:\backup \test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК:2-backup\'D NO_ENCRYPTION-S SD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-HDD-NO_COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awSSD НА ДИСК ='D:\backup\test13-AES_1 -HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КРИПИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test13-AES_128-SSD-to-HDD-COMPRESSION'; РЕЗЕРВНО КОПИРОВАНИЕ КЪМ БАЗА ДАННИ:\SKSD'DISTER AWSSD backup\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КРИПИРАНЕ (АЛГОРИТЪМ =AES_128, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), ИМЕ ='test13-AES_128-SSDBSD-to-SSD'; БАЗА ДАННИ awSSD КЪМ ДИСКА ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРОВАНЕ (АЛГОРИТЪМ =AES_128, СЕРВЪР СЕРТИФИКАТ =TestCert4-AES18), testCert -to-SSD-NO_COMPRESSION';РЕзервно копие на БАЗА ДАННИ awSSD НА ДИСК ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AESER_128) , NAME ='test14-AES_128-SSD-to-H DD-NO_COMPRESSION';РЕзервно копие на БАЗА ДАННИ awSSD КЪМ ДИСК ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРОВАНИЕ (АЛГОРИТЪМ =AES_192, СЪРВЪР ИМЕ =СЕРВЪР =СЕРВЕР 'test15-AES_192-SSD-to-HDD-COMPRESSION';РЕзервно копие на БАЗА ДАННИ awSSD КЪМ ДИСК ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КОМПРЕСИЯ, ШИФРОВАНИЕ 19 (AALG. , СЕРТИФИКАТ НА СЪРВЪР =TestCert), NAME ='test15-AES_192-SSD-to-SSD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК ='E:\backup\test16-AES_192-SSD-to-SSD-NO_COMPRESSION. INIT, NO_COMPRESSION, ENCRYPTION (АЛГОРИТЪМ =AES_192, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК КЪМ ДИСК_\116\тест_д. to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_192, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test16-AES_192-SSD-to-HDD-NO_COMPRESSION DATABASE':DABACKaw \backup\test17-AES_256-SSD-to-HDD-COMPRE SSION.bak' С INIT, КОМПРЕСИЯ, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test17-AES_256-SSD-to-HDD-COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD'test към ДИСК:7\back -AES_256-SSD-to-SSD-COMPRESSION.bak' С INIT, КОМПРЕСИЯ, КРИПИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test17-AES_256-SSD-към-SSD-COMPRESSION DATA'; ДИСК ='E:\backup\test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =AES_256, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), ИМЕНА ='test18-AES ='test18- SSD-NO_COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ ДИСК ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =SERTENAME =Test, AES_256) 'test18-AES_256-SSD-to-HDD-NO_COMPRESSION';РЕзервно копие на БАЗА ДАННИ awSSD КЪМ ДИСК ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' WITH =INIT, INITNCRYKEPRESSION_3. , СЪРВЪР CER TIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION';РЕЗЕРВНА БАЗА ДАННИ awSSD НА ДИСК ='E:\backup\test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION WITH.bak', КОМПРЕСИЯ, ШИФРИРАНЕ (АЛГОРИТЪМ =TRIPLE_DES_3KEY, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test19-TRIPLE_DES_3KEY-SSD-към-SSD-COMPRESSION'; РЕЗЕРВНА БАЗА ДАННИ awSSD КЪМ DISK-backup-3-YLE-Test:' SSD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =TRIPLE_DES_3KEY, СЕРТИФИКАТ НА СЪРВЪР =TestCert), ИМЕ ='test20-TRIPLE_DES_3KEY-SSD-to-SSD-BACK';\DIBAWPRES \test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION.bak' С INIT, NO_COMPRESSION, ШИФИРАНЕ (АЛГОРИТЪМ =TRIPLE_DES_3KEY, СЕРВЪРНИ СЕРТИФИКАТ =TestCert), NAME ='test20-HDSSDNO_KETLEY_DES_3KEY-3. предварително> 

Не трябваше да правя нищо специално, за да ги отмеря, защото можех да изтегля всички съответни статистически данни от базата данни msdb, след като бяха направени (единственият недостатък е, че продължителността се измерва само до детайлност от секунди, освен ако не искам за да анализирате ръчно изхода). Така че декоментирах EXEC sp_executesql и GO линии (исках да стартирам всяко архивиране 10 пъти, за да получа средни стойности, да изключа аномалии и т.н.), натиснах F5 и се заех с една от моите сесии за срещата PASS.

Когато се върнах, проверих таблиците на msdb, за да получа размерите / продължителността за всяко архивиране. Тази заявка е доста проста:

;WITH x AS( SELECT name, natural_size =backup_size/1024/1024.0, compressed_size =compressed_backup_size/1024/1024.0, duration =1.0*DATEDIFF(SECOND, backup_start_date, backup_start_date, backup_start_date, backup_start_date, backup_finish'date) %')SELECT име, [естествен_размер] =MAX(естествен_размер), [компресиран_размер] =MAX(компресиран_размер), [min_duration] =MIN(продължителност), [max_duration] =MAX(продължителност), [avg_duration] =AVG(продължителност) ОТ x ГРУПА ПО име ORDER BY name;

Това ще ми даде необходимите данни, за да направя някои красиви диаграми.

Влияние върху размера

В зависимост от вашия опит с криптирането като цяло, може или не може да ви изненада, че криптирането на резервно копие на база данни има много малко влияние върху общия му размер. Как работи това е извън обхвата на тази публикация със сигурност; едно просто обяснение би било, че – поне с AES криптиране – компресията не е много ефективна за по-голямата част от изхода, тъй като по същество е произволна глупост.

Крайният резултат е, че тази диаграма не е много вълнуваща. Компресираните и некомпресираните размери на естествените архиви спрямо четирите различни метода за криптиране:


Размер в MB на резервни копия със и без криптиране

Както можете да видите, имаше почти нулево влияние върху размера на базата данни – около 0,03% увеличен размер за некомпресиран архив и допълнителни 0,04% за компресиран архив.

Влияние върху производителността

Въпреки че криптирането имаше незначително влияние върху размера, то направи влияе върху скоростта на архивирането. Но в някои случаи не по начина, по който си мислите. Ето общата мярка за средното време на изпълнение за всеки подход:


Средна продължителност в секунди на различни резервни копия

Наистина очаквах криптирането винаги да причинява удар в производителността и трябва да тествате във вашата среда, за да видите дали вашите резултати са различни от моите. Ще се върна и ще актуализирам това с нова диаграма, показваща конкретни случаи, които бяха изненадващи за мен, и ще премахна някои извънредни стойности, за да се уверя, че резултатите са наистина представителни.

Предупреждение

Една важна забележка:не можете да добавяте криптирани архиви. Ако генерирате шифрован архивен файл с помощта на WITH INIT и след това опитайте да добавите друго криптирано архивно копие към същия файл, ще получите тази грешка:

Съобщение 3095, ниво 16, състояние 1, ред 11
Архивирането не може да бъде извършено, защото е поискано „ENCRYPTION“, след като носителят е форматиран с несъвместима структура. За да добавите към този набор от медии, или пропуснете „ENCRYPTION“, или създайте нов медиен набор, като използвате WITH FORMAT във вашето BACKUP изявление. Ако използвате WITH FORMAT за съществуващ набор от носители, всичките му резервни комплекти ще бъдат презаписани.
Съобщение 3013, ниво 16, състояние 1, ред 11
БАЗА ЗА РЕЗЕРВНО копие се прекратява необичайно.

Можете, объркващо, да добавите не -криптирано архивиране, когато първоначалният файл е бил криптиран. Това не е намерението и е грешка, за която докладвах във Connect (#805220, но в момента е маркиран като частен); да се надяваме, че ще се справят с това преди RTM.

Междувременно трябва да бъдете внимателни тук, защото нищо не е променено относно RESTORE HEADERONLY изход, за да покаже дали някое от приложените архиви е криптирано. За да откриете това, ще трябва да проверите BackupSetGUID стойност в този изход в Position = 1 и намерете съответния backup_set_uuid стойност в msdb.dbo.backupset . Тази таблица има нови колони за поддръжка на криптиране, откъдето можете да получите тази информация:key_algorithm , encryptor_thumbprint и encryptor_type . Това е проблематично в случаите, когато нямате backupset данни – може би са били изчистени по време на задачи по поддръжката или може би нямате достъп до тях, защото наистина се възстановявате от бедствие или имате само .bak файла (или имате само файла .bak по други причини). В този случай се надявам да има някакъв друг начин да се разбере от архивния файл, че е криптиран (и как), но към момента на писане не знам начин. Подадох предложение (#805292, също частно), че изходът на RESTORE HEADERONLY да бъде допълнена с информация за криптиране по същия начин, по която беше допълнена с информация за компресиране, когато тази функция беше добавена в SQL Server 2008.

Когато разрешат тези проблеми (и съм убеден, че ще го направят), ще премахна целия този шум, но е важно да сте наясно с това междувременно, ако ще извършите каквото и да е тестване с текущи CTP.

Напред…

Какво означава този тип архивиране за възстановяване, ще се върна в друга публикация, когато тествам скоростите на възстановяване и разкривам проблемите там. Също така искам да преразгледам тези тестове, за да разследвам криптирани архиви на регистрационни файлове.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създам ограничение за проверка на множество таблици?

  2. Какво е @@SERVICENAME в SQL Server?

  3. Изхвърлете всички таблици, съхранени процедури, тригери, ограничения и всички зависимости в един оператор sql

  4. Какво е логически оператор И в SQL Server - SQL Server / TSQL урок, част 120

  5. SQL Server :SUM() от множество редове, включително клаузи where