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

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

  • **作業を開始する準備: **

    前提条件

    セキュリティ

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

  • データベース スナップショットを作成するには: Transact-SQL

作業を開始する準備

前提条件

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

  • データベース スナップショットをサポートする SQL Server エディションでサーバー インスタンスが実行されている必要があります。SQL Server 2012 におけるデータベース スナップショットのサポートについては、「SQL Server 2012 の各エディションがサポートする機能」を参照してください。 

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

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

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

重要な注意事項重要

その他の重要な考慮事項については、「データベース スナップショット (SQL Server)」を参照してください。

推奨事項

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

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

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

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

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

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

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

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

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

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

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

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

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

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

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

注意

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

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

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

[先頭に戻る]

セキュリティ

権限

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

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

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

注意

この手順の例については、このセクションの後半の「例 (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はファイルを参照するときに SQL Server で使用される論理名、os_file_name はファイルを作成する際にオペレーティング システムが使用するパスとファイル名、database_snapshot_name はデータベースを戻す対象になるスナップショットの名前です。 この構文の説明については、「CREATE DATABASE (Transact-SQL)」を参照してください。

    注意

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

例 (Transact-SQL)

注意

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

ここでは、次の例について説明します。

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

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

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\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )
AS SNAPSHOT OF AdventureWorks;
GO

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

この例では、Sales データベースのデータベース スナップショット sales_snapshot1200 を作成します。 このデータベースは CREATE DATABASE (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\MSSQL11.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'),
( NAME = SPri2_dat, FILENAME = 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'),
( NAME = SGrp1Fi1_dat, FILENAME = 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'),
( NAME = SGrp1Fi2_dat, FILENAME = 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'),
( NAME = SGrp2Fi1_dat, FILENAME = 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'),
( NAME = SGrp2Fi2_dat, FILENAME = 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss')
AS SNAPSHOT OF Sales
GO

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連タスク

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

参照

CREATE DATABASE (Transact-SQL)

概念

データベース スナップショット (SQL Server)