sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2014:cifrado de copia de seguridad nativo

Una nueva característica de SQL Server 2014 de la que muchos de ustedes no habían oído hablar hasta que se anunció esta semana en PASS Summit es el cifrado de respaldo nativo en las ediciones Standard, Business Intelligence y Enterprise (lo siento, Web y Express no son compatibles). Esto es algo que los proveedores de terceros han estado ofreciendo durante mucho tiempo y finalmente se abre paso en el producto, compatible con cuatro algoritmos de cifrado:AES 128, AES 192, AES 256 y Triple DES (3DES).

Si actualmente está utilizando el Cifrado de datos transparente únicamente con el fin de tener datos cifrados en sus archivos de copia de seguridad, esta podría ser una forma de migrar de esa técnica y tener copias de seguridad cifradas sin el impacto que TDE coloca en su sistema en vivo. Si actualmente utiliza una herramienta de terceros para copias de seguridad cifradas, debe compararla con la funcionalidad y el rendimiento de las copias de seguridad cifradas nativas.

PD Puede descargar CTP2 ahora mismo.

No quería entrar en la comparación con productos de terceros; estoy seguro de que todos hacen un buen trabajo y probablemente tengan características adicionales en las que ni siquiera había pensado. Solo quería probar qué tipo de impacto recibirían los diferentes algoritmos en las copias de seguridad completas, desde y hacia discos giratorios tradicionales (RAID 1) y unidades de estado sólido, y con y sin compresión nativa.

Entonces, descargué el archivo de datos AdventureWorks2012, hice dos copias y las llamé awSSD.mdf y awHDD.mdf y colocó uno en la unidad RAID 1 (D:\) y otro en la unidad SSD (E:\). Luego adjunté ambos con FOR ATTACH_REBUILD_LOG , configúrelos en FULL recuperación, cambió la configuración predeterminada de crecimiento automático y estableció la ubicación predeterminada para los archivos de registro intermedios (ya que esta es la única forma que conozco de especificar la ubicación del archivo de registro reconstruido):

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 (filename='D:\CTP2_Data\awHDD.mdf') FOR 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 = 512000KB);
GO
 
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
  N'Software\Microsoft\MSSQLServer\MSSQLServer', 
  N'DefaultLog', REG_SZ, N'E:\CTP2_Data';
GO
 
CREATE DATABASE awSSD ON (filename='E:\CTP2_Data\awSSD.mdf') FOR 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);

A continuación, los amplié usando este script de Jonathan Kehayias (para que tanto la base de datos como el registro fueran lo suficientemente grandes como para tener sentido). Esto tomó alrededor de 4 minutos por base de datos tanto en HDD como en SSD.

En ese momento, EXEC sp_helpfile; arrojó lo siguiente para cada base de datos:

name                       fileid   filename   size                
-----------------------    ------   --------   ----------
AdventureWorks2012_Data	   1        <db>.mdf   1553408 KB
AdventureWorks2012_Log	   2        <db>.ldf   5605504 KB

Ahora, un par de cosas sobre esta función antes de que podamos comenzar a realizar copias de seguridad cifradas. Debe tener un certificado (o clave asimétrica) para usar el cifrado, y esto a su vez requerirá una clave maestra. Elegí un certificado y lo creé de la siguiente manera:

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'p@ssw0rd';
GO
CREATE CERTIFICATE TestCert WITH SUBJECT = 'EncryptionTesting';
GO

También recibe una advertencia si intenta crear una copia de seguridad cifrada utilizando un certificado que no ha sido respaldado:

Advertencia:No se ha realizado una copia de seguridad del certificado utilizado para cifrar la clave de cifrado de la base de datos. Inmediatamente debe hacer una copia de seguridad del certificado y la clave privada asociada con el certificado. Si el certificado deja de estar disponible o si debe restaurar o adjuntar la base de datos en otro servidor, debe tener copias de seguridad tanto del certificado como de la clave privada o no podrá abrir la base de datos.

En mi caso, solo podría hacer una copia de seguridad del certificado y la clave maestra, así:

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

Estrictamente hablando, no es necesario hacer una copia de seguridad de la clave maestra para realizar una copia de seguridad cifrada (o incluso para evitar la advertencia), pero debe hacer una copia de seguridad de todos modos. Y probablemente querrá usar una contraseña más fuerte que p@ssw0rd , guárdelo en otro lugar que no sea la unidad C:en la misma máquina, etc. Finalmente, debe tener en cuenta que si encripta sus copias de seguridad y no toma todas las precauciones adecuadas, pueden ser inútiles en caso de desastre. . Esta no es una función que deba activar sin una buena cantidad de diligencia y pruebas.

Con todo eso fuera del camino, podría continuar con las pruebas. Este sistema solo tiene un solo disco basado en plato y un solo SSD, por lo que no pude probar SSD -> SSD diferente o HDD -> HDD diferente; solo haciendo copias de seguridad de uno a otro, o al mismo disco. La sintaxis básica para realizar copias de seguridad con cifrado es:

BACKUP DATABASE ... WITH ENCRYPTION 
  (ALGORITHM = <algorithm>, SERVER CERTIFICATE = <certificate>);

Y los cuatro valores posibles para <algorithm> son AES_128 , AES_192 , AES_256 y TRIPLE_DES_3KEY .

Entonces, a continuación, generé el script para ejecutar las copias de seguridad para comparar el rendimiento y el tamaño de varias combinaciones:los cuatro algoritmos de cifrado diferentes (y sin cifrado), con y sin compresión, de dónde provienen los datos (HDD o SSD) y dónde. los datos se respaldan en (HDD o SSD). Son 40 copias de seguridad diferentes, y el script que usé para generarlo se ve así:

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')) 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 (ALGORITHM = ' + m + ', SERVER CERTIFICATE = TestCert),', '') + '
 NAME = ''' + 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) 
      FROM s CROSS JOIN m CROSS JOIN c CROSS JOIN d
   ) AS x
) AS y ORDER BY r;
 
--EXEC sp_executesql @sql;
--GO 10
 
SELECT CONVERT(XML, @sql);

Parece realmente complicado, pero en realidad solo genera 40 BACKUP DATABASE instrumentos de cuerda. Selecciono como XML para que, cuando haga clic en los resultados en la cuadrícula, pueda ver la salida completa, en lugar de lo que PRINT o seleccionar la salida a cuadrícula/texto lo limitará. El resultado en este caso es el siguiente (haga clic para mostrar/ocultar):

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';
BACKUP DATABASE awHDD TO DISK = 'E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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_COMPRESSION';
BACKUP DATABASE awHDD TO 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'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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_COMPRESSION.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\test07-AES_256-HDD-to-HDD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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\test08-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';
BACKUP DATABASE awHDD 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 CERTIFICATE = TestCert),
 NAME = 'test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION';
BACKUP DATABASE awHDD TO DISK = 'E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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-SSD-NO_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 TO DISK = 'D:\backup\test10-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-to-HDD-NO_COMPRESSION';
BACKUP DATABASE awSSD TO DISK = '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-SSD-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'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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-SSD-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 (ALGORITHM = AES_128, SERVER CERTIFICATE = TestCert),
 NAME = 'test14-AES_128-SSD-to-HDD-NO_COMPRESSION';
BACKUP DATABASE awSSD TO DISK = 'D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = AES_192, SERVER CERTIFICATE = TestCert),
 NAME = 'test15-AES_192-SSD-to-HDD-COMPRESSION';
BACKUP DATABASE awSSD TO DISK = 'E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (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'
 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_192-SSD-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 DISK = 'D:\backup\test17-AES_256-SSD-to-HDD-COMPRESSION.bak'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = 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 TO 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 = TestCert),
 NAME = '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_3KEY, SERVER CERTIFICATE = 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'
 WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM = TRIPLE_DES_3KEY, SERVER CERTIFICATE = TestCert),
 NAME = 'test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION';
BACKUP DATABASE awSSD TO DISK = 'E:\backup\test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_COMPRESSION.bak'
 WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM = TRIPLE_DES_3KEY, SERVER CERTIFICATE = TestCert),
 NAME = 'test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_COMPRESSION';
BACKUP DATABASE awSSD TO DISK = 'D:\backup\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-HDD-NO_COMPRESSION';

No necesité hacer nada especial para cronometrarlos, porque pude obtener todas las estadísticas relevantes de la base de datos msdb después de que terminaron (el único inconveniente es que la duración solo se mide en segundos, a menos que quisiera para analizar la salida manualmente). Así que eliminé el comentario del EXEC sp_executesql y GO líneas (quería ejecutar cada copia de seguridad 10 veces para obtener promedios, descartar anomalías, etc.), presioné F5 y me puse a trabajar en una de mis sesiones para PASS Summit.

Cuando regresé, revisé las tablas msdb para obtener los tamaños/duraciones de cada copia de seguridad. Esta consulta es bastante simple:

;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_finish_date)
  FROM msdb.dbo.backupset 
  WHERE name 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 
GROUP BY name
ORDER BY name;

Esto me daría los datos que necesitaba para hacer algunos gráficos bonitos.

Impacto en el tamaño

Dependiendo de su experiencia con el cifrado en general, puede que le sorprenda o no que cifrar una copia de seguridad de la base de datos tenga muy poco impacto en su tamaño total. Cómo funciona esto está más allá del alcance de esta publicación, con certeza; una explicación simple sería que, al menos con el cifrado AES, la compresión no es muy efectiva en la mayor parte de la salida porque es básicamente un galimatías aleatorio.

El resultado final es que este gráfico no es muy emocionante. Los tamaños comprimidos y no comprimidos de las copias de seguridad nativas frente a los cuatro métodos de cifrado diferentes:


Tamaño, en MB, de las copias de seguridad con y sin cifrado

Como puede ver, hubo un impacto casi nulo en el tamaño de la base de datos:alrededor de un 0,03 % más de tamaño para una copia de seguridad sin comprimir y un 0,04 % adicional para una copia de seguridad comprimida.

Impacto en el rendimiento

Si bien el cifrado tuvo un impacto insignificante en el tamaño, lo hizo afectar la velocidad de la copia de seguridad. Pero en algunos casos, no de la manera que pensarías. Esta es la medida general de tiempos de ejecución promedio para cada enfoque:


Duración promedio, en segundos, de varias copias de seguridad

Realmente esperaba que el cifrado siempre causara un impacto en el rendimiento, y debe probar en su entorno para ver si sus resultados son diferentes a los míos. Volveré y actualizaré esto con un nuevo gráfico que muestra casos particulares que me sorprendieron y eliminaré algunos valores atípicos para asegurarme de que los resultados sean realmente representativos.

Una advertencia

Una nota importante:no puede agregar copias de seguridad cifradas. Si genera un archivo de respaldo encriptado usando WITH INIT y luego intente agregar otra copia de seguridad cifrada al mismo archivo, recibirá este error:

Mensaje 3095, nivel 16, estado 1, línea 11
No se puede realizar la copia de seguridad porque se solicitó 'ENCRIPTACIÓN' después de formatear el medio con una estructura incompatible. Para agregar a este conjunto de medios, omita 'ENCRIPTACIÓN' o cree un nuevo conjunto de medios utilizando CON FORMATO en su declaración de RESPALDO. Si utiliza CON FORMATO en un conjunto de medios existente, se sobrescribirán todos sus conjuntos de copia de seguridad.
Mensaje 3013, nivel 16, estado 1, línea 11
BACKUP DATABASE finaliza de manera anormal.

Puede, de manera confusa, agregar un no -Copia de seguridad encriptada cuando el archivo inicial fue encriptado. Esta no es la intención, y es un error que informé en Connect (#805220, pero actualmente está marcado como privado); con suerte, abordarán esto antes de RTM.

Mientras tanto, debe tener cuidado aquí porque no se ha cambiado nada sobre RESTORE HEADERONLY salida para indicar si alguna de las copias de seguridad adjuntas estaba cifrada. Para descubrir esto, deberá verificar el BackupSetGUID valor en esa salida en Position = 1 y busque el backup_set_uuid correspondiente valor en msdb.dbo.backupset . Esta tabla tiene nuevas columnas para admitir el cifrado, donde puede obtener esta información:key_algorithm , encryptor_thumbprint y encryptor_type . Esto es problemático en los casos en que no tiene el backupset datos:tal vez se hayan borrado durante las tareas de mantenimiento, o tal vez no pueda acceder a ellos porque realmente se está recuperando de un desastre o solo tiene el archivo .bak (o solo tiene el archivo .bak por otras razones). En este caso, espero que haya alguna otra forma de saber a partir del archivo de copia de seguridad que se ha cifrado (y cómo), pero en el momento de escribir este artículo no conozco ninguna forma. Presenté una sugerencia (#805292, también privada) de que la salida de RESTORE HEADERONLY aumentarse con información de cifrado de la misma manera que se aumentó con información de compresión cuando se agregó esa función en SQL Server 2008.

Cuando resuelvan estos problemas (y estoy seguro de que lo harán), eliminaré todo este ruido, pero es importante tener esto en cuenta mientras tanto, si va a realizar alguna prueba con los CTP actuales.

Siguiente...

Lo que este tipo de respaldo significa para la restauración, lo mencionaré en otra publicación, cuando pruebe las velocidades de restauración y revele cualquier área problemática allí. También quiero revisar estas pruebas para investigar las copias de seguridad de registros cifrados.