sql >> Database >  >> RDS >> Sqlserver

SQL Server 2014:Native back-upversleuteling

Een nieuwe functie in SQL Server 2014 waar velen van jullie nog nooit van hadden gehoord totdat deze deze week op de PASS Summit werd aangekondigd, is native back-upversleuteling in Standard, Business Intelligence en Enterprise Editions (sorry, Web en Express worden niet ondersteund). Dit is iets dat externe leveranciers al heel lang aanbieden, en het vindt eindelijk zijn weg naar het product en ondersteunt vier coderingsalgoritmen:AES 128, AES 192, AES 256 en Triple DES (3DES).

Als u momenteel transparante gegevenscodering alleen gebruikt om gegevens in uw back-upbestanden te versleutelen, kan dit een manier zijn om van die techniek te migreren en versleutelde back-ups te maken zonder de hit die TDE op uw livesysteem plaatst. Als u momenteel een tool van derden gebruikt voor versleutelde back-ups, moet u dat vergelijken met de functionaliteit en prestaties van native versleutelde back-ups.

PS Je kunt CTP2 nu meteen downloaden.

Ik wilde niet beginnen met het vergelijken met producten van derden – ik weet zeker dat ze allemaal goed werk leveren en waarschijnlijk extra functies hebben waar ik nog niet eens aan heb gedacht. Ik wilde gewoon testen wat voor soort hit de verschillende algoritmen zouden krijgen bij volledige back-ups, van en naar zowel traditionele spinny disks (RAID 1) als solid state drives, en met en zonder native compressie.

Dus ik downloadde het AdventureWorks2012-gegevensbestand, maakte twee kopieën en noemde ze awSSD.mdf en awHDD.mdf , en één op de RAID 1-schijf (D:\) en één op de SSD-schijf (E:\) geplaatst. Vervolgens heb ik beide bijgevoegd met FOR ATTACH_REBUILD_LOG , zet ze op FULL herstel, de standaard instellingen voor automatisch groeien gewijzigd en de standaardlocatie voor logbestanden daartussenin (omdat dit de enige manier is die ik ken om de locatie van het opnieuw opgebouwde logbestand op te geven):

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 (bestandsnaam=HDD AAN (bestandsnaam=HDD AAN) 'D:\CTP2_Data\awHDD.mdf') VOOR ATTACH_REBUILD_LOG; ALTER DATABASE awHDD SET RECOVERY VOLLEDIG; ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorksFILEGROW'; , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data';GA DATABASE MAKEN awSSD AAN (bestandsnaam='E:\CTP2_Data\awSSD.mdf') VOOR ATTACH_REBUILD ALTER DATABASE awSSD SET RECOVERY VOLLEDIG;ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorksFILE2012_LogTH'; 

Vervolgens heb ik ze vergroot met behulp van dit script van Jonathan Kehayias (zodat zowel de database als het logboek groot genoeg zouden zijn om betekenisvol te zijn). Dit duurde ongeveer 4 minuten per database op zowel HDD als SSD.

Op dat moment EXEC sp_helpfile; leverde het volgende op voor elke database:

naam bestandsid bestandsnaam grootte ----------------------- ------ -------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Nu nog een paar dingen over deze functie voordat we daadwerkelijk versleutelde back-ups kunnen gaan maken. U hebt een certificaat (of asymmetrische sleutel) nodig om encryptie te gebruiken, en dit vereist op zijn beurt een hoofdsleutel. Ik heb een certificaat gekozen en deze als volgt gemaakt:

GEBRUIK master;GOCREATE HOOFDSLEUTEL ENCRYPTIE MET WACHTWOORD ='p@ssw0rd';GOOPEN HOOFDSLEUTELDECRYPTIE MET WACHTWOORD ='p@ssw0rd';GOCREATE CERTIFICAAT TestCert MET SUBJECT ='EncryptionTesting';GO

U krijgt ook een waarschuwing als u probeert een versleutelde back-up te maken met een certificaat waarvan zelf geen back-up is gemaakt:

Waarschuwing:er is geen back-up gemaakt van het certificaat dat is gebruikt voor het versleutelen van de databaseversleutelingssleutel. U moet onmiddellijk een back-up maken van het certificaat en de persoonlijke sleutel die aan het certificaat is gekoppeld. Als het certificaat ooit niet meer beschikbaar is of als u de database op een andere server moet herstellen of koppelen, moet u een back-up hebben van zowel het certificaat als de persoonlijke sleutel, anders kunt u de database niet openen.

In mijn geval kon ik gewoon een back-up maken van het certificaat en de hoofdsleutel, als volgt:

BACK-UPCERTIFICAAT TestCert NAAR FILE ='C:\temp\TestCert.cert' MET PRIVÉSLEUTEL ( FILE ='C:\temp\TestCert.key', ENCRYPTIE MET WACHTWOORD ='p@ssw0rd'); BACK-UP MASTER KEY TO FILE ='C:\temp\MasterKey.key' ENCRYPTIE MET WACHTWOORD ='p@ssw0rd';

Strikt genomen is het niet nodig om een ​​back-up van de hoofdsleutel te maken om een ​​versleutelde back-up uit te voeren (of zelfs om de waarschuwing te vermijden), maar u moet hier toch een back-up van maken. En je zult waarschijnlijk een sterker wachtwoord willen gebruiken dan p@ssw0rd , sla het ergens anders op dan de C:-schijf op dezelfde machine, enz. Ten slotte moet u er rekening mee houden dat als u uw back-ups versleutelt en u niet de juiste voorzorgsmaatregelen neemt, ze mogelijk nutteloos zijn in het geval van een ramp . Dit is geen functie die je gewoon moet inschakelen zonder een behoorlijke hoeveelheid zorgvuldigheid en testen.

Met dat alles uit de weg, kon ik doorgaan met testen. Dit systeem heeft slechts een enkele schijf met een platter en een enkele SSD, dus ik kon SSD -> andere SSD of HDD -> verschillende HDD niet testen; alleen back-ups maken van de ene naar de andere, of naar dezelfde schijf. De basissyntaxis voor het maken van back-ups met codering is:

BACK-UP DATABASE ... MET ENCRYPTIE (ALGORITHM =, SERVER CERTIFICATE =);

En de vier mogelijke waarden voor <algorithm> zijn AES_128 , AES_192 , AES_256 en TRIPLE_DES_3KEY .

Dus vervolgens heb ik het script gegenereerd om de back-ups uit te voeren om de prestaties en grootte van verschillende combinaties te vergelijken - de vier verschillende coderingsalgoritmen (en geen codering), met en zonder compressie, waar de gegevens vandaan komen (HDD of SSD) en waar de gegevens worden geback-upt naar (HDD of SSD). Dat zijn 40 verschillende back-ups, en het script dat ik heb gebruikt om het te genereren ziet er als volgt uit:

DECLARE @sql NVARCHAR(MAX) =N'';;MET s(s) AS (SELECTEER 1 UNION ALLES SELECT 2),m AS (SELECTEER 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')) AS d(d,t))SELECT @sql +=N'BACKUP DATABASE aw' + CASE s WHEN 1 THEN 'HDD' ELSE 'SSD' EINDE + ' NAAR SCHIJF =''' + d + ':\backup\' + n + '.bak'' WITH INIT, ' + c + ',' + COALESCE(' ENCRYPTIE (ALGORITHM =' + m + ', SERVERCERTIFICAAT =TestCert),', '') + ' NAAM =''' + n + ''';' FROM ( SELECT *, n ='test' + CONVERT(VARCHAR(8000), RIGHT('0' + RTRIM(r),2)) + '-' + COALESCE(m,'NO_ENCRYPTION') + '-' + CASE WHEN 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) ) VAN s CROSS JOIN m CROSS JOIN c CROSS JOIN d ) AS x) AS y ORDER DOOR r; --EXEC sp_executesql @sql;--GO 10 SELECTEER CONVERTEREN(XML, @sql);

Ziet er erg ingewikkeld uit, maar het genereert gewoon 40 BACKUP DATABASE snaren. Ik selecteer als XML zodat, wanneer u op de resultaten in het raster klikt, u de hele uitvoer kunt bekijken - in plaats van wat PRINT of door de uitvoer naar raster/tekst te selecteren, wordt u beperkt. De uitvoer is in dit geval hieronder (klik om te tonen/verbergen):

BACK-UPDATABASE awHDD TO DISK ='D:\backup\test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, NAME ='test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION'; BACK-UP DATABASE awHDD TO DISK ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, NAME ='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION';BACK-UP 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-naar-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test03-AES_128-HDD-naar-HDD-COMPRESSION'; BACK-UPDATABASE awHDD TO DISK ='E:\backup\test03-AES_128-HDD-naar-SSD-COMPRESSIO N.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test03-AES_128-HDD-to-SSD-COMPRESSION';BACK-UP DATABASE awHDD NAAR SCHIJF ='E:\backup\test04 -AES_128-HDD-naar-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-to-SSD-NO_COMPRESSION';BACKUPHD ​​DATABASE aw SCHIJF ='D:\backup\test04-AES_128-HDD-naar-HDD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-naar- HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test05-AES_192-HDD-to-HDD-COMPRESSION';BACK-UP DATABASE awHDD TO DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_192 , SERVERCERTIFICAAT =TestCert) , NAME ='test05-AES_192-HDD-naar-SSD-COMPRESSION';BACK-UP DATABASE awHDD NAAR SCHIJF ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE ( ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION';BACK-UP DATABASE awHDD TO DISK ='D:\backup\test06-AES_192-HDD-to-HDD-NO_COMPRESSION. bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION';BACK-UPDATABASE awHDD NAAR SCHIJF ='D:\backup\testCert-AES_ -HDD-naar-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test07-AES_256-HDD-naar-HDD-COMPRESSION';BACKUP DATABASE awHDD NAAR SCHIJF ='E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test07-AES_256-HDD-naar-SSD- COMPRESSIE';BACK-UPDATABASE awHDD NAAR SCHIJF ='E:\backup\te st08-AES_256-HDD-naar-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test08-AES_256-HDD-to-SSD-NO_COMPRESSIONBASE';BACKUPHDDD 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';BACK-UPDATABASE awHDD TO DISK ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =TRIPLE_DES_3KEY, SERVER =TestCERTIFICAAT), ='test09-TRIPLE_DES_3KEY-HDD-naar-HDD-COMPRESSION';BACK-UP DATABASE awHDD NAAR SCHIJF ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-naar-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAAM ='test09-TRIPLE_DES_3KEY-HDD-naar-SSD-COMPRESSION';BACK-UP DATABASE awHDD TO DISK ='E:\backup\test10-TRIPLE_DES_3KEY-HDD-naar-SSD-COMPRESSION' .bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD:\backup\test TRIPLE_DES_3KEY-HDD-naar-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-naar-HDION'D'; ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION';BACK-UPDATABASE awSSD NAAR SCHIJF ='E :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION';BACK-UPDATABASE awSSD NAAR SCHIJF ='E:\backup \test12-NO_ENCRYPTION-SSD-naar-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION';BACK-UP DATABASE awSSD NAAR SCHIJF ='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' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-to-HDD-COMPRESSION';BACK-UP DATABASE awSSD NAAR SCHIJF ='E:\ backup\test13-AES_128-SSD-naar-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-naar-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test14-SES_128-S -to-SSD-NO_COMPRESSION';BACK-UP DATABASE awSSD TO DISK ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCertIFICATE =TestCertIFICATE) , NAAM ='test14-AES_128-SSD-naar-H DD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAAM ='test15-AES_192-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =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' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD NAAR SCHIJF ='D:\backup\test16-SD_192-S 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:SCHIJF \backup\test17-AES_256-SSD-naar-HDD-COMPRE SSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-to-HDD-COMPRESSION';BACK-UP DATABASE awSSD NAAR SCHIJF ='E:\backup\test17 -AES_256-SSD-naar-SSD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-naar-SSD-COMPRESSION';BACK-UP DATABASE awSSD NAAR SCHIJF ='E:\backup\test18-AES_256-SSD-naar-SSD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test18-AES_256-SSD-naar- SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =AES_256, SERVER CERTIFICAAT =TestCert), NAAM =TestCert), 'test18-AES_256-SSD-naar-HDD-NO_COMPRESSION';BACK-UP DATABASE awSSD TO DISK ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM_3 KEY , 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' MET INIT, COMPRESSIE, ENCRYPTIE (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-naar-SSD-COMPRESSION';BACK-UP DATABASE awSSD NAAR SCHIJF ='E:\backup\test20-TRIPLE-DE-DE SSD-NO_COMPRESSION.bak' MET INIT, NO_COMPRESSION, ENCRYPTIE (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-naar-SSD-NO_COMPRESSION';BACK-UP DATABASE DIS ='AwSSD NAAR:' \test20-TRIPLE_DES_3KEY-SSD-naar-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-NO-COM-HDD-NO-COM-HDD' pre> 

Ik hoefde niets speciaals te doen om deze te timen, omdat ik alle relevante statistieken uit de msdb-database kon halen nadat ze klaar waren (het enige nadeel is dat de duur alleen wordt gemeten tot in de granulariteit van seconden, tenzij ik wilde om de uitvoer handmatig te ontleden). Dus heb ik de EXEC sp_executesql . verwijderd en GO lijnen (ik wilde elke back-up 10 keer uitvoeren om gemiddelden te krijgen, afwijkingen uit te sluiten, enz.), Druk op F5 en ging aan de slag met een van mijn sessies voor de PASS Summit.

Toen ik terugkwam, heb ik de msdb-tabellen bekeken om de grootte / duur voor elke back-up te krijgen. Deze vraag is vrij eenvoudig:

;WITH x AS( SELECT naam, natuurlijke_grootte =backup_grootte/1024/1024.0, gecomprimeerde_grootte =gecomprimeerde_backup_grootte/1024/1024.0, duur =1.0*DATEDIFF(SECOND, backup_start_datum, backup_einddatum) VANAF msdb.dbo.backupset WAAR naam LIKE 'test %')SELECT name, [natural_size] =MAX(natural_size), [compressed_size] =MAX(compressed_size), [min_duration] =MIN(duration), [max_duration] =MAX(duration), [avg_duration] =AVG(duration) FROM x GROEP OP naamORDER OP naam;

Dit zou me de gegevens geven die ik nodig had om mooie grafieken te maken.

Impact op maat

Afhankelijk van uw ervaring met versleuteling in het algemeen, zal het u misschien niet verbazen dat het versleutelen van een databaseback-up zeer weinig invloed heeft op de totale omvang ervan. Hoe dit werkt, valt zeker buiten het bestek van dit bericht; een eenvoudige verklaring zou zijn dat - althans met AES-codering - compressie niet erg effectief is op het grootste deel van de uitvoer, omdat het in feite willekeurig gebrabbel is.

Het eindresultaat is dat deze grafiek niet erg spannend is. De gecomprimeerde en niet-gecomprimeerde grootte van native back-ups tegen de vier verschillende coderingsmethoden:


Grootte, in MB, van back-ups met en zonder codering

Zoals u kunt zien, was er bijna geen invloed op de grootte van de database - ongeveer 0,03% groter voor een niet-gecomprimeerde back-up en nog eens 0,04% voor een gecomprimeerde back-up.

Impact op prestaties

Hoewel versleuteling een verwaarloosbare invloed had op de grootte, deed het dat wel invloed op de snelheid van de back-up. Maar in sommige gevallen niet op de manier waarop je zou denken. Hier is de algemene meting van de gemiddelde looptijden voor elke benadering:


Gemiddelde duur, in seconden, van verschillende back-ups

Ik verwachtte echt dat de codering altijd een prestatiehit zou veroorzaken, en je zou in je omgeving moeten testen om te zien of je resultaten anders zijn dan de mijne. Ik kom hierop terug om dit bij te werken met een nieuwe grafiek die bepaalde gevallen laat zien die voor mij verrassend waren, en ik zal enkele uitbijterwaarden verwijderen om er zeker van te zijn dat de resultaten echt representatief zijn.

Een waarschuwing

Een belangrijke opmerking:je kunt geen versleutelde back-ups toevoegen. Als u een versleuteld back-upbestand genereert met WITH INIT , en probeer dan nog een versleutelde back-up toe te voegen aan hetzelfde bestand, dan krijg je deze foutmelding:

Msg 3095, Level 16, State 1, Line 11
De back-up kan niet worden uitgevoerd omdat 'ENCRYPTIE' is aangevraagd nadat de media met een incompatibele structuur was geformatteerd. Om aan deze mediaset toe te voegen, laat u 'ENCRYPTIE' weg of maakt u een nieuwe mediaset door WITH FORMAT te gebruiken in uw BACKUP-instructie. Als u WITH FORMAT op een bestaande mediaset gebruikt, worden alle back-upsets overschreven.
Msg 3013, Level 16, State 1, Line 11
BACKUPDATABASE wordt abnormaal beëindigd.

U kunt, verwarrend genoeg, een niet . toevoegen -gecodeerde back-up toen het oorspronkelijke bestand was gecodeerd. Dit is niet de bedoeling, en het is een bug die ik heb gerapporteerd op Connect (#805220, maar het is momenteel gemarkeerd als privé); hopelijk zullen ze dit vóór RTM aanpakken.

In de tussentijd moet je hier voorzichtig zijn, want er is niets veranderd aan de RESTORE HEADERONLY uitvoer om aan te geven of een van de bijgevoegde back-ups versleuteld was. Om dit te ontdekken, moet je de BackupSetGUID . controleren waarde in die uitvoer op Position = 1 , en zoek de bijbehorende backup_set_uuid waarde in msdb.dbo.backupset . Deze tabel heeft nieuwe kolommen om codering te ondersteunen, waar u deze informatie kunt krijgen:key_algorithm , encryptor_thumbprint , en encryptor_type . Dit is problematisch in gevallen waarin u niet over de backupset . beschikt gegevens - misschien is het gewist tijdens onderhoudstaken, of misschien heb je er geen toegang toe omdat je echt aan het herstellen bent van een ramp of alleen het .bak-bestand hebt (of alleen het .bak-bestand om andere redenen). In dit geval hoop ik dat er een andere manier is om aan het back-upbestand te zien dat het is versleuteld (en hoe), maar op het moment van schrijven weet ik geen manier. Ik heb een suggestie (#805292, ook privé) ingediend dat de uitvoer van RESTORE HEADERONLY worden uitgebreid met coderingsinformatie op dezelfde manier waarop het werd uitgebreid met compressie-informatie toen die functie werd toegevoegd in SQL Server 2008.

Wanneer ze deze problemen oplossen (en ik ben ervan overtuigd dat ze dat zullen doen), zal ik al deze ruis verwijderen, maar het is belangrijk om je hiervan bewust te zijn in de tussentijd, als je testen gaat uitvoeren met de huidige CTP's.

Volgende...

Wat dit type back-up betekent voor het herstellen, zal ik in een ander bericht terugzien, wanneer ik de herstelsnelheden test en eventuele probleemgebieden daar onthult. Ik wil deze tests ook opnieuw bekijken om versleutelde logback-ups te onderzoeken.


  1. Parameters gebruiken met een Oracle ODBC-verbinding

  2. ver.2 PyGreSQL ERROR:from _pg import * ImportError:DLL load failed:De opgegeven module kon niet worden gevonden

  3. Zelfstudie SQL-transacties

  4. Wat is het verschil tussen Office 365 en Office 2016?