sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2014:ネイティブバックアップ暗号化

    今週PASSサミットで発表されるまで多くの人が聞いていなかったSQLServer2014の新機能は、Standard、Business Intelligence、およびEnterprise Editionのネイティブバックアップ暗号化です(申し訳ありませんが、WebおよびExpressはサポートされていません)。これはサードパーティベンダーが長い間提供してきたものであり、最終的に製品に組み込まれ、AES 128、AES 192、AES 256、およびTriple DES(3DES)の4つの暗号化アルゴリズムをサポートします。

    現在、バックアップファイルに暗号化されたデータを含める目的でのみ透過的データ暗号化を使用している場合、これは、TDEがライブシステムに与える影響なしに、その手法から移行して暗号化されたバックアップを作成する方法になる可能性があります。現在、暗号化されたバックアップにサードパーティのツールを使用している場合は、それをネイティブの暗号化されたバックアップの機能とパフォーマンスと比較する必要があります。

    P.S.今すぐCTP2をダウンロードできます。

    私はサードパーティ製品と比較したくありませんでした–それらはすべてうまく機能していると確信しており、おそらく私が考えもしなかった追加機能を備えています。従来のスピニーディスク(RAID 1)とソリッドステートドライブの両方との間で、ネイティブ圧縮の有無にかかわらず、さまざまなアルゴリズムが完全バックアップでどのようなヒットをもたらすかをテストしたかっただけです。

    そこで、AdventureWorks2012データファイルをダウンロードし、2つのコピーを作成して、awSSD.mdfという名前を付けました。 およびawHDD.mdf 、1つをRAID 1ドライブ(D:\)に、もう1つをSSDドライブ(E:\)に配置します。次に、両方をFOR ATTACH_REBUILD_LOGで添付しました 、FULLに設定します リカバリし、デフォルトの自動拡張設定を変更し、その間にログファイルのデフォルトの場所を設定します(これが、再構築されたログファイルの場所を指定する唯一の方法であるため):

     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_reg 、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); 

    次に、Jonathan Kehayiasのこのスクリプトを使用してそれらを拡大しました(データベースとログの両方が意味のある大きさになるように)。これには、HDDとSSDの両方でデータベースごとに約4分かかりました。

    その時点で、EXEC sp_helpfile; データベースごとに次のようになりました。

     name fileid filename size ----------------------- ------ -------- ------ ---- AdventureWorks2012_Data 1  .mdf 1553408 KBAdventureWorks2012_Log 2  .ldf 5605504 KB 

    ここで、暗号化されたバックアップの実行を実際に開始する前に、この機能についていくつか説明します。暗号化を使用するには、証明書(または非対称キー)が必要です。これには、マスターキーが必要になります。証明書を選択し、次のように作成しました:

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

    また、それ自体がバックアップされていない証明書を使用して暗号化されたバックアップを作成しようとすると、警告が表示されます。

    警告:データベース暗号化キーの暗号化に使用される証明書はバックアップされていません。証明書と、証明書に関連付けられている秘密鍵をすぐにバックアップする必要があります。証明書が使用できなくなった場合、またはデータベースを別のサーバーに復元または接続する必要がある場合は、証明書と秘密鍵の両方のバックアップが必要です。そうしないと、データベースを開くことができなくなります。

    私の場合、次のように証明書とマスターキーをバックアップするだけで済みます。

     BACKUP CERTIFICATE TestCert TO FILE ='C:\ temp \ TestCert.cert' WITH PRIVATE KEY(FILE ='C:\ temp \ TestCert.key'、ENCRYPTION BY PASSWORD ='p @ ssw0rd');マスターキーをファイルにバックアップ='C:\ temp \ MasterKey.key' ENCRYPTION BY PASSWORD ='p @ ssw0rd'; 

    厳密に言えば、暗号化されたバックアップを実行するために(または警告を回避するために)マスターキーをバックアップする必要はありませんが、とにかくこれをバックアップする必要があります。また、p@ssw0rdよりも強力なパスワードを使用することをお勧めします。 、C:ドライブ以外の場所に同じマシンに保存するなど。最後に、バックアップを暗号化して適切な予防策を講じないと、災害時に役に立たない可能性があることに注意する必要があります。 。これは、かなりの注意とテストを行わずにオンにする必要がある機能ではありません。

    それがすべて終わったので、私はテストを続けることができました。このシステムにはプラッターベースのディスクが1つとSSDが1つしかないため、SSD->別のSSDまたはHDD->別のHDDをテストできませんでした。一方から他方へ、または同じドライブにのみバックアップします。暗号化を使用してバックアップするための基本的な構文は次のとおりです。

    バックアップデータベース...暗号化あり(アルゴリズム=<アルゴリズム>、サーバー証明書=<証明書>); 

    そして、<algorithm>の4つの可能な値 AES_128です 、AES_192AES_256 およびTRIPLE_DES_3KEY

    そこで、次に、バックアップを実行するスクリプトを生成して、さまざまな組み合わせのパフォーマンスとサイズを比較しました。4つの異なる暗号化アルゴリズム(暗号化なし)、圧縮ありとなし、データの取得元(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(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); 

    非常に複雑に見えますが、実際には40個のBACKUP DATABASEを生成しているだけです。 文字列。グリッドで結果をクリックすると、PRINTではなく、出力全体を表示できるように、XMLとして選択します。 または、グリッド/テキストへの出力を選択すると、に制限されます。この場合の出力は次のとおりです(クリックして表示/非表示):

     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' WITH INIT、COMPRESSION、NAME='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION';バックアップデータベース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';データベースawHDDをディスクにバックアップ='E:\ backup \test03-AES_128-HDD-to-SSD-COMPRESSIO N.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';バックアップデータベースawHDDTO 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 \ 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'; 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 a ='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'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-H DD-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-COMPRE SSION.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 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' 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: \ 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'; pre> 

    これらの時間を計るのに特別なことをする必要はありませんでした。なぜなら、関連するすべての統計を、実行後にmsdbデータベースから取得できたからです(唯一の欠点は、必要な場合を除いて、期間が秒単位でしか測定されないことです。出力を手動で解析します)。そこで、EXEC sp_executesqlのコメントを外しました およびGO 行(平均を取得したり、異常を除外したりするために、各バックアップを10回実行したかった)、F5キーを押して、PASSサミットのセッションの1つに取り組みました。

    戻ってきたとき、msdbテーブルをチェックアウトして、各バックアップのサイズ/期間を取得しました。このクエリは非常に簡単です:

    ; WITH x AS(SELECT name、natural_size =backup_size / 1024 / 1024.0、compressed_size =Compression_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名、[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; 

    これにより、きれいなグラフを作成するために必要なデータが得られます。

    サイズへの影響

    一般的な暗号化の経験によっては、データベースバックアップの暗号化が全体のサイズにほとんど影響を与えないことに驚くかもしれません。これがどのように機能するかは、確かにこの投稿の範囲を超えています。簡単に説明すると、少なくともAES暗号化では、圧縮は基本的にランダムなジブリッシュであるため、ほとんどの出力であまり効果的ではありません。

    最終的な結果として、このチャートはあまりエキサイティングではありません。 4つの異なる暗号化方式に対するネイティブバックアップの圧縮サイズと非圧縮サイズ:


    暗号化ありとなしのバックアップのサイズ(MB単位)

    ご覧のとおり、データベースのサイズへの影響はほとんどありませんでした。非圧縮バックアップの場合はサイズが約0.03%増加し、圧縮バックアップの場合はさらに0.04%増加しました。

    パフォーマンスへの影響

    暗号化によるサイズへの影響はごくわずかでしたが、しました バックアップの速度に影響します。しかし、場合によっては、あなたが思うような方法ではありません。各アプローチの平均実行時間の全体的な測定値は次のとおりです。


    さまざまなバックアップの平均継続時間(秒単位)

    暗号化によって常にパフォーマンスが低下することを本当に期待していました。環境でテストして、結果が私のものと異なるかどうかを確認する必要があります。私は戻ってきて、これを新しいチャートで更新し、私にとって驚くべき特定のケースを示し、結果が本当に代表的であることを確認するためにいくつかの外れ値を削除します。

    警告

    重要な注意事項:暗号化されたバックアップを追加することはできません。 WITH INITを使用して暗号化されたバックアップファイルを生成する場合 、次に別の暗号化されたバックアップを同じファイルに追加しようとすると、次のエラーが発生します:

    メッセージ3095、レベル16、状態1、行11
    メディアが互換性のない構造でフォーマットされた後に「暗号化」が要求されたため、バックアップを実行できません。このメディアセットに追加するには、「ENCRYPTION」を省略するか、BACKUPステートメントでWITHFORMATを使用して新しいメディアセットを作成します。既存のメディアセットでWITHFORMATを使用すると、そのすべてのバックアップセットが上書きされます。
    メッセージ3013、レベル16、状態1、行11
    BACKUPDATABASEが異常終了しています。

    紛らわしいことに、を追加できます -初期ファイルが暗号化されたときの暗号化されたバックアップ。これは意図したものではなく、Connectで報告したバグです(#805220ですが、現在はプライベートとしてマークされています)。うまくいけば、彼らはRTMの前にこれに対処するでしょう。

    それまでの間、RESTORE HEADERONLYについては何も変更されていないため、ここでは注意する必要があります。 同封のバックアップのいずれかが暗号化されているかどうかを示す出力。これを見つけるには、BackupSetGUIDを確認する必要があります Position = 1でのその出力の値 、対応するbackup_set_uuidを見つけます msdb.dbo.backupsetの値 。このテーブルには、暗号化をサポートする新しい列があり、次の情報を取得できます:key_algorithmencryptor_thumbprint 、およびencryptor_type 。これは、backupsetがない場合に問題になります。 データ–メンテナンスタスク中にクリアされた可能性があります。または、実際に災害から回復しているため、または.bakファイルしか持っていない(または他の理由で.bakファイルしか持っていない)ためにアクセスできない可能性があります。この場合、バックアップファイルから暗号化されていること(およびその方法)を他の方法で確認できることを期待していますが、執筆時点では方法がわかりません。 RESTORE HEADERONLYの出力に関する提案(#805292、これもプライベート)を提出しました SQL Server 2008でその機能が追加されたときに圧縮情報で拡張されたのと同じ方法で、暗号化情報で拡張されます。

    彼らがこれらの問題を解決したら(そして私は彼らが解決すると確信しています)、私はこのノイズをすべて取り除きますが、現在のCTPでテストを実行する場合は、当面の間、これに注意することが重要です。

    次は…

    このタイプのバックアップが復元にとって何を意味するのか、復元速度をテストして問題のある領域を明らかにするときに、別の投稿に戻ります。また、暗号化されたログバックアップを調査するために、これらのテストを再検討したいと思います。


    1. MySQLデータベースへのリモートアクセスを有効にする

    2. バージョン11のlocaldbの接続文字列は何ですか

    3. Windows用のPostgreSQLの開発、パート1

    4. MySQLに書き込むときにTextAreaからの改行を保持する