sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2014:Nativní šifrování záloh

Nová funkce v SQL Server 2014, o které mnozí z vás neslyšeli, dokud nebyla oznámena tento týden na PASS Summit, je nativní šifrování záloh ve edicích Standard, Business Intelligence a Enterprise (omlouváme se, Web a Express nejsou podporovány). To je něco, co dodavatelé třetích stran nabízejí již dlouhou dobu a konečně se dostává do produktu, který podporuje čtyři šifrovací algoritmy:AES 128, AES 192, AES 256 a Triple DES (3DES).

Pokud v současné době používáte Transparent Data Encryption výhradně za účelem šifrování dat ve vašich záložních souborech, může to být způsob, jak přejít z této techniky a mít šifrované zálohy bez zásahu, který TDE umístí do vašeho živého systému. Pokud v současnosti používáte pro šifrované zálohy nástroj třetí strany, měli byste to porovnat s funkčností a výkonem nativních šifrovaných záloh.

P.S. CTP2 si můžete stáhnout právě teď.

Nechtěl jsem se pouštět do srovnávání s produkty třetích stran – jsem si jistý, že všechny odvádějí dobrou práci a pravděpodobně mají další funkce, o kterých jsem ani nepřemýšlel. Jen jsem chtěl otestovat, jaký druh zásahu by různé algoritmy zaznamenaly při plných zálohách, z a na tradiční disky (RAID 1) a jednotky SSD as nativní kompresí a bez ní.

Stáhl jsem si tedy datový soubor AdventureWorks2012, vytvořil dvě kopie a pojmenoval je awSSD.mdf a awHDD.mdf a jeden umístil na disk RAID 1 (D:\) a jeden na disk SSD (E:\). Poté jsem oba připojil pomocí FOR ATTACH_REBUILD_LOG , nastavte je na FULL obnovení, změnil výchozí nastavení automatického růstu a nastavil výchozí umístění pro soubory protokolu mezi nimi (protože toto je jediný způsob, o kterém vím, jak určit umístění znovu vytvořeného souboru protokolu):

USE [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 (název souboru='D:\CTP2_Data\awHDD.mdf') PRO ATTACH_REBUILD_LOG; Alternatická databáze AWHDD sada Recovery Full; alter databáze AWHDD Modify soubor (name =n'AdventureWorks2012_Data ', fileGrowth =512000kb); alter databáze AWHDD Modify soubor (name =n'Adventureworks2012_log', fileGrowTh =512000kb); go exec _InHinin _Mog ',', ” , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data';VYTVOŘIT DATABÁZI awSSD ON (název souboru='E:\CTP2_Data\awSSD.mdf') PRO 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,51Work2gLo_THventure (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000 KB); 

Dále jsem je zvětšil pomocí tohoto skriptu od Jonathana Kehayiase (aby databáze i protokol byly dostatečně velké, aby dávaly smysl). To trvalo asi 4 minuty na databázi na HDD i SSD.

V tomto okamžiku EXEC sp_helpfile; přinesl pro každou databázi následující:

name fileid velikost souboru ---------------------- ------ -------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Nyní několik věcí o této funkci, než budeme moci skutečně začít provádět šifrované zálohy. Chcete-li používat šifrování, musíte mít certifikát (nebo asymetrický klíč), což zase bude vyžadovat hlavní klíč. Vybral jsem certifikát a vytvořil jsem je následovně:

USE master;GOCREATE MASTER KEY ŠIFROVÁNÍ PODLE HESLA ='p@ssw0rd';GOOPEN MASTER KEY DECRYPTION BY HESLO ='p@ssw0rd';GOCREATE CERTIFICATE TestCert WITH SUBJECT ='EncryptionTesting 

Také se zobrazí varování, pokud se pokusíte vytvořit šifrovanou zálohu pomocí certifikátu, který sám o sobě nebyl zálohován:

Upozornění:Certifikát použitý k zašifrování šifrovacího klíče databáze nebyl zazálohován. Měli byste okamžitě zazálohovat certifikát a soukromý klíč spojený s certifikátem. Pokud certifikát někdy přestane být dostupný nebo pokud budete muset obnovit nebo připojit databázi na jiném serveru, musíte mít zálohy certifikátu i soukromého klíče, jinak nebudete moci databázi otevřít.

V mém případě bych mohl pouze zálohovat certifikát a hlavní klíč takto:

ZÁLOHOVÁNÍ CERTIFIKÁTU TestCert TO FILE ='C:\temp\TestCert.cert' SE SOUKROMÝM KLÍČEM ( SOUBOR ='C:\temp\TestCert.key', ŠIFROVÁNÍ PODLE HESLA ='p@ssw0rd' ); ZÁLOHA HLAVNÍHO KLÍČE DO SOUBORU ='C:\temp\MasterKey.key' ŠIFROVÁNÍ PODLE HESLA ='p@ssw0rd';

Přísně vzato, zálohování hlavního klíče není nutné k provedení šifrované zálohy (nebo dokonce proto, abyste se vyhnuli varování), ale měli byste to zálohovat tak jako tak. A pravděpodobně budete chtít použít silnější heslo než p@ssw0rd , uložte jej jinam než na disk C:na stejném počítači atd. Nakonec byste měli vzít v úvahu, že pokud své zálohy zašifrujete a neučiníte všechna správná opatření, mohou být v případě katastrofy k ničemu. . Toto není funkce, kterou byste měli zapnout bez pořádné dávky píle a testování.

Když to všechno bylo mimo, mohl jsem pokračovat v testování. Tento systém má pouze jeden plotnový disk a jeden SSD, takže jsem nemohl testovat SSD -> různé SSD nebo HDD -> různé HDD; pouze zálohování z jednoho na druhý nebo na stejnou jednotku. Základní syntaxe pro zálohování se šifrováním je:

ZÁLOHOVÁNÍ DATABÁZE ... SE ŠIFROVÁNÍM (ALGORITMUS =, CERTIFIKÁT SERVERU =);

A čtyři možné hodnoty pro <algorithm> jsou AES_128 , AES_192 , AES_256 a TRIPLE_DES_3KEY .

Dále jsem vygeneroval skript pro spuštění záloh, abych porovnal výkon a velikost různých kombinací – čtyři různé šifrovací algoritmy (a žádné šifrování), s kompresí a bez ní, odkud data pocházejí (HDD nebo SSD) a odkud data jsou zálohována na (HDD nebo SSD). To je 40 různých záloh a skript, který jsem použil k jeho vygenerování, vypadá takto:

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 (SELECT c FROM (VALUES('NO_COMPRESSION'),('COMPRESSION')) AS c(c)),d AS (SELECT d,t FROM (VALUES('D') ,'HDD'),('E','SSD')) JAKO d(d,t))VYBRAT @sql +=N'BACKUP DATABASE aw' + PŘÍPADY s, KDYŽ 1 POTOM 'HDD' JINÉ 'SSD' KONČÍ + ' NA DISK =''' + d + ':\backup\' + n + '.bak'' S INIT, ' + c + ',' + COALESCE(' ŠIFROVÁNÍ (ALGORITMU =' + m + ', CERTIFIKÁT SERVERU =TestCert),', '') + ' NAME =''' + n + ''';' FROM ( SELECT *, n ='test' + CONVERT(VARCHAR(8000), RIGHT('0' + RTRIM(r),2)) + '-' + COALESCE(m, 'NO_ENCRYPTION') + '-' + PŘÍPAD, KDYŽ r <11 THEN 'HDD' ELSE 'SSD' END + '-to-' + t + '-' + c FROM ( SELECT *, r =ROW_NUMBER() OVER (PARTITION BY d.d ORDER BY s.s,m.m,c.c ) OD s KŘÍŽOVÝ SPOJ m KŘÍŽOVÝ SPOJ c KŘÍŽOVÝ SPOJ d ) JAKO x) JAKO y OBJEDNEJTE DO r; --EXEC sp_executesql @sql;--GO 10 SELECT CONVERT(XML, @sql);

Vypadá to opravdu složitě, ale ve skutečnosti to jen generuje 40 BACKUP DATABASE struny. Vybírám jako XML, takže když kliknete na výsledky v mřížce, můžete si prohlédnout celý výstup – místo toho, co PRINT nebo výběr výstupu do mřížky/textu vás omezí na. Výstup je v tomto případě níže (kliknutím zobrazíte/skryjete):

ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='D:\backup\test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION.bak' S INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION'; ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESÍ, NAME ='test01-NO_ENCRYPTION-HDD-to-SSD-KOMPRESE';awDBACKUP DATABASE NA DISK ='E:\backup\test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE HDD DATABÁZE 'D:\backup\test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE =awHDD TO \backup\test03-AES_128-HDD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESE, ŠIFROVÁNÍ (ALGORITMUS =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test03-AES_128-HDD-COMPRESSION'-HDD; ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSIO N.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test03-AES_128-HDD-to-SSD-KOMPRESE';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK =04'E:-AES_128-HDD-to-SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ŠIFROVÁNÍ (ALGORITMUS =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test04-AES_128-HDD-to-SSDRESDBATASSION'ASEPRESDBATA_SE DISK ='D:\backup\test04-AES_128-HDD-to-HDD-NO_COMPRESSION.bak' S INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITMUS =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test-128-DES-AES HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_192, JMÉNO SERVERU =TestCERTFIERT SERVERU 'test05-AES_192-HDD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESE, ŠIFROVÁNÍ =AES92 , CERTIFIKÁT SERVERU =TestCert) , NAME ='test05-AES_192-HDD-to-SSD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESTION ALGORITHM =AES_192, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='D:\backup\test06-AES_192-NODDD. bak' WITH INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITHM =AES_192, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDESD_207-záloha -HDD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test07-AES_256-HDD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE HDD a DATABÁZE 'E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test07-AES_256-SSD-HDD- KOMPRESE';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\te st08-AES_256-HDD-to-SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ŠIFROVÁNÍ (ALGORITMUS =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test08-AES'_256-DATASSION-COMPRESSION-awSSHDDATA-COMPRESSION-awSSHD NA DISK ='D:\backup\test08-AES_256-HDD-to-HDD-NO_COMPRESSION.bak' S INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITHM =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test-256-HD -HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =TRIPLE_SERTISHNAMETEST KEYTEST) ='test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESE, ENGORICRY TRIPLE_DES_3KEY, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awHDD NA DISK ='E:\backup\test10-TRIPLE_DES_3KEY-DDNO-DISK- .bak' S INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITHM =TRIPLE_DES_3KEY, CERTIFIKÁT SERVERU =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE HD\test10 aw TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, CERTIFICATE SERVERU =TestCert), NÁZEV ='test10-TRIPLE_DES_3KEYUP-DES_3KEY-DSDKB ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' S INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='E :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' S INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='E:\backup \test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='test2:NO_ENCRYPTION-S SD-to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='D:\backup\test13-AESD-128 -HDD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test13-AES_128-SSD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE\ awSSD':backup\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_128, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test13-AES_128-SSD-to-SSD-COMPRESSION';BACKUP-COMP DATABASE awSSD TO DISK ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' S INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITHM =AES_128, CERTIFIKÁT SERVERU =-8 SSASD11 NÁZEV =-8'SSDD11), NÁZEV -to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' S INIT, ŽÁDNÁ KOMPRESE, ŠIFROVÁNÍ (ALGORITHM, ALGORITHM AESSERFI =AESERFI2 Test =8 , NAME ='test14-AES_128-SSD-to-H DD-NO_COMPRESSION';ZÁLOHOVANÁ DATABÁZE awSSD NA DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_192, JMÉNO =CERTIFIKÁT SERVERU SERVER 'test15-AES_192-SSD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESE, ŠIFROVÁNÍ =AES192 , CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test15-AES_192-SSD-to-SSD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='E:\backup\test16-AES_192-SSD-to-SSD-NO'WISH.bak INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK\SSD-16-ASP-test ='D:-ESD-backup to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ŠIFROVÁNÍ (ALGORITHM =AES_192, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test16-AES_192-SSD-to-HDD-NO_COMPRESSION'BASE':ZÁLOHA DOBRÁTKA =BASE \backup\test17-AES_256-SSD-to-HDD-COMPRE SSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍ (ALGORITMUS =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test17-AES_256-SSD-to-HDD-KOMPRESE';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK:\backup1'test -AES_256-SSD-to-SSD-COMPRESSION.bak' S INIT, KOMPRESÍ, ŠIFROVÁNÍM (ALGORITHM =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test17-AES_256-SSD-to-SSD-COMPRESSION DATABASE'; DISK ='E:\backup\test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' S INIT, BEZ KOMPRESE, ŠIFROVÁNÍ (ALGORITMUS =AES_256, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='_test158-DESS SSD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, Test =SERVER CERTICFICATE) 'test18-AES_256-SSD-to-HDD-NO_COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' S INIT, KOMPRESE_KOMPRESE, ENTRICKÝ KEYPLETHRYP , SERVER CER TIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awSSD NA DISK ='E:\backup\test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSIONTH IN.bak' KOMPRESE, ŠIFROVÁNÍ (ALGORITMUS =TRIPLE_DES_3KEY, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION';ZÁLOHOVÁNÍ DATABÁZE awTRISSD NA DISK ='E:\ESS-DES_3-test2 SSD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ŠIFROVÁNÍ (ALGORITHM =TRIPLE_DES_3KEY, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_back\COMPRESSION awDATABASEDBACK':w; \test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION.bak' S INIT, NO_COMPRESSION, ŠIFROVÁNÍ (ALGORITHM =TRIPLE_DES_3KEY, CERTIFIKÁT SERVERU =TestCert), NÁZEV ='test20-TRIPLE-SSDRESDES';_3KEY-PHDRESDES-NO_3 před> 

Nemusel jsem dělat nic zvláštního, abych je načasoval, protože jsem mohl stáhnout všechny relevantní statistiky z databáze msdb poté, co byly provedeny (jedinou nevýhodou je, že trvání se měří pouze s přesností na sekundy, pokud jsem nechtěl pro ruční analýzu výstupu). Takže jsem odkomentoval EXEC sp_executesql a GO linky (chtěl jsem spustit každou zálohu 10krát, abych získal průměry, vyloučil anomálie atd.), zmáčkl F5 a šel pracovat na jedné ze svých relací pro PASS Summit.

Když jsem se vrátil, zkontroloval jsem tabulky msdb, abych získal velikosti / trvání pro každou zálohu. Tento dotaz je docela jednoduchý:

;WITH x AS( SELECT název, přirozená_velikost =velikost_zálohy/1024/1024.0, komprimovaná_velikost =komprimovaná_velikost_zálohy/1024/1024.0, trvání =1,0*DATEDIFF(SECOND, datum_startu_zálohy, datum_dokončení_zálohy) FROM msbackupREKELIbo %')SELECT název, [přirozená_velikost] =MAX(přirozená_velikost), [komprimovaná_velikost] =MAX (stlačená_velikost), [min_duration] =MIN(trvání), [max_duration] =MAX(trvání), [průměrné_trvání] =AVG (trvání) FROM x GROUP BY nameORDER BY name;

To by mi poskytlo data potřebná k vytvoření pěkných grafů.

Vliv na velikost

V závislosti na vašich zkušenostech s šifrováním obecně vás může nebo nemusí překvapit, že šifrování zálohy databáze má velmi malý dopad na její celkovou velikost. Jak to funguje, je určitě mimo rozsah tohoto příspěvku; jednoduchým vysvětlením by bylo, že – alespoň u šifrování AES – komprese není příliš účinná na většině výstupu, protože jde v podstatě o náhodný nesmysl.

Konečným výsledkem je, že tento graf není příliš vzrušující. Komprimované a nekomprimované velikosti nativních záloh proti čtyřem různým metodám šifrování:


Velikost záloh v MB se šifrováním a bez šifrování

Jak vidíte, na velikost databáze byl téměř nulový dopad – přibližně o 0,03 % větší velikost u nekomprimované zálohy a dalších 0,04 % u komprimované zálohy.

Dopad na výkon

Šifrování mělo sice zanedbatelný dopad na velikost, ale mělo ovlivnit rychlost zálohování. Ale v některých případech ne tak, jak byste si mysleli. Zde je celková míra průměrné doby běhu pro každý přístup:


Průměrná doba trvání různých záloh v sekundách

Skutečně jsem očekával, že šifrování vždy způsobí zásah do výkonu, a měli byste otestovat ve svém prostředí, zda se vaše výsledky liší od mých. Vrátím se a aktualizuji to o nový graf zobrazující konkrétní případy, které mě překvapily, a odstraním některé odlehlé hodnoty, abych se ujistil, že výsledky jsou skutečně reprezentativní.

Upozornění

Jedna důležitá poznámka:nemůžete přidávat šifrované zálohy. Pokud vygenerujete zašifrovaný záložní soubor pomocí WITH INIT a poté zkuste ke stejnému souboru připojit další šifrovanou zálohu, zobrazí se tato chyba:

Zpráva 3095, Úroveň 16, Stav 1, Řádek 11
Zálohu nelze provést, protože bylo požadováno 'ŠIFROVÁNÍ' poté, co bylo médium naformátováno s nekompatibilní strukturou. Chcete-li k této sadě médií připojit, vynechejte 'ŠIFROVÁNÍ' nebo vytvořte novou sadu médií pomocí příkazu WITH FORMAT v příkazu BACKUP. Pokud použijete WITH FORMAT na existující sadě médií, všechny její sady záloh budou přepsány.
Msg 3013, Level 16, State 1, Line 11
BACKUP DATABASE se nenormálně ukončuje.

Zmateně můžete připojit ne -šifrovaná záloha, když byl zašifrován původní soubor. Toto není záměr a je to chyba, kterou jsem nahlásil na Connect (#805220, ale aktuálně je označena jako soukromá); doufejme, že to budou řešit před RTM.

Mezitím musíte být opatrní, protože se nic nezměnilo na RESTORE HEADERONLY výstup označující, zda byla některá z přiložených záloh zašifrována. Chcete-li to zjistit, musíte zkontrolovat BackupSetGUID hodnotu v tomto výstupu na Position = 1 a najděte odpovídající backup_set_uuid hodnotu v msdb.dbo.backupset . Tato tabulka má nové sloupce pro podporu šifrování, kde můžete získat tyto informace:key_algorithm , encryptor_thumbprint a encryptor_type . To je problematické v případech, kdy nemáte backupset data – možná byla vymazána během úkolů údržby nebo k nim možná nemáte přístup, protože se skutečně zotavujete po havárii nebo máte pouze soubor .bak (nebo máte pouze soubor .bak z jiných důvodů). V tomto případě doufám, že existuje nějaký jiný způsob, jak ze záložního souboru zjistit, že byl zašifrován (a jak), ale v době psaní o tom nevím. Podal jsem návrh (#805292, také soukromý), že výstup RESTORE HEADERONLY být rozšířen o informace o šifrování stejným způsobem, jako byl rozšířen o informace o kompresi, když byla tato funkce přidána do SQL Server 2008.

Až tyto problémy vyřeší (a jsem si jistý, že vyřeší), odstraním veškerý tento šum, ale je důležité si toho být mezitím vědom, pokud se chystáte provádět jakékoli testování se současnými CTP.

Další…

Co tento typ zálohy znamená pro obnovu, k tomu se vrátím v jiném příspěvku, až otestuji rychlosti obnovy a odhalím tam případné problémové oblasti. Chci také znovu navštívit tyto testy, abych prozkoumal šifrované zálohy protokolů.


  1. Dynamický SQL – EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL)

  2. Zkontrolujte nastavení relace pomocí SESSIONPROPERTY() na serveru SQL Server

  3. Co sledovat v MySQL 8.0

  4. Výměna hodnot sloupců v MySQL