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

適用対象:SQL Server

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

Diagram explaining the snapshot backup architecture.

既に Azure アカウントをお持ちの場合は、 Azure 仮想マシンの SQL Server にアクセスし、SQL Server がインストール済みの仮想マシンを起動していただけます。

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

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

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

Diagram of the architecture of snapshot feature.

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

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

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

重要

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

Note

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

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

各ファイル スナップショット バックアップ セットには各データベース ファイルのファイル スナップショットが含まれているため、復元プロセスには、最大で隣接する 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_backupsys.fn_db_backup_file_snapshotssp_delete_backup_file_snapshotRESTORE FILELISTONLY」を参照してください。

注意点と制限事項

Premium Storage: Premium Storage を使う際には、次の制限が適用されます。

単一のストレージ アカウント: ファイル スナップショットと保存先の BLOB では、同じストレージ アカウントを使用する必要があります。

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

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

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

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

重要

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

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

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

-- To permit log backups, before the full database backup, modify the database   
-- to use the full recovery model.  
USE master;  
GO  
ALTER DATABASE AdventureWorks2022  
   SET RECOVERY FULL;  
GO  
-- Back up the full AdventureWorks2022 database.  
BACKUP DATABASE AdventureWorks2022   
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak'   
WITH FILE_SNAPSHOT;  
GO  
-- Back up the AdventureWorks2022 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>/AdventureWorks2022_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2022  
 TO URL = @Log_Filename WITH FILE_SNAPSHOT;  
GO  

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

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

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

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

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

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

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

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

警告

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

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

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

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

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

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

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

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

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

警告

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

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

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

次のステップ