Azure でのデータベース ファイルのスナップショット バックアップ

適用対象: SQL Server (サポートされているすべてのバージョン)

SQL Server ファイル スナップショット バックアップは、Azure Blob Storage を使用して格納したデータベース ファイルを、Azure スナップショットを使用してほぼ瞬時にバックアップし、迅速に復元できます。 この機能により、バックアップと復元のポリシーを簡素化することができます。 Azure Blob Storage を使用してデータベース ファイルを格納する方法の詳細については、「Microsoft Azure 内の SQL Server データ ファイル」を参照してください。

スナップショット バックアップアーキテクチャ図

ダウンロード

  • 2016 (13.x) SQL Serverダウンロードするには、評価センターに移動します。

  • Azure アカウントをすでにお持ちですか? 既にお持ちの場合は、 こちら にアクセスして、 SQL Server がインストール済みの仮想マシンをすぐにご利用いただけます。

Azure のスナップショットを使用した Azure に格納されているデータベース ファイルのバックアップ

SQL Server ファイル スナップショット バックアップとは

ファイル スナップショット バックアップは、データベース ファイルが含まれる BLOB とそれらのファイル スナップショットに対するポインターが含まれるバックアップ ファイルの、一連の Azure スナップショットで構成されます。 各ファイル スナップショットは、コンテナーにベース BLOB とともに格納されています。 バックアップ ファイル自体を URL、ディスク、テープに書き込むように指定できます。 URL へのバックアップをお勧めします。 バックアップの詳細については、「BACKUP (Transact-SQL)」および「URL へのバックアップ」を参照SQL Server。

スナップショット機能のスナップショット機能

ベース BLOB を削除すると、バックアップ セットが無効になり、BLOB とそのファイル スナップショットすべてを明示的に削除するように選択しない限り、ファイル スナップショットが含まれる BLOB を削除できなくなります。 さらに、データベースまたはデータ ファイルを削除しても、ベース BLOB やそのファイル スナップショットは削除されません。 また、バックアップ ファイルを削除しても、そのバックアップ セット内のファイル スナップショットは削除されません。 ファイル スナップショットのバックアップ セットを削除するには、 sys.sp_delete_backup システム ストアド プロシージャを使用します。

データベースの完全バックアップ: ファイル スナップショット バックアップを使用してデータベースの完全バックアップを実行すると、データベースを構成する各データ ファイルとログ ファイルの Azure スナップショットが作成され、トランザクション ログのバックアップ チェーンが確立されて、バックアップ ファイルにファイル スナップショットの場所が書き込まれます。

トランザクション ログのバックアップ: ファイル スナップショット バックアップを使用してトランザクション ログのバックアップを実行すると、(トランザクション ログだけでなく) 各データベース ファイルのファイル スナップショットが作成され、バックアップ ファイルにファイル スナップショットの場所情報が記録されて、トランザクション ログ ファイルが切り捨てられす。

重要

トランザクション ログのバックアップ チェーンの確立に必要な最初の完全バックアップ (ファイル スナップショット バックアップの場合もあり) の後、各トランザクション ログのファイル スナップショット ファイルはすべて、データベースの復元やログの復元の実行に使用できるため、トランザクション ログのバックアップのみを実行するのみで済みます。 データベースの最初の完全バックアップの後は、各ファイル スナップショットや各データベース ファイルのベース BLOB の現状の違いは Azure Blob Storage により処理されるため、データベースの最初の完全バックアップの後は追加の完全バックアップや差分バックアップは不要です。

Note

Microsoft Azure Blob Storage での SQL Server 2016 の使用方法に関するチュートリアルについては、チュートリアル: Microsoft Azure Blob Storage と SQL Server 2016 データベースの使用に関するページをご覧ください。

ファイル スナップショット バックアップを使用した復元

各ファイル スナップショット バックアップ セットには各データベース ファイルのファイル スナップショットが含まれているため、復元プロセスには、最大で隣接する 2 つのファイル スナップショット バックアップ セットが必要です。 これは、バックアップ セットが完全バックアップまたはログ バックアップからのものであるかに関係なく当てはまります。 これは、従来のストリーミング バックアップ ファイルを使用して復元プロセスを実行するときとまったく異なります。 従来のストリーミング バックアップでは、復元プロセスにバックアップ セットのチェーン全体 (完全バックアップ、差分バックアップ、1 つ以上のトランザクション ログのバックアップ) を使用する必要があります。 復元プロセスの復旧の部分は、復元にファイル スナップショット バックアップまたはストリーミング バックアップ セットを使用しているかどうかに関係なく、同じです。

任意のバックアップ セットの時点まで: RESTORE DATABASE 操作を実行して特定のファイル スナップショット バックアップ セットの時点までデータベースを復元するには、ベース BLOB 自体と特定のバックアップ セットのみが必要です。 RESTORE DATABASE 操作を実行するにはトランザクション ログのファイル スナップショット バックアップ セットを使用できるため、この種類の RESTORE DATABASE オプションの実行には通常、トランザクション ログのバックアップ セットを使用し、データベースの完全バックアップ セットをほとんど使用されません。 このトピックの最後に、この手法について説明する例を紹介します。

2 つのファイル スナップショット バックアップ セット間の時点まで: RESTORE DATABASE 操作を実行して、2 つの隣接したトランザクション ログのバックアップ セットの間の特定の時点までデータベースをバックアップするには、2 つのトランザクション ログのバックアップ セット (それぞれデータベースを復元する時点の前後に 1 つ) のみが必要です。 これを実現するには、前の時点のトランザクション ログのファイル スナップショット バックアップ セットを使用して WITH NORECOVERY で RESTORE DATABASE 操作を実行し、後の時点のトランザクション ログのファイル スナップショット バックアップ セットを使用して WITH RECOVERY で RESTORE LOG 操作を実行して、STOPAT 引数を使用してトランザクション ログのバックアップからの復旧を停止する時点を指定します。 このトピックの最後に、この手法について説明する例を紹介します。

ファイル バックアップ セットのメンテナンス

ファイル スナップショット バックアップ セットの削除: FORMAT 引数を使用してファイル スナップショット バックアップ セットを上書きすることはできません。 元のファイル スナップショット バックアップで作成されたファイル スナップショットが孤立したまま残されるのを避けるために、FORMAT 引数は使用できません。 ファイル スナップショットのバックアップ セットを削除するには、 sys.sp_delete_backup システム ストアド プロシージャを使用します。 このストアド プロシージャは、バックアップ セットを構成するバックアップ ファイルとファイル スナップショットを削除します。 別のメソッドを使用してファイル スナップショットのバックアップ セットを削除すると、バックアップ セット内のファイル スナップショットを削除することなくバックアップ ファイルが削除されることがあります。

孤立したバックアップ ファイル スナップショットの削除: バックアップ ファイルが sys.sp_delete_backup システム ストアド プロシージャを使用せずに削除された場合、またはデータベースやデータベース ファイルが含まれる BLOB に関連付けられたバックアップ ファイル スナップショットが存在する間にデータベースやデータベース ファイルが削除された場合は、ファイル スナップショットが孤立している可能性があります。 ファイル スナップショットが孤立していることを特定するには、 sys.fn_db_backup_file_snapshots のシステム関数を使用してデータベース ファイルのすべてのファイル スナップショットを一覧表示します。 ファイル スナップショットが特定のファイル スナップショットのバックアップ セットの一部であることを特定するには、RESTORE FILELISTONLY システム ストアド プロシージャを使用します。 その後、 sys.sp_delete_backup_file_snapshot システム ストアド プロシージャを使用して各バックアップ ファイルの孤立したスナップショットを削除できます。 このトピックの最後に、このシステム関数とこれらのシステム ストアド プロシージャを使用する例を紹介します。 詳細については、「 sp_delete_backup (Transact-SQL)」、「 sys.fn_db_backup_file_snapshots (Transact-SQL)」sp_delete_backup_file_snapshot (Transact-SQL)、RESTORE FILELISTONLY (Transact-SQL)を参照してください。

注意点と制限事項

Premium Storage: Premium Storage を使用するときは、次の制限が適用されます。

単一のストレージ アカウント: ファイル スナップショットと目的の BLOB では同じストレージ アカウントが使用されている必要があります。

一括復旧モデル: 一括ログ復旧モードを使用して最小ログ記録トランザクションを含むトランザクション ログのバックアップを実行するときは、トランザクション ログのバックアップを使用してログの復元 (特定の時点への復旧を含む) を実行することはできません。 代わりに、ファイル スナップショット バックアップ セットの特定の時点までのデータベースの復元を実行します。 この制限は、ストリーミング バックアップの制限と同じです。

オンライン復元: ファイル スナップショット バックアップを使用するときは、オンライン復元を実行することはできません。 オンライン復元の詳細については、「オンライン復元 (SQL Server)」を参照してください。

課金: SQL Server のファイル スナップショット バックアップを使用すると、データの変化に応じて追加料金が発生します。 詳細については、「 スナップショットの課金方法について」を参照してください。

アーカイブ: ファイル スナップショット バックアップをアーカイブする場合は、BLOB ストレージまたはストリーミング バックアップにアーカイブできます。 Blob ストレージにアーカイブするには、ファイル スナップショット バックアップ セット内のスナップショットを別個の BLOB にコピーします。 ストリーミング バックアップにアーカイブするには、ファイル スナップショット バックアップを新しいデータベースとして復元し、圧縮や暗号化を使用した通常のストリーミング バックアップを実行して、必要に応じて、ベース BLOB とは別個にアーカイブします。

重要

複数のファイル スナップショット バックアップの管理には、パフォーマンス上わずかなオーバーヘッドしか発生しません。 ただし、管理するファイル スナップショット バックアップの数が多すぎる場合は、データベースに対してI/O パフォーマンス上の影響を及ぼす可能性があります。 復旧ポイントをサポートする目的において必要なファイル スナップショット バックアップのみを管理することをお勧めします。

ファイル スナップショット バックアップを使用してデータベースとログをバックアップする

次の例では、ファイル スナップショット バックアップを使用して、AdventureWorks2016 のサンプル データベースを URL にバックアップします。

-- To permit log backups, before the full database backup, modify the database   
-- to use the full recovery model.  
USE master;  
GO  
ALTER DATABASE AdventureWorks2016  
   SET RECOVERY FULL;  
GO  
-- Back up the full AdventureWorks2016 database.  
BACKUP DATABASE AdventureWorks2016   
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016.bak'   
WITH FILE_SNAPSHOT;  
GO  
-- Back up the AdventureWorks2016 log using a time stamp in the backup file name.  
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2016  
 TO URL = @Log_Filename WITH FILE_SNAPSHOT;  
GO  

SQL Server ファイル スナップショット バックアップからの復元

次の例では、トランザクション ログのファイル スナップショット バックアップ セットを使用して AdventureWorks2016 データベースを復元し、復旧操作を示します。 データベースは、単一のトランザクション ログ ファイル スナップショットのバックアップ セットから復元できます。

RESTORE DATABASE AdventureWorks2016 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016_2015_05_18_16_00_00.trn'   
WITH RECOVERY, REPLACE;  
GO  

SQL Server ファイル スナップショット バックアップからの特定の時点への復元

次の例では、2 つのトランザクション ログのファイル スナップショット バックアップ セットを使用して AdventureWorks2016 データベースをその特定の時点の状態に復元し、復旧操作を示します。

RESTORE DATABASE AdventureWorks2016 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016_2015_05_18_16_00_00.trn'   
WITH NORECOVERY,REPLACE;  
GO   
  
RESTORE LOG AdventureWorks2016 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016_2015_05_18_18_00_00.trn'   
WITH RECOVERY,STOPAT = 'May 18, 2015 5:35 PM';  
GO  

データベース ファイル スナップショット バックアップ セットを削除する

ファイル スナップショットのバックアップ セットを削除するには、 sys.sp_delete_backup システム ストアド プロシージャを使用します。 データベース名を指定すると、指定されたファイル スナップショット バックアップ セットが実際に指定したデータベースのバックアップであることをシステムが検証します。 データベース名を指定しないと、このような検証が行われることなく、指定したバックアップ セットとそのファイル スナップショットが削除されます。 詳細については、「 sp_delete_backup (Transact-SQL)」を参照してください。

警告

Microsoft Azure 管理ポータルや SQL Server Management Studio の Azure Storage ビューアーなどの別の方法を使用してファイル スナップショット バックアップ セットの削除を試行しても、そのバックアップ セット内のファイル スナップショットは削除されません。 これらのツールは、ファイル スナップショット バックアップ セット内のファイル スナップショットへのポインターが含まれる、バックアップ ファイル自体のみを削除します。 sys.fn_db_backup_file_snapshots システム関数を使用して、バックアップ ファイルが不適切に削除された後にバックアップ ファイル スナップショットが残っていないかを確認し、その後 sys.sp_delete_backup_file_snapshot システム ストアド プロシージャを使用して個々のバックアップ ファイル スナップショットを削除します。

次の例では、指定したバックアップ セットを構成するバックアップ ファイルとファイル スナップショットを含む、指定のファイル スナップショット バックアップ セットを削除します。

sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016.bak', 'adventureworks2016' ;  
GO  
  

データベース バックアップ ファイル スナップショットを表示する

各データベース ファイルのベース BLOB のファイル スナップショットを表示するには、 sys.fn_db_backup_file_snapshots システム関数を使用します。 このシステム関数を使用すると、Azure Blob Storageを使用して格納されたデータベースの各ベース BLOB のすべてのバックアップ ファイル スナップショットを表示できます。 この関数の主な用途は、 sys.sp_delete_backup システム ストアド プロシージャ以外のメカニズムを使用してファイル スナップショット バックアップ セットのバックアップ ファイルを削除した際に、削除されずに残ったデータベースのバックアップ ファイル スナップショットを識別することです。 完全バックアップ セットの一部であるバックアップ ファイル スナップショットと、完全なバックアップ セットに含まれていないバックアップ セットを確認するには、 RESTORE FILELISTONLY システム ストアド プロシージャを使用して、各バックアップ ファイルに属するファイル スナップショットを一覧表示します。 詳細については、「 sys.fn_db_backup_file_snapshots (Transact-SQL)」 および 「RESTORE FILELISTONLY (Transact-SQL)」を参照してください。

次の例は、指定したデータベースのすべてのバックアップ ファイル スナップショットの一覧を返します。

--Either specify the database name or set the database context  
USE AdventureWorks2016  
select * from sys.fn_db_backup_file_snapshots (null) ;  
GO  
select * from sys.fn_db_backup_file_snapshots ('AdventureWorks2016') ;  
GO  
  

個々のデータベース バックアップ ファイル スナップショットを削除する

データベースのベース BLOB の個々のバックアップ ファイル スナップショットを削除するには、 sys.sp_delete_backup_file_snapshot システム ストアド プロシージャを使用します。 このシステム ストアド プロシージャの主な用途は、 sys.sp_delete_backup システム ストアド プロシージャ以外のメソッドを使用してバックアップ ファイルを削除した後に残った、孤立したファイル スナップショット ファイルを削除することです。 詳細については、「 sp_delete_backup_file_snapshot (Transact-SQL)」を参照してください。

警告

ファイル スナップショット バックアップ セットの一部である個々のファイル スナップショットを削除すると、バックアップ セットが無効になります。

次の例では、指定したバックアップ ファイル スナップショットを削除します。 指定したバックアップの URL は、 sys.fn_db_backup_file_snapshots システム関数を使用して取得されました。

sys.sp_delete_backup_file_snapshot N'adventureworks2016', N'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016Data.mdf?snapshot=2015-05-29T21:31:31.6502195Z';  
GO  

参照

チュートリアル: Microsoft Azure Blob Storage と SQL Server 2016 データベースの使用