RESTORE (Transact-SQL)

更新 : 2006 年 12 月 12 日

BACKUP コマンドで作成したバックアップを復元します。このコマンドでは次の処理を実行できます。

  • 完全データベース バックアップからデータベース全体を復元する (完全復元)。
  • データベースの一部を復元する (部分復元)。
  • 特定のファイル、ファイル グループ、ページをデータベースに復元する (ファイル復元またはページ復元)。
  • トランザクション ログをデータベースに復元する (トランザクション ログ復元)。
  • データベース スナップショットでキャプチャされた時点にデータベースを戻す。

データベースのバックアップと復元の詳細については、「SQL Server でのデータベースのバックアップおよび復元」を参照してください。

ms186858.note(ja-jp,SQL.90).gifメモ :
引数の説明については、「RESTORE の引数 (Transact-SQL)」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

 --To restore a complete database from a full database backup (a Complete Restore): RESTORE DATABASE { database_name | @database_name_var }  [ FROM <backup_device> [ ,...n ] ] [ WITH     [ { CHECKSUM | NO_CHECKSUM } ]    [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]    [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]     [ [ , ] KEEP_REPLICATION ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]     [ [ , ] MEDIAPASSWORD = { mediapassword |                     @mediapassword_variable } ]     [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]                  [ ,...n ]     [ [ , ] PASSWORD = { password | @password_variable } ]      [ [ , ] BLOCKSIZE = { blocksize | @blocksize_variable } ]      [ [ , ] BUFFERCOUNT = { buffercount | @buffercount_variable } ]     [ [ , ]    MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } ]     [ [ , ] ENABLE_BROKER ]     [ [ , ] ERROR_BROKER_CONVERSATIONS ]     [ [ , ] NEW_BROKER ]     [ [ , ] { RECOVERY | NORECOVERY | STANDBY =            {standby_file_name | @standby_file_name_var }     } ]     [ [ , ] REPLACE ]     [ [ , ] RESTART ]     [ [ , ] RESTRICTED_USER ]     [ [ , ] { REWIND | NOREWIND } ]     [ [ , ] { UNLOAD | NOUNLOAD } ]     [ [ , ] STATS [ = percentage ] ]      [ [ , ] { STOPAT = { 'date_time' | @date_time_var }      |  STOPATMARK = { 'lsn:lsn_number' }               [ AFTER 'datetime' ]      |  STOPBEFOREMARK = { 'lsn:lsn_number' }              [ AFTER 'datetime' ]    } ]  ] [;] 
 <backup_device> ::= {     { logical_backup_device_name |             @logical_backup_device_name_var }    | { DISK | TAPE } = { 'physical_backup_device_name' |               @physical_backup_device_name_var }  }  
 --Restore part of a database (a partial restore): RESTORE DATABASE { database_name | @database_name_var }    <files_or_filegroups> [ ,...n ]   [ FROM <backup_device> [ ,...n ] ]   [ WITH       PARTIAL     [ [ , ] { CHECKSUM | NO_CHECKSUM } ]    [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]    [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]     [ [ , ] MEDIAPASSWORD = { mediapassword |                       @mediapassword_variable } ]     [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]                  [ ,...n ]     [ [ , ] PASSWORD = { password | @password_variable } ]     [ [ , ] NORECOVERY ]     [ [ , ] REPLACE ]     [ [ , ] RESTART ]     [ [ , ] RESTRICTED_USER ]    [ [ , ] { REWIND | NOREWIND } ]     [ [ , ] { UNLOAD | NOUNLOAD } ]     [ [ , ] STATS [=percentage ] ]     [ [ , ] { STOPAT = { 'date_time' | @date_time_var }      |  STOPATMARK = { 'lsn:lsn_number' }               [ AFTER 'datetime' ]      |  STOPBEFOREMARK = { 'lsn:lsn_number' }              [ AFTER 'datetime' ]     } ]  ] [;]  <backup_device> ::= {     { logical_backup_device_name |             @logical_backup_device_name_var }    | { DISK | TAPE } = { 'physical_backup_device_name' |               @physical_backup_device_name_var }  }   <files_or_filegroups> ::=  {     FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }     |    FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }     |     READ_WRITE_FILEGROUPS }  
 --To Restore Specific Files, Filegroups, or Pages:  RESTORE DATABASE { database_name | @database_name_var }       <file_or_filegroup_or_pages> [ ,...n ] [ FROM <backup_device> [ ,...n ] ]  [ WITH     [ { CHECKSUM | NO_CHECKSUM } ]    [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]    [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
    [ [ , ] MEDIAPASSWORD = { mediapassword |                       @mediapassword_variable } ]    [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]                  [ ,...n ]     [ [ , ] PASSWORD = { password | @password_variable } ]     [ [ , ] NORECOVERY ]     [ [ , ] REPLACE ]     [ [ , ] RESTART ]     [ [ , ] RESTRICTED_USER ]    [ [ , ] { REWIND | NOREWIND } ]     [ [ , ] { UNLOAD | NOUNLOAD } ]     [ [ , ] STATS [ =percentage ] ]  ] [;]  <backup_device> ::= {     { logical_backup_device_name |             @logical_backup_device_name_var }    | { DISK | TAPE } = { 'physical_backup_device_name' |               @physical_backup_device_name_var }  }   <file_or_filegroup_or_pages> ::= {     FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }    | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }       | PAGE = 'file:page [ ,...n ]'   }  
 --To Restore a Transaction Log: RESTORE LOG { database_name | @database_name_var }       [ <file_or_filegroup_or_pages> [ ,...n ] ] [ FROM <backup_device> [ ,...n ] ]  [ WITH     [ { CHECKSUM | NO_CHECKSUM } ]    [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]    [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]     [ [ , ] KEEP_REPLICATION ]     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable }      ]    [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]                  [ ,...n ]     [ [ , ] PASSWORD = { password | @password_variable } ]     [ [ , ] { RECOVERY | NORECOVERY | STANDBY =            {standby_file_name | @standby_file_name_var } }    ]     [ [ , ] REPLACE ]     [ [ , ] RESTART ]     [ [ , ] RESTRICTED_USER ]    [ [ , ] { REWIND | NOREWIND } ]     [ [ , ] { UNLOAD | NOUNLOAD } ]     [ [ , ] STATS [=percentage ] ]     [ [ , ] { STOPAT = { 'date_time' | @date_time_var }      |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }               [ AFTER 'datetime' ]      |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }              [ AFTER 'datetime' ]     } ]  ] [;]  <backup_device> ::= {     { logical_backup_device_name |             @logical_backup_device_name_var }    | { DISK | TAPE } = { 'physical_backup_device_name' |               @physical_backup_device_name_var }  }   <file_or_filegroup_or_pages> ::= {     FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }    | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }       | PAGE = 'file:page [ ,...n ]'   } 
 --To Revert a Database to a Database Snapshot:    RESTORE DATABASE { database_name | @database_name_var }  FROM DATABASE_SNAPSHOT = database_snapshot_name  

引数

引数の説明については、「RESTORE の引数 (Transact-SQL)」を参照してください。

解説

オフライン復元を実行しているときに、指定したデータベースが使用中の場合、RESTORE を実行してしばらくするとユーザーは強制的に切断されます。プライマリ ファイル グループ以外のオンライン復元では、復元するファイル グループがオフラインにならなければ、データベースの使用を続けることができます。指定したデータベース内のデータはすべて、復元されたデータに置き換えられます。

データベース復旧の詳細については、「SQL Server でのバックアップの復元と復旧の動作について」および「SQL Server データベースの復元シナリオの実装」を参照してください。

1 つのプラットフォームから別のプラットフォームへの復元操作は、異なる種類のプロセッサ間でも、オペレーティング システムでデータベースの照合順序がサポートされていれば実行できます。

エラーが発生した場合は RESTORE を再開できます。また、エラーに関係なく RESTORE を続行することもできます。この場合は、復元可能なデータが復元されます (CONTINUE_AFTER_ERROR オプションを参照してください)。詳細については、「バックアップの破損による SQL Server 復元エラーの対応」を参照してください。

RESTORE は、明示的または暗黙的なトランザクションでは使用できません。

損傷した master データベースを復元する場合は、特別な手順に従います。詳細については、「master データベースの復元に関する注意点」を参照してください。

Microsoft SQL Server 2005 で作成したバックアップを、以前のバージョンの SQL Server に復元することはできません。

データベースを復元すると、SQL Server のインスタンスのプラン キャッシュが消去されます。プラン キャッシュが消去されると、後続のすべての実行プランが再コンパイルされ、場合によっては、クエリ パフォーマンスが一時的に急激に低下します。SQL Server 2005 Service Pack 2 では、プラン キャッシュ内のキャッシュストアが消去されるたびに、"SQL Server は、一部のデータベース メンテナンス操作または再構成操作により、'%s' キャッシュストア (プラン キャッシュの一部) のキャッシュストア フラッシュを %d 個検出しました。" という情報メッセージが SQL Server エラー ログに記録されます。このメッセージは、キャッシュが 5 分以内にフラッシュされる場合に限り、その間隔でログに記録されます。

復元シナリオ

SQL Server 2005 ではさまざまな復元シナリオがサポートされています。

  • 完全なデータベース復元
    最初に完全データベース バックアップを行い、次に必要に応じて差分データベース バックアップ (およびログ バックアップ) の復元を行って、データベース全体を復元します。詳細については、「データベースの全体復元の実行 (単純復旧モデル)」または「データベースの全体復元の実行 (完全復旧モデル)」を参照してください。
  • ファイル復元
    マルチ ファイル グループ データベースのファイルまたはファイル グループを復元します。単純復旧モデルでは、ファイルは読み取り専用のファイル グループに属している必要があります。完全なファイル復元を行った後で、差分ファイル バックアップを復元できます。詳細については、「ファイル復元の実行 (完全復旧モデル)」および「ファイル復元の実行 (単純復旧モデル)」を参照してください。
  • ページ復元
    個々のページを復元します。ページ復元は、完全復旧モデルと一括ログ復旧モデルでのみ利用できます。詳細については、「ページ復元の実行」を参照してください。
  • 段階的な部分復元
    プライマリ ファイル グループと、1 つ以上のセカンダリ ファイル グループの復元から始めて、データベースを段階的に復元します。段階的な部分復元の最初の段階では、RESTORE DATABASE を PARTIAL オプションで実行し、このとき 1 つ以上のセカンダリ ファイル グループを指定します。詳細については、「段階的な部分復元の実行」を参照してください。
  • 復旧のみ
    データベース内でデータの一貫性が保たれており、単にデータを使用可能にするだけの場合に行います。詳細については、「データを復元せずにデータベースを復旧する方法」を参照してください。
  • トランザクション ログの復元
    完全な復旧モデルまたは一括ログ復旧モデルで、目的の復旧ポイントに戻すには、ログ バックアップの復元が必要です。ログ バックアップの復元の詳細については、「トランザクション ログ バックアップの適用」を参照してください。
  • ミラー データベースの作成
    詳細については、「ミラーリング用のミラー データベースを準備する方法 (Transact-SQL)」を参照してください。
  • スタンバイ サーバーの作成と管理スタンバイ サーバーの詳細については、「ウォーム スタンバイ サーバーの使用」を参照してください。

旧バージョンとの互換性

旧バージョンとの互換性を維持するために、RESTORE ステートメントの構文で次のキーワードを使用できます。

  • LOAD キーワード。RESTORE キーワードの代わりに使用できます。
  • TRANSACTION キーワード。LOG キーワードの代わりに使用できます。
  • DBO_ONLY キーワード。RESTRICTED_USER キーワードの代わりに使用できます。

vardecimal ストレージ形式に対応したデータベース

vardecimal ストレージ形式でバックアップと復元を正常に行うには、データベース エンジンを SQL Server 2005 Service Pack 2 以上にアップグレードする必要があります。圧縮されたデータベースのバックアップを、圧縮を解除したデータベースに復元することはできません。また、圧縮した Service Pack 2 データベースのバックアップを以前のバージョンの SQL Server に復元することもできません。vardecimal ストレージ形式の詳細については、「decimal データの可変長での格納」を参照してください。

RECOVERY と NORECOVERY の比較

ロールバックは、RESTORE ステートメントの RECOVERY および NORECOVERY オプションで制御されます。

  • NORECOVERY では、ロールバックを実行しないよう指定します。こうすると、ロールフォワードしてそのままシーケンス内の次のステートメントを実行できます。
    この場合、復元シーケンスでは他のバックアップを復元してそれらをロールフォワードできます。
  • RECOVERY (既定) では、現在のバックアップのロールフォワードが完了した後ロールバックを実行するよう指定します。
    データベースを復旧するには、復元されるデータセット全体 (ロールフォワード セット) とデータベースの間で一貫性が保たれている必要があります。ロールフォワード セットがデータベースと一貫性を保てる位置まで十分にロールフォワードされていない場合は、RECOVERY を指定すると、データベース エンジンによってエラーが返されます。

復元の再実行

復元の結果を元に戻すことはできませんが、ファイル単位で最初からやり直して、データ コピーとロールフォワードの結果を取り消すことができます。最初からやり直すには、目的のファイルを復元してもう一度ロールフォワードを実行します。たとえば、間違って必要以上のログ バックアップを復元し、予定の停止ポイントを過ぎてしまった場合は、復元シーケンスを再開する必要があります。

復元シーケンスは途中で中断でき、影響があったファイルの内容全体を復元することで再開できます。

フルテキスト データの復元

SQL Server 2005 で完全復元を実行すると、フルテキスト データは他のデータベース データと共に復元されます。復元操作では、フルテキスト カタログはファイルとして扱われます。標準の構文 RESTORE DATABASE database_name FROM backup_device を使用すると、フルテキスト ファイルはデータベース ファイルの復元の一部として復元されます。

RESTORE ステートメントでは、フルテキスト データに対し、代替位置への復元、差分復元、ファイルとファイル グループの復元、ファイルとファイル グループの差分復元を行うこともできます。また、RESTORE ではデータベース データと同様にフルテキスト ファイルだけを復元することもできます。

ms186858.note(ja-jp,SQL.90).gifメモ :
フルテキスト カタログをルート ディレクトリに復元することはできません。

詳細については、「フルテキスト カタログのバックアップと復元」を参照してください。

データベースの設定と復元

復元を実行すると、ALTER DATABASE を使用して設定できるデータベース オプションの大半は、バックアップの終了時に有効となっていた値にリセットされます。

ms186858.note(ja-jp,SQL.90).gifメモ :
この動作は、SQL Server 2000 より前の SQL Server とは異なります。

WITH RESTRICTED_USER オプションを使用すると、ユーザー アクセス オプションの設定の動作よりもこのオプションが優先されます。ユーザー アクセス オプションの設定は、WITH RESTRICTED_USER オプションを含む RESTORE ステートメントの後で、常に設定されます。

バックアップと復元の履歴テーブル

SQL Server には、各サーバー インスタンスのバックアップおよび復元動作を記録する、バックアップと復元の履歴テーブルが用意されています。復元を実行すると、バックアップ履歴テーブルも変更されます。これらのテーブルについては、「バックアップ情報の表示」を参照してください。

RESTORE LOG

SQL Server 2005 から、RESTORE LOG ではファイル一覧を含めることができるようになり、ロールフォワード中にファイルを作成できるようになりました。この機能は、データベースへファイルを追加するとき書き込まれたログ レコードが、ログ バックアップに含まれている場合に使用します。

ms186858.note(ja-jp,SQL.90).gifメモ :
データベースで完全な復旧モデルまたは一括ログ復旧モデルを使用しているとき、SQL Server 2005 ではほとんどの場合において、データベースの復元前にログ末尾のバックアップが必要になります。RESTORE ステートメントに WITH REPLACE または WITH STOPAT 句のいずれかを指定しない限り、先にログ末尾のバックアップを行わずにデータベースを復元しようとするとエラーが発生します。ログ末尾のバックアップに関する詳細については、「ログ末尾のバックアップ」を参照してください。

オンライン復元

ms186858.note(ja-jp,SQL.90).gifメモ :
オンライン復元は、SQL Server 2005 Enterprise Edition でのみ許可されます。

オンライン復元がサポートされている場合、データベースがオンラインになっていると、ファイル復元とページ復元は自動的にオンライン復元になり、段階的な部分復元の最初の段階の後で行われるセカンダリ ファイル グループの復元もオンライン復元になります。

ms186858.note(ja-jp,SQL.90).gifメモ :
オンライン復元には、遅延トランザクションを使用できます。

詳細については、「オンライン復元の実行」を参照してください。

段階的な部分復元

SQL Server 2005 で新しく追加された段階的な部分復元の機能は、Microsoft SQL Server 2000 の部分復元の機能を強化したものです。段階的な部分復元では、最初にプライマリ ファイル グループといくつかのセカンダリ ファイル グループの部分復元を行った後で、さらにファイル グループを復元できます。復元されないファイル グループはオフラインのマークが付けられ、アクセスできません。オフラインのファイル グループは、後でファイル復元を行うことによって復元できます。段階的な部分復元では、データベース全体を何回にも分けて復元できるよう、最後にデータベースの一貫性チェックが行われます。

ms186858.note(ja-jp,SQL.90).gifメモ :
SQL Server 2000 では、部分復元は完全なデータベース バックアップだけから実行できますが、この制限は SQL Server 2005 ではなくなりました。

詳細については、「段階的な部分復元の実行」を参照してください。

データベースをデータベース スナップショットに戻す

DATABASE_SNAPSHOT オプションで指定する、データベースを元に戻す操作では、ソース データベース全体をデータベース スナップショットの時点に戻します。つまり、指定したデータベース スナップショットの時点で保持されていたデータでソース データベースを上書きします。データベースを戻すスナップショットは、現時点で存在する唯一のスナップショットである必要があります。その後、この操作ではログが再構成されます (したがって、後でこのデータベースをユーザー エラーの時点にロールフォワードすることはできません)。

失われるデータは、スナップショットの作成時点よりも後に行ったデータベースへの更新内容だけです。この操作を行った後のデータベースのメタデータは、スナップショット作成時点のメタデータと同じになります。ただし、スナップショットに戻すと、すべてのフルテキスト カタログが削除されます。

データベース スナップショットに戻す操作はメディアの復旧を目的としたものではありません。標準的なバックアップ セットとは異なり、データベース スナップショットはデーターベース ファイルの不完全なコピーです。データベースまたはデータベース スナップショットが壊れた場合、スナップショットに戻すことはほぼ不可能です。戻すことができても、データベースまたはデータベース スナップショットが壊れている場合は、問題が解決しない可能性が高くなります。

元に戻す操作の制限

元に戻す操作は、次の状況ではサポートされません。

  • ソース データベースに読み取り専用のファイル グループまたは圧縮されたファイル グループがある。
  • スナップショットの作成時にオンラインだったファイルがオフラインとなっている。
  • 現在、複数のデータベース スナップショットが存在する。

詳細については、「データベース スナップショットへの復帰」を参照してください。

権限

復元するデータベースが存在しない場合、ユーザーは RESTORE を実行できる CREATE DATABASE 権限を使用する必要があります。データベースが存在する場合、既定では、RESTORE 権限は sysadmin 固定サーバー ロールおよび dbcreator 固定サーバー ロールのメンバと、データベースの所有者 (dbo) に与えられています。FROM DATABASAE_SNAPSHOT オプションを使用する場合、データベースは常に存在します。

RESTORE 権限は、サーバーでメンバシップ情報を常に確認できるロールに与えられます。固定データベース ロールのメンバシップは、データベースがアクセス可能で損傷していない場合にのみ確認することができますが、RESTORE の実行時にはデータベースがアクセス可能で損傷していないことが必ずしも保証されないため、db_owner 固定データベース ロールのメンバには RESTORE 権限は与えられません。

バックアップ操作では、オプションで、メディア セットとバックアップ セットにそれぞれパスワードを設定できます。メディア セットまたはバックアップ セットにパスワードが設定されている場合は、RESTORE ステートメントで正しいパスワードを指定する必要があります。これらのパスワードを設定しておくと、SQL Server 2005 ツールを使って不正に復元操作が行われたり、メディアにバックアップ セットが不正に追加されるのを防ぐことができます。ただし、BACKUP ステートメントで FORMAT オプションが使用された場合、メディアの上書きを防ぐことはできません。

ms186858.security(ja-jp,SQL.90).gifセキュリティ メモ :
パスワードによる保護は強力なものではありません。パスワードによる保護は、権限の有無にかかわらず、ユーザーが SQL Server 2005 ツールを使用して不適切な復元を行わないようにすることを目的としています。その他の手段によるバックアップ データの読み取りやパスワードの置き換えを防ぐわけではありません。バックアップ保護に最適な方法は、バックアップ テープを安全な場所に保管するか、バックアップしたディスク ファイルを適切なアクセス制御リスト (ACL) で保護することです。ACL は、バックアップを作成するディレクトリのルートに設定する必要があります。

ms186858.note(ja-jp,SQL.90).gifメモ :
ここでは、AdventureWorks データベースを例に使用します。AdventureWorks は SQL Server 2005 のサンプル データベースの 1 つです。Adventure Works Cycles は、データベースの概念とシナリオを説明するために使用する架空の製造会社です。このデータベースの詳細については、「サンプル データとサンプル データベース」を参照してください。

次の例ではすべて、データベース全体のバックアップが既に実行されていることが前提です。

RESTORE の例を次に示します。

  • A. データベース全体を復元する
  • B. データベース全体と差分バックアップを復元する
  • C. RESTART 構文を使用してデータベースを復元する
  • D. データベースを復元しファイルを移動する
  • E. BACKUP および RESTORE を使用してデータベースのコピーを作成する
  • F. STOPAT を使って特定日時の状態に復元する
  • G. トランザクション ログをマークまで復元する
  • H. TAPE 構文を使用して復元する
  • I. FILE および FILEGROUP 構文を使用して復元する
  • J. データベース スナップショットに戻す
ms186858.note(ja-jp,SQL.90).gifメモ :
追加の例については、「いくつかの復元シナリオでの復元シーケンスの例」と、「バックアップと復元を行う方法に関するトピック (Transact-SQL)」内の復元方法に関するトピックを参照してください。

A. データベース全体を復元する

次の例では、AdventureWorksBackups 論理バックアップ デバイスからデータベース バックアップ全体を復元します。このデバイスの作成例については、「バックアップ デバイス」を参照してください。

RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups
ms186858.note(ja-jp,SQL.90).gifメモ :
データベースで完全な復旧モデルまたは一括ログ復旧モデルを使用しているとき、SQL Server 2005 ではほとんどの場合において、データベースの復元前にログ末尾のバックアップが必要になります。詳細については、「ログ末尾のバックアップ」を参照してください。

[例の先頭に戻る]

B. データベース全体と差分バックアップを復元する

次の例では、Z:\SQLServerBackups\AdventureWorks.bak バックアップ デバイスから、データベース全体のバックアップを復元した後、差分バックアップを復元します。復元するデータベース全体のバックアップはデバイス上の 6 番目のバックアップ セット (FILE = 6) で、差分データベース バックアップはデバイス上の 9 番目のバックアップ セット (FILE = 9) です。差分バックアップからの復元が終わると、データベースは完全に復元されたことになります。

RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 9
      RECOVERY;

[例の先頭に戻る]

C. RESTART 構文を使用してデータベースを復元する

次の例では、サーバーの電源異常による割り込みを受けた RESTORE 操作を、RESTART オプションで再起動します。

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks 
   FROM AdventureWorksBackups WITH RESTART

[例の先頭に戻る]

D. データベースを復元しファイルを移動する

次の例では、データベース全体とトランザクション ログを復元し、復元したデータベースを C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data ディレクトリに移動します。

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.ldf'
RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY

[例の先頭に戻る]

E. BACKUP および RESTORE を使用してデータベースのコピーを作成する

次の例では、BACKUP および RESTORE の両方のステートメントを使用して、AdventureWorks のコピーを作成します。MOVE ステートメントは、データとログ ファイルを指定の位置に復元します。RESTORE FILELISTONLY ステートメントは、復元するデータベース内のファイル数と名前を判断するために使用します。データベースの新しいコピーは、TestDB という名前になります。詳細については、「RESTORE FILELISTONLY (Transact-SQL)」を参照してください。

BACKUP DATABASE AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[例の先頭に戻る]

F. STOPAT を使って特定日時の状態に復元する

次の例では、データベースを April 15, 2020``12:00 AM の状態に復元し、複数のログと複数のバックアップ デバイスを含む復元操作を行います。

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY;

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH RECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

[例の先頭に戻る]

G. トランザクション ログをマークまで復元する

次の例では、トランザクション ログを ListPriceUpdate というマーク付きトランザクションのマークまで復元します。

USE AdventureWorks
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master
GO

RESTORE DATABASE AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

[例の先頭に戻る]

H. TAPE 構文を使用して復元する

次の例では、TAPE バックアップ デバイスからデータベース バックアップ全体を復元します。

RESTORE DATABASE AdventureWorks 
   FROM TAPE = '\\.\tape0'

[例の先頭に戻る]

I. FILE および FILEGROUP 構文を使用して復元する

次の例では、2 つのファイル、1 つのセカンダリ ファイル グループ、および 1 つのトランザクション ログを格納している MyDatabase という名前のデータベースを復元します。このデータベースは、完全復旧モデルを使用しています。

データベース バックアップは、MyDatabaseBackups という名前の論理バックアップ デバイス上のメディア セットにある 9 番目のバックアップ セットです。次に、MyDatabaseBackups デバイス上にある次の 3 つのバックアップ セット (1011、および 12) にある 3 つのログ バックアップを、WITH NORECOVERY を使用して復元します。最後のログ バックアップを復元した後、データベースを復旧します。

ms186858.note(ja-jp,SQL.90).gifメモ :
すべてのログ バックアップが復元される前に復旧してしまわないように、復旧は別のステップとして実行します。

RESTORE DATABASE では、2 種類の FILE オプションを使用していることに注意してください。FILE = 'MyDatabase_data_1' のように、バックアップ デバイス名より前の FILE オプションでは、バックアップ セットから復元するデータベース ファイルの論理ファイル名を指定します。このバックアップ セットは、メディア セット内の 1 番目のデータベース バックアップではありません。したがって、メディア セット内での位置を、FILE=9 のように WITH 句内の FILE オプションを使って指定します。

RESTORE DATABASE MyDatabase
   FILE = 'MyDatabase_data_1',
   FILE = 'MyDatabase_data_2',
   FILEGROUP = 'new_customers'
   FROM MyDatabaseBackups
   WITH 
      FILE = 9,
      NORECOVERY;
GO
-- Restore the log backups.
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 10, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 11, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 12, 
      NORECOVERY;
GO
--Recover the database:
RESTORE DATABASE MyDatabase WITH RECOVERY;
GO

[例の先頭に戻る]

J. データベース スナップショットに戻す

次の例では、データベースをデータベース スナップショットに戻します。この例では、現在、データベースに 1 つだけスナップショットが存在することを想定しています。このデータベース スナップショットの作成方法の例については、「データベース スナップショットを作成する方法 (Transact-SQL)」を参照してください。

ms186858.note(ja-jp,SQL.90).gifメモ :
スナップショットに戻すと、すべてのフルテキスト カタログが削除されます。
USE master  
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

詳細については、「データベース スナップショットへの復帰」を参照してください。

[例の先頭に戻る]

参照

関連項目

BACKUP (Transact-SQL)
RESTORE REWINDONLY (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)

その他の技術情報

フルテキスト カタログのバックアップと復元
レプリケートされたデータベースのバックアップと復元
SQL Server データベースの復元シナリオの実装
メディア セット、メディア ファミリ、およびバックアップ セット
SQL Server でのバックアップの復元と復旧の動作について
バックアップ情報の表示

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • BLOCKSIZE オプション、BUFFERCOUNT オプション、MAXTRANSFERSIZE オプションを「構文」セクションに追加。
  • RESTORE DATABASE の STOPATMARK および STOPBEFOREMARK 構文を修正。
  • vardecimal ストレージ形式対応の SQL Server 2005 Service Pack 2 データベースを復元する方法に関するセクションを「解説」に追加。
  • プラン キャッシュの消去に関するセクションを「解説」に追加。
変更内容 :
  • STOPAT、STOPATMARK、および STOPBEFOREMARK 構文を修正。

2006 年 4 月 14 日

変更内容 :
  • オフライン ファイルのデータベース スナップショットの制限を明記。
  • バックアップされたファイルの論理名の構文を logical_file_name 変数名から logical_file_name_in_backup に変更。