SQL Serverを運用する上で、データの安全性を確保するための「バックアップとリカバリ」は欠かせません。
この記事では、RESTOREコマンドを活用してデータベースのリストアを行う際の基本的な手順から、部分リストアやポイントインタイムリカバリといったシナリオを実践的に解説します。
基本的なリストア手順
データベースを復元するには、まずRESTOREコマンドを使用します。
以下に基本的なフルバックアップの復元手順を示します。
フルバックアップからのリストア
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Full.bak'
WITH REPLACE, RECOVERY;
- WITH REPLACE: 既存データベースを上書きします。
- WITH RECOVERY: 復元後、データベースを利用可能状態にします。
差分バックアップを含むリストア
差分バックアップを使ったリストア手順は以下の通りです。
①フルバックアップを復元
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Full.bak'
WITH NORECOVERY;
②差分バックアップを適用
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Diff.bak'
WITH RECOVERY;
部分リストアの実践
部分リストアでは、特定のファイルグループだけをリストアできます。大規模データベースで部分的な復元を行いたい場合に便利です。
ファイルグループバックアップの例
①バックアップを取得
BACKUP DATABASE MyDatabase
FILEGROUP = 'PRIMARY'
TO DISK = 'C:\Backups\MyDatabase_PRIMARY.bak';
②部分リストア
RESTORE DATABASE MyDatabase
FILEGROUP = 'PRIMARY'
FROM DISK = 'C:\Backups\MyDatabase_PRIMARY.bak'
WITH RECOVERY;
ポイントインタイムリカバリの実践
トランザクションログを利用して、指定した時点までのデータを復元する方法です。
ポイントインタイムリカバリの手順
①フルバックアップをリストア
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Full.bak'
WITH NORECOVERY;
②トランザクションログを適用
RESTORE LOG MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Log.bak'
WITH STOPAT = '2025-01-01 12:00:00', RECOVERY;
STOPAT: 復元したい日時を指定します。
SQL Serverのリカバリモデル
SQL Serverでは、データの復旧方法に応じてリカバリモデルが用意されています。
リカバリモデル | 特徴 | 推奨用途 |
---|---|---|
シンプル (Simple) | トランザクションログの管理不要 | 開発環境、小規模なデータベース |
フル (Full) | 完全なトランザクションログ管理 | 重要な業務システム |
バルクログ (Bulk-Logged) | 一部の操作のログを軽減 | 一時的な大量データ処理時 |
確認方法
SELECT name, recovery_model_desc
FROM sys.databases
WHERE name = 'YourDatabase';
変更方法
ALTER DATABASE [YourDatabase] SET RECOVERY FULL;
注意点とベストプラクティス
- バックアップスケジュールの設定: フル、差分、トランザクションログを組み合わせた定期的なスケジュールを構築。
- リストアの事前テスト: 定期的にリストア手順をテストして、復元可能性を確認。
- 保存先の冗長性確保: バックアップファイルは複数の場所に保存。
演習問題
問題1: フルバックアップと差分バックアップを使用したリストア
以下のシナリオに基づいて、必要なSQLコマンドを作成してください。
- 「MyDatabase」というデータベースのフルバックアップファイルが C:\Backups\MyDatabase_Full.bak にあります。
- 差分バックアップファイルが C:\Backups\MyDatabase_Diff.bak にあります。
- データベースを復元し、利用可能な状態にしてください。
問題2: ポイントインタイムリカバリのSQLコマンド作成
「2025-01-01 12:00:00」時点のデータに復元するためのSQLを作成してください。以下のファイルを使用します。
- フルバックアップ: C:\Backups\MyDatabase_Full.bak
- トランザクションログ: C:\Backups\MyDatabase_Log.bak
演習問題の解答例
解答1: フルバックアップと差分バックアップのリストア
-- フルバックアップをリストア
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Full.bak'
WITH NORECOVERY;
-- 差分バックアップを適用
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Diff.bak'
WITH RECOVERY;
解答2: ポイントインタイムリカバリ
-- フルバックアップをリストア
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Full.bak'
WITH NORECOVERY;
-- トランザクションログを適用
RESTORE LOG MyDatabase
FROM DISK = 'C:\Backups\MyDatabase_Log.bak'
WITH STOPAT = '2025-01-01 12:00:00', RECOVERY;
おわりに
SQL Serverのバックアップとリカバリは、データ保護と障害対応の要です。
RESTOREコマンドを活用し、部分リストアやポイントインタイムリカバリといった高度な手法を習得することで、運用の信頼性を高めましょう。