次の方法で共有


データベース スナップショットの作成 (Transact-SQL)

SQL Server データベース スナップショットを作成する唯一の方法は、 を使用することです。 SQL Server Management Studio では、データベース スナップショットの作成はサポートされていません。

始める前に

前提条件

任意の復旧モデルを使用できるソース データベースは、次の前提条件を満たす必要があります。

  • サーバー インスタンスで、データベース スナップショットをサポートする SQL Server のエディションが実行されている必要があります。 SQL Server 2014 でのデータベース スナップショットのサポートについては、「 Features Supported by the Editions of SQL Server 2014」を参照してください。

  • ソース データベースは、データベース ミラーリング セッション内のミラー データベースである場合を除き、オンラインである必要があります。

  • ミラー データベースにデータベース スナップショットを作成するには、データベースは "同期済み" のミラーリング状態になっている必要があります。

  • ソース データベースは、スケーラブルな共有データベースとして構成できません。

重要

その他の重要な考慮事項については、「Database Snapshots (SQL Server)を参照してください。

推奨事項

このセクションでは、次のベスト プラクティスについて説明します。

ベスト プラクティス: データベース スナップショットの名前付け

スナップショットを作成する前に、名前付けの方法を検討することが重要です。 各データベース スナップショットでは、一意のデータベース名が必要になります。 管理を容易にするために、次のようなデータベースを識別する情報を、スナップショット名に含めることができます。

  • ソース データベースの名前。

  • 新しい名前がスナップショット用であるという指示

  • 任意のデータベース上のシーケンシャル スナップショットを区別するための、スナップショットの作成日や作成時刻、シーケンス番号、日時などの他のいくつかの情報

たとえば、 AdventureWorks2012 データベースの一連のスナップショットについて考えてみます。 24 時間形式のクロックに基づいて、午前 6 時から午後 6 時までの間に、毎日 3 つのスナップショットが作成されます。 毎日の各スナップショットは、24 時間保持された後削除され、同じ名前の新しいスナップショットに置き換えられます。 各スナップショット名は、次のように時刻を示しますが、日付は示しません。

AdventureWorks_snapshot_0600  
AdventureWorks_snapshot_1200  
AdventureWorks_snapshot_1800  

しかし、毎日のスナップショットの作成時刻が日によって異なる場合、あまり明確でない名前付け規則が適している場合もあります。たとえば次のような名前にします。

AdventureWorks_snapshot_morning  
AdventureWorks_snapshot_noon  
AdventureWorks_snapshot_evening  

ベスト プラクティス: データベース スナップショット数の制限

一連のスナップショットを長期にわたって作成することで、ソース データベースのシーケンシャルなスナップショットがキャプチャされます。 各スナップショットは、明示的に削除されるまで保持されます。 元のページが更新されるにつれて、各スナップショットが継続的に拡張されるので、新しいスナップショットの作成後に古いスナップショットを削除するとディスク領域を節約できます。

Note

データベース スナップショットに戻す場合は、そのデータベースから他のすべてのスナップショットを削除する必要があります。

ベスト プラクティス: データベース スナップショットへのクライアント接続

データベース スナップショットを使用するには、クライアントはそのスナップショットを見つける場所を認識している必要があります。 ユーザーは、あるデータベース スナップショットが作成または削除されている間でも、他のデータベース スナップショットから読み取ることができます。 ただし、既存のスナップショットを新しいスナップショットに置き換えるときに、クライアントを新しいスナップショットにリダイレクトする必要があります。 ユーザーは、SQL Server Management Studio を使用してデータベース スナップショットに手動で接続できます。 ただし、実稼働環境をサポートするには、ユーザーが意識しないうちにレポート作成クライアントをデータベースの最新のデータベース スナップショットにリダイレクトするような、プログラム ソリューションを作成する必要があります。

セキュリティ

アクセス許可

データベースを作成できるすべてのユーザーが、データベース スナップショットを作成できます。ただし、ミラー データベースのスナップショットを作成するには、 sysadmin 固定サーバー ロールのメンバーであることが必要です。

データベース スナップショットの作成方法 (Transact-SQL の使用)

データベース スナップショットを作成するには

Note

この手順の例については、このセクションの後半の「 例 (Transact-SQL)」を参照してください。

  1. ソース データベースの現在のサイズに基づいて、データベース スナップショットを格納するのに十分なディスク領域があることを確認します。 データベース スナップショットの最大サイズは、スナップショット作成時におけるソース データベースのサイズです。 詳細については、「データベース スナップショットのスパース ファイルのサイズを表示する方法 (Transact-SQL)」を参照してください。

  2. AS SNAPSHOT OF 句を使用して、CREATE DATABASE ステートメントをファイルに対して実行します。 スナップショットを作成するには、ソース データベースの各データベース ファイルの論理名を指定する必要があります。 構文は次のとおりです。

    CREATE DATABASE database_snapshot_name

    ON

    (

    NAME =logical_file_name,

    FILENAME ='os_file_name'

    ) [ ,...n ]

    AS SNAPSHOT OF source_database_name

    [;]

    ここで、*source_*database_name はソース データベースです。 logical_file_name iファイルを参照するときに SQL Server で使用される論理名、 os_file_name はファイルの作成時にオペレーティング システムによって使用されるパスとファイル名、 database_snapshot_name はデータベースを元に戻すスナップショットの名前です。 この構文の詳しい説明については、「CREATE DATABASE (SQL Server Transact-SQL)」を参照してください。

    Note

    データベース スナップショットを作成する場合、ログ ファイル、オフラインのファイル、復元中のファイル、および機能していないファイルを CREATE DATABASE ステートメントで使用することはできません。

例 (Transact-SQL)

Note

この例で使用している拡張子 .ss は任意です。

このセクションには、次の例が含まれています。

A. AdventureWorks データベースのスナップショットを作成する

この例では、 AdventureWorks データベースのデータベース スナップショットを作成します。 スナップショット名 AdventureWorks_dbss_1800と、そのスパース ファイルの名前 AdventureWorks_data_1800.ssは、作成時間が午後 6 時 (1,800 時間) であることを示しています。

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks;  
GO  

B. Sales データベースのスナップショットを作成する

この例では、 sales_snapshot1200データベースのデータベース スナップショット Sales を作成します。 このデータベースは CREATE DATABASE (SQL Server Transact-SQL). の例「ファイル グループのあるデータベースを作成する」で作成したものです。

--Creating sales_snapshot1200 as snapshot of the  
--Sales database:  
CREATE DATABASE sales_snapshot1200 ON  
( NAME = SPri1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'),  
( NAME = SPri2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'),  
( NAME = SGrp1Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'),  
( NAME = SGrp1Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'),  
( NAME = SGrp2Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'),  
( NAME = SGrp2Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss')  
AS SNAPSHOT OF Sales;  
GO  

Related Tasks

参照

CREATE DATABASE (SQL Server Transact-SQL)
データベース スナップショット (SQL Server)