適用対象:SQL Server
SQL Serverでは、SQL Server Management Studio、Transact-SQL、PowerShellを使えばトランザクションログのバックアップを復元できます。
前提条件
バックアップは作成した順番で復元しなければなりません。 特定のトランザクションログバックアップを復元する前に、WITH NORECOVERYを使用して、未コミットトランザクションをロールバックせずに以下の以前のバックアップを復元してください。
完全なデータベースバックアップと、オプションでそのトランザクションログバックアップの前に取得された最後の差分バックアップ。 データベースは、最新の完全または差分データベースバックアップが作成される前に、完全復旧モデルまたは一括ログ復旧モデルを使用していなければなりません。
完全データベース バックアップまたは差分バックアップ (復元する場合) の後から、そのトランザクション ログ バックアップの前までに取得した、すべてのトランザクション ログ バックアップ。 ログバックアップは作成した順番で適用し、ログチェーンに隙間がないようにしてください。
トランザクション ログ バックアップに関する詳細は、「トランザクション ログ バックアップ」および「トランザクション ログ バックアップを適用」をご覧ください。
アクセス許可
既存のデータベースでは、RESTORE 権限は sysadmin および dbcreator 固定サーバー ロールのメンバーと、データベースの所有者 (dbo) に既定で付与されます。
RESTORE 権限は、サーバーが常にメンバーシップを確認できるロールに与えられます。 サーバーはデータベースがアクセス可能で損傷していない場合にのみ固定データベース ロールのメンバーシップを確認できますが、RESTORE実行中は必ずしもそうとは限りません。 このため、db_owner 固定データベース ロールのメンバーは RESTORE 権限を持ちません。
Remarks
ミラーデータベース、またはまだ可用性グループに参加させていない可用性グループのセカンダリ データベースの場合は、最後のログ バックアップを NORECOVERY オプション(PowerShell では -NoRecovery)を使用して復元してください。 データベースは復元状態のままでなければなりません。
ログ出荷用の二次データベースの場合は、最後のログ バックアップを NORECOVERY オプションまたは STANDBY オプション(PowerShell では -StandbyFile)で復元してください。
STANDBYオプションは、復元の合間にデータベースへの読み取り専用アクセスを提供します。
SQL Server Management Studio を使用します。
警告
一般的な復元では、データベースの復元 ダイアログボックスで、ログ バックアップをデータ バックアップおよび差分バックアップと共に選択します。
適切なSQL Server データベース エンジンのインスタンスに接続してください。 オブジェクト エクスプローラーでサーバー名を選択してサーバーツリーを展開します。
[データベース] を展開します。 ユーザーデータベースを選択するか、システムデータベースを展開してシステムデータベースを選択してください。
データベースを右クリックし、「タスク」をポイントし、「復元」をポイントして、「トランザクション ログ」を選択します。 「 トランザクションログを復元 」ダイアログボックスが開きます。
注
トランザクションログが利用できない場合は、まず完全または差分バックアップを復元する必要があるかもしれません。 データベースの復元 ダイアログ ボックスを使用します。
一般ページのデータベースリストボックスでデータベースを選択します。 リストには復元状態のデータベースのみが表示されます。
復元すべきバックアップセットのソースと場所を指定するには、以下のいずれかのオプションを選択してください:
[データベースの以前のバックアップから]
復元するデータベースをドロップダウン リストから選択します。 このリストには msdb のバックアップ履歴にバックアップが記録されているデータベースのみが含まれています。
[ファイルまたはテープから]
参照ボタン ([...]) を選択し、[バックアップ デバイスの選択] ダイアログ ボックスを開きます。 バックアップメディアタイプボックスでデバイスタイプを選択してください。 バックアップメディアボックスに1台以上のデバイスを追加するには、「追加」を選択してください。
欲しいデバイスを追加した後、「OK」を選択して「一般」ページに戻ります。
[復元するトランザクション ログのバックアップを選択] グリッドで、復元するバックアップを選択します。 グリッドは選択したデータベースで利用可能なトランザクションログのバックアップを一覧にしています。 グリッドはログバックアップを、含まれるログシーケンス番号(LSN)の順にリストアップしており、この順番で復元しなければなりません。
次の表は、グリッドの列ヘッダーとその値を示しています。
ヘッダー 値 復元 選択したチェックボックスは復元すべきバックアップセットを示します。 名前 バックアップ セットの名前。 コンポーネント バックアップされるコンポーネント: [データベース]、[ファイル]、<[空白]> (トランザクション ログ用) のいずれかを指定します。 データベース バックアップ操作に関係するデータベース名。 [開始日] バックアップ操作の開始日時 (クライアントの地域設定に準拠)。 完了日 バックアップ操作の完了日時 (クライアントの地域設定に準拠)。 最初の LSN バックアップ セット内の先頭のトランザクションのログ シーケンス番号。 ファイル バックアップの場合は空白。 最後の LSN バックアップ セット内の最後のトランザクションのログ シーケンス番号。 ファイル バックアップの場合は空白。 チェックポイント LSN バックアップが作成された時点における最新チェックポイントのログ シーケンス番号。 完全なLSN データベース全体の最新バックアップのログ シーケンス番号。 [サーバー] バックアップ操作を実行したデータベース エンジン インスタンスの名前。 ユーザー名 バックアップ操作を実行したユーザーの名前。 [サイズ] バックアップ セットのサイズ (バイト単位)。 Position ボリューム内のバックアップセットの位置。 [有効期限] バックアップ セットの期限が切れる日付と時刻。 次のいずれかのオプションを選択してください。
[特定の時点]
デフォルトの(可能な限り最新)を保持するか、ブラウズボタンを選択して「Point in Time Restore」ダイアログボックスを開き、特定の日付と時間を選択してください。
[マークされたトランザクション]
以前にマークされたトランザクションにデータベースを復元します。 このオプションで「マークされた取引を選択」ダイアログボックスが表示されます。 このダイアログボックスのグリッドには、選択したトランザクション ログ バックアップ内のマークされたトランザクションが一覧表示されます。
デフォルトでは、復元操作はマークされたトランザクションまでですが、そのトランザクション自体は含みません。 復元にマークされたトランザクションを含めるには、「 マーク付きトランザクションを含める」を選択してください。
次の表は、グリッドの列ヘッダーとその値を示しています。
ヘッダー 値 <空白> マークを選択するためのチェック ボックスを表示します。 トランザクション マーク トランザクションがコミットされたときにユーザーによって指定された、マークされたトランザクションの名前。 日付 トランザクションがコミットされた日時。 トランザクションの日付と時刻は、クライアント コンピューターの日付と時刻ではなく、logmarkhistory テーブルに記録されたとおりに msdb に表示されます。 説明 トランザクションがコミットされた際にユーザーが指定したマーク付きトランザクションの説明(存在する場合)。 LSN マークされたトランザクションのログ シーケンス番号。 データベース マークされたトランザクションがコミットされたデータベースの名前。 ユーザー名 マークされたトランザクションをコミットしたデータベース ユーザーの名前。
詳細設定オプションを表示または選択するには、 [ページの選択] ペインの [オプション] を選択します。
復元オプションセクションでは、以下のオプションから選択してください:
[レプリケーションの設定を保存する (WITH KEEP_REPLICATION)]
公開されたデータベースを作成したサーバーとは異なるサーバーに復元する際に、レプリケーション設定を保持します。
このオプションは、未コミットのトランザクションをロールバックしてデータベースを使用できる状態にする... オプション(後述)でのみ利用可能で、これは RECOVERY オプションを使用してバックアップを復元することに相当します。
このオプションを選択することは、Transact-SQL 文で RESTORE オプションを使うのと同等です。
[各バックアップを復元する前に確認する]
最初のバックアップセットの後の各バックアップセットの前に、このオプションで「復元を続行」ダイアログボックスを開き、復元シーケンスを続けるかどうかを尋ねます。 ダイアログボックスには、次のメディアセット名(利用可能な場合)、バックアップセット名、バックアップセットの説明が表示されます。
このオプションは、例えばサーバーにテープデバイスが1台しかない場合など、異なるメディアセットごとにテープを交換する必要がある場合に特に有用です。 続ける準備ができたときだけ OK を選択してください。
「いいえ」を選択すると、データベースは復元状態のままになります。 復元シーケンスは、最後に終わった復元から後で続けられます。 次のバックアップがデータまたは差分バックアップの場合は、 [データベースの復元] タスクを再度使用します。 次のバックアップがログ バックアップの場合は、 [トランザクション ログの復元] タスクを使用します。
[復元するデータベースへのアクセスを制限する (WITH RESTRICTED_USER)]
復元するデータベースの使用を、 db_owner、 dbcreator、または sysadminのメンバーだけに制限します。
このオプションを選択することは、Transact-SQL 文で RESTORE オプションを使用するのと同等です。
リカバリーステートでは、復元操作後のデータベースの状態を指定します。
[コミットされていないトランザクションをロールバックして、データベースを使用可能な状態にする。 追加の取引ログは復元できません。 (RESTORE 回復あり)
データベースを復旧します。 このオプションは、Transact-SQL ステートメントのRESTOREオプションに相当します。
復元すべきログバックアップが他にない場合のみこのオプションを選びましょう。
データベースは非稼働のままにし、未コミットのトランザクションはロールバックしないでください。 別のトランザクション ログは復元できます (RESTORE NORECOVERY を使用)
データベースを RESTORING 状態で未復旧のままにします。 このオプションは、Transact-SQL ステートメントで RESTORE オプションを使用するのと同等です。
このオプションを選択すると、「 複製設定を保持する 」オプションが利用できません。
[データベースを読み取り専用モードにする。 コミットされていないトランザクションは元に戻されますが、復旧結果を元に戻せるように元に戻す操作をファイルに保存します。 (RESTORE WITH STANDBY)
データベースをスタンバイ状態のままにします。 このオプションは、Transact-SQL 文で RESTORE オプションを使用するのと同等です。
このオプションにはスタンバイファイルが必要です。
データベースを読み取り専用モードのままにする場合は、 スタンバイファイル テキストボックスにスタンバイファイル名を指定します。 スタンバイファイルを参照するか、テキストボックスにそのパスを入力します。
Transact-SQL を使用する
重要
曖昧さを避けるために、特にスクリプトでは、すべてのWITH RECOVERY文でRESTOREまたはWITH NORECOVERYのいずれかを明示的に指定してください。
復元シーケンス内の最後のものを除く各トランザクション ログ バックアップに対して、以下の値を使用して
RESTORE LOGステートメントを実行します。- トランザクションログを適用するデータベース名。
- トランザクションログのバックアップを含むバックアップデバイスです。
-
NORECOVERY節。
以下の例は基本的な構文を示しており、
<database_name>はデータベース名、<backup_device>はログバックアップを含むデバイス名です。RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY [ ; ]復元シーケンスにログバックアップが1つだけなら、このステップを省略してください。
復元シーケンスの最後のログバックアップについては、以下のいずれかの方法を使ってデータベースを復元してください:
最後の
RESTORE LOGステートメントの一部としてデータベースを復元します:RESTORE LOG <database_name> FROM <backup_device> WITH RECOVERY; GO後で別の
RESTORE DATABASE文でデータベースを復元してください:RESTORE LOG <database_name> FROM <backup_device> WITH NORECOVERY; RESTORE DATABASE <database_name> WITH RECOVERY; GO最後の
RESTORE LOG文の後もデータベースは復元状態のままです。 必要なログバックアップをすべて復元したか確認し、その後データベースを回復できます。 この方法は、ポイントインタイム リストアにしばしば有用です。
例 (Transact-SQL)
既定では、 AdventureWorks2025 データベースは単純復旧モデルを使用します。 以下の例は、フルリカバリーモデルで取得したバックアップを必要とします。 バックアップを作成する前に、以下のステートメントを実行してリカバリーモデルを変更してください:
ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;
完全な復旧モデルへの切り替えは、最初のデータバックアップ後にのみ有効です。 ログチェーンを始めるために完全なデータベースバックアップを取りましょう。
以下の例は、AdventureWorks2025 データベースが存在しないインスタンス(例えば別のサーバーなど)にバックアップを復元します。
A. 単一のトランザクションログバックアップを適用します
以下の例は、AdventureWorks2025というバックアップデバイス上の完全なデータベースバックアップからAdventureWorks2025_1データベースを復元するものです。 その後、 AdventureWorks2025_logというバックアップデバイスから最初のトランザクションログバックアップを適用します。 最後にデータベースを復元します。
RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO
RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
NORECOVERY;
GO
RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO
B. 複数のトランザクションログバックアップを適用してください
以下の例は、AdventureWorks2025というバックアップデバイス上の完全なデータベースバックアップからAdventureWorks2025_1データベースを復元するものです。 その後、 AdventureWorks2025_logというバックアップデバイスから最初の3つのトランザクションログバックアップを一つずつ適用します。 最後にデータベースを復元します。
RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO
RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
NORECOVERY;
GO
RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 2,
NORECOVERY;
GO
RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 3,
NORECOVERY;
GO
RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO
PowerShell の使用
Restore-SqlDatabaseコマンドレットを使い、-RestoreActionパラメータをLogに設定します。 シーケンス内のすべての復元に対して -NoRecovery パラメータを含みますが、最後のリストアは例外です。 最後のログ復元で -NoRecovery を省略してデータベースを復元してください。
注
これらの例は SqlServer モジュールを必要とします。 詳細については、「 SQL Server PowerShell プロバイダー」を参照してください。
完全な構文についてはRestore-SqlDatabaseを参照してください。
例 (PowerShell)
以下の例は、AdventureWorks2025 データベースが存在しないインスタンス(別のサーバーなど)にバックアップを復元します。
A. 単一のトランザクションログバックアップを適用します
以下の例は、完全なデータベースバックアップから AdventureWorks2025 データベースを復元し、データベースを復元状態のままにします。 その後、トランザクションログのバックアップを適用し、データベースを復元します。
$instance = "Computer\Instance"
$fullRestore = @{
ServerInstance = $instance
Database = "AdventureWorks2025"
BackupFile = "C:\Backup\AdventureWorks2025_full.bak"
RestoreAction = "Database"
NoRecovery = $true
}
Restore-SqlDatabase @fullRestore
$logRestore = @{
ServerInstance = $instance
Database = "AdventureWorks2025"
BackupFile = "C:\Backup\AdventureWorks2025_log1.trn"
RestoreAction = "Log"
}
Restore-SqlDatabase @logRestore
B. 複数のトランザクションログバックアップを適用してください
以下の例では、データベース全体のバックアップを復元し、その後3つのトランザクションログバックアップを連続して適用します。 最後の復元以外はすべて -NoRecoveryを使うため、最後のログ復元でデータベースが回復されます。
$instance = "Computer\Instance"
$logBackups = @(
"C:\Backup\AdventureWorks2025_log1.trn",
"C:\Backup\AdventureWorks2025_log2.trn",
"C:\Backup\AdventureWorks2025_log3.trn"
)
$fullRestore = @{
ServerInstance = $instance
Database = "AdventureWorks2025"
BackupFile = "C:\Backup\AdventureWorks2025_full.bak"
RestoreAction = "Database"
NoRecovery = $true
}
Restore-SqlDatabase @fullRestore
for ($i = 0; $i -lt $logBackups.Count; $i++) {
$isLast = ($i -eq $logBackups.Count - 1)
$logRestore = @{
ServerInstance = $instance
Database = "AdventureWorks2025"
BackupFile = $logBackups[$i]
RestoreAction = "Log"
NoRecovery = -not $isLast
}
Restore-SqlDatabase @logRestore
}
関連タスク
- トランザクション ログをバックアップする
- SSMS を使用してデータベース バックアップを復元する
- データベースを障害発生時に復元する - 完全復旧
- SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル)
- マークされたトランザクションへのデータベースの復元 (SQL Server Management Studio)