SQL Serverトランザクションログを活用したデータベース復元技術の実践ガイド

データベース管理において、障害発生時のデータ復旧技術は極めて重要です。SQL Serverでは、トランザクションログを基盤とした復旧メカニズムが提供されており、これを適切に利用することでデータ損失を最小限に抑えることができます。本稿では、SQL Serverのトランザクションログを活用したデータベース復元技術について、実践的なコード例を交えながら詳しく解説します。

トランザクションログの役割

SQL Serverにおけるトランザクションログは、データベース内で実行されるすべての変更操作(挿入、更新、削除)を記録する重要なコンポーネントです。各ログレコードには、操作を再実行(redo)または取り消し(undo)するために必要な情報が含まれています。この仕組みにより、システム障害発生時にデータベースを一貫性のある状態に復元することが可能になります。

復旧モデルの選択

SQL Serverでは、三つの復旧モデルが提供されています:

単純復旧モデル(SIMPLE):トランザクションログの自動バックアップは行われず、定期的な完全バックアップのみが必要です。 完全復旧モデル(FULL):すべての操作がログに記録され、特定の時点までの復旧が可能です。 一括ログ復旧モデル(BULK_LOGGED):一部の一括操作のログ記録を最適化し、完全復旧モデルと単純復旧モデルの中間に位置します。

データ保護の観点から、完全復旧モデルが最も高い安全性を提供します。

データベース復旧の手順と実装コード

ここでは、完全復旧モデルを使用してデータベースを復旧する具体的な手順とコード例を示します。

ステップ1:トランザクションログのバックアップ

障害発生後、まず現在のトランザクションログをバックアップします。これが「末尾のログバックアップ」として機能します。

-- 末尾のトランザクションログをバックアップ
BACKUP LOG [SalesDB]
TO DISK = N'C:\Backup\SalesDB_TailLog.trn'
WITH NO_TRUNCATION, NAME = N'SalesDB-末尾ログバックアップ', STATS = 5

ステップ2:完全バックアップからの復元

次に、最新の完全バックアップからデータベースを復元します。この時点ではデータベースはまだ使用できない状態です。

-- 完全バックアップを復元(NORECOVERYオプション指定)
RESTORE DATABASE [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_Full.bak'
WITH FILE = 1, NORECOVERY, REPLACE, STATS = 5

ステップ3:差分バックアップの適用(存在する場合)

差分バックアップが存在する場合は、完全バックアップの後に適用します。

-- 差分バックアップを適用
RESTORE DATABASE [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_Diff.bak'
WITH FILE = 1, NORECOVERY, STATS = 5

ステップ4:トランザクションログバックアップの適用

完全バックアップ以降のすべてのトランザクションログバックアップを時系列順に適用します。

-- トランザクションログバックアップを適用
RESTORE LOG [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_Log1.trn'
WITH NORECOVERY, STATS = 5

-- 追加のログバックアップがあれば順次適用
RESTORE LOG [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_Log2.trn'
WITH NORECOVERY, STATS = 5

ステップ5:末尾ログバックアップの適用とデータベースの復旧

最後に、ステップ1で作成した末尾のログバックアップを適用し、データベースをオンライン状態にします。

-- 末尾ログバックアップを適用して復旧を完了
RESTORE LOG [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_TailLog.trn'
WITH RECOVERY, STATS = 5

この手順により、データベースは障害発生直前の状態に復元され、ユーザーによるアクセスが可能になります。復旧プロセスを自動化するには、これらの手順をスクリプト化し、適切なエラーハンドリングを追加することをお勧めします。

特定の時点への復旧

場合によっては、特定の時点までデータベースを復旧する必要があります。これは、STOPATオプションを使用して実現できます。

-- 特定の時点まで復旧
RESTORE LOG [SalesDB]
FROM DISK = N'C:\Backup\SalesDB_Log.trn'
WITH RECOVERY, STOPAT = N'2023-10-15T12:30:00', STATS = 5

この機能により、誤ったデータ操作が行われる前の状態にデータベースを復元することが可能になります。

タグ: SQL Server トランザクションログ データベース復元 BACKUP LOG RESTORE DATABASE

8月16日 15:45 投稿