次の方法で共有


データベースの全体復元の実行 (完全復旧モデル)

データベースの全体復元の目的は、データベース全体を復元することです。復元の実行中は、データベース全体がオフラインになります。データベースの各部がオンラインになる前に、すべてのデータが一貫性のある状態に復旧されます。一貫性のある状態とは、データベースのすべての部分が同じ時点にあり、コミットされていないトランザクションが存在しない状態を示します。

完全復旧モデルでは、特定の時点にデータベースを復元できます。特定の時点とは、利用可能な最新のバックアップ、特定の日時、またはマークされたトランザクションを指します。

ms187495.security(ja-jp,SQL.90).gifセキュリティ メモ :
不明なソースや信頼されていないソースからのデータベースは、アタッチまたは復元しないことをお勧めします。そのようなデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更することによりエラーを発生させる悪意のあるコードが含まれている可能性があるからです。不明なソースや信頼されていないソースのデータベースを使用する前に、運用に使用していないサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

データベース全体の復元

通常、障害が発生した時点までデータベースを復旧するには、次の基本的な手順が必要です。

  1. アクティブなトランザクション ログ (ログの末尾と呼ばれます) をバックアップします。これにより、ログ末尾のバックアップが作成されます。アクティブなトランザクション ログを使用できない場合は、そのログ部分にあるすべてのトランザクションが失われます。
    ms187495.note(ja-jp,SQL.90).gif重要 :
    一括ログ復旧モデルで、一括ログ操作が含まれるすべてのログをバックアップするには、データベース内のすべてのデータ ファイルへのアクセス許可が必要です。データ ファイルにアクセスできないと、トランザクション ログをバックアップできません。その場合は、最新のログ バックアップ以降に加えられたすべての変更を手動で再実行する必要があります。
    詳細については、「[ログ末尾のバックアップ](ms179314\(v=sql.90\).md)」を参照してください。
  2. データベースの最新の完全バックアップが復元されますが、データベースは復旧されません (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。
  3. 差分バックアップが存在する場合は、データベースを復旧しないで最新の差分バックアップを復元します (RESTORE DATABASE database_name WITH NORECOVERY)。
  4. バックアップを復元した直後に作成された、最初のトランザクション ログのバックアップから順番に、NORECOVERY を指定してログを復元します。
  5. データベースを復旧します (RESTORE DATABASE database_name WITH RECOVERY)。または、この手順を最後のログ バックアップの復元と組み合わせることもできます。
  6. データベースの全体復元を行うと、通常、ログ バックアップ内の特定の時点またはマークされたトランザクションまで復旧できます。ただし、一括ログ復旧モデルの場合は、一括ログ操作による変更がログ バックアップに含まれていると、特定の時点での復旧はできません。詳細については、「バックアップ内の特定の時点へのデータベースの復元」を参照してください。

データベースを完全に復元する場合は、1 つの復元シーケンスを使用する必要があります。データベースの全体復元シナリオ向けの復元シーケンスで使用する重要なオプションの例を以下に示します。このシナリオでは、障害が発生した時点までデータベースが復元されます。復元シーケンスは、1 つ以上の復元フェーズによってデータを移動する、1 つ以上の復元操作で構成されます。説明の目的に関係しない構文や詳細は、省略しています。

データベースが復元され、ロールフォワードされます。ロールフォワードの時間を短縮するために、データベースの差分が使用されます。この復元シーケンスは、作業の損失を回避することを目的としています。復元される最後のバックアップが、ログ末尾のバックアップになります。

復元シーケンスの RESTORE の基本構文は次のとおりです。

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;
  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;
    このログの復元手順を、追加のログ バックアップごとに繰り返します。
  4. RESTORE DATABASE database WITH RECOVERY;

次の例では、AdventureWorks サンプル データベースは、バックアップ前に完全復旧モデルを使用するように設定されていました。この例では、AdventureWorks データベースのログ末尾のバックアップを作成します。次に、データベースの以前の完全バックアップとログ バックアップを復元してから、ログ末尾のバックアップを復元します。最後に、別の手順でデータベースを復旧します。

ms187495.note(ja-jp,SQL.90).gifメモ :
この例では、「データベースの完全バックアップ」の「完全復旧モデルでのデータベース バックアップの使用」で作成される、データベース バックアップおよびログ バックアップを使用します。

この例の先頭では、ALTER DATABASE ステートメントを使用して復旧モデルを FULL に設定しています。

USE master;
--Make sure the database is using the full recovery model.
ALTER DATABASE AdventureWorks SET RECOVERY FULL;
GO
--Create tail-log backup.
BACKUP LOG AdventureWorks 
TO DISK = 'Z:\SQLServerBackups\AdventureWorks.bak''Z:\SQLServerBackups\AdventureWorks.bak' 
   WITH NORECOVERY; GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' 
  WITH FILE=1, 
    NORECOVERY;

--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' 
  WITH FILE=2, 
    NORECOVERY;

--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks 
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
  WITH FILE=3, 
    NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO

障害発生時点への復旧

データベースの完全バックアップを復元するには

データベースの差分バックアップを復元するには

トランザクション ログ バックアップを復元するには

1 つまたは複数のデータ バックアップを復元した後は、それ以降のトランザクション ログ バックアップをすべて復元してから、データベースを復旧する必要があります。

SQL Server 管理オブジェクト (SMO) を使用してバックアップを復元するには

特定の時点への復旧

完全復旧モデルでは、ログ バックアップ内にある特定の時点にデータベースを復元することができます。特定の時点とは、特定の日時、マークされたトランザクション、またはログ シーケンス番号 (LSN) を指します。詳細については、「バックアップ内の特定の時点へのデータベースの復元」を参照してください。

SQL Server の以前のバージョンのバックアップに対するサポート

SQL Server 2005 では、SQL Server 7.0、SQL Server 2000、または SQL Server 2005 を使用して作成されたデータベース バックアップを復元できます。ただし、SQL Server 7.0 または SQL Server 2000 を使用して作成された mastermodel、および msdb のバックアップを SQL Server 2005 で復元することはできません。また、インデックスの作成操作が含まれる SQL Server 7.0 のログ バックアップは、SQL Server 2000 や SQL Server 2005 には復元できません。

SQL Server 2005 では、SQL Server の以前のバージョンとは異なる既定パスが使用されます。このため、SQL Server 7.0 または SQL Server 2000 の既定の場所で作成されたデータベースをバックアップから復元するには、MOVE オプションを使用する必要があります。新しい既定パスの詳細については、「SQL Server 2005 の既定のインスタンスおよび名前付きインスタンスのファイルの場所」を参照してください。

ms187495.note(ja-jp,SQL.90).gifメモ :
SQL Server 6.5 以前のバージョンで作成されたデータベース バックアップは互換性のない形式なので、SQL Server 2005 では復元できません。SQL Server 6.5 以前のバージョンを使用して作成されたデータベースを SQL Server 2005 にアップグレードする方法については、「SQL Server 6.5 以前のバージョンからのデータベースのコピー」を参照してください。

参照

概念

一括ログ復旧モデルでのバックアップ
完全復旧モデルでのバックアップ
データベースの差分バックアップ
データベースの完全バックアップ
データベース復元時の復旧時間の短縮
SQL Server でのバックアップの復元と復旧の動作について
トランザクション ログのバックアップ

その他の技術情報

SQL Server データベースの復元シーケンスの処理

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 7 月 17 日

新しい内容 :
  • セキュリティに関する注を追加しました。