サーバー移行やトラブル時に役立つ!SQL Serverのデータベース分離・アタッチ・復元方法を解説
SQL Serverでは、データベースを一時的に切り離したり、別の環境へ移行したりする場面があります。
そのときに使用するのが分離(Detach)とアタッチ(Attach)、そしてバックアップからの復元(Restore)です。
この記事では、それぞれの操作の違いと使い分け、実務で安全に行うための手順と注意点をわかりやすく解説します。
目次
分離・アタッチ・復元の違いを理解する
それぞれの役割と特徴
| 操作 | 概要 | 主な用途 | 必要なファイル |
|---|---|---|---|
| 分離(Detach) | データベースをインスタンスから切り離す | 他サーバーへの移動・コピー前 | .mdf, .ldf |
| アタッチ(Attach) | 既存の.mdf/.ldfファイルを再登録する | 移行後の再利用・復旧 | .mdf, .ldf(または一部省略可) |
| 復元(Restore) | バックアップファイル(.bak)から復旧 | バックアップ運用からの復旧 | .bak |
分離+アタッチはファイルベースでの移行、 バックアップ+復元は保守運用での復旧というイメージで使い分けます。
データベースを分離(Detach)する手順
GUI(SSMS)での手順
- 対象データベースを右クリック → [タスク] → [デタッチ]
- 確認画面で接続ユーザーを切断し、「OK」をクリック
- データベースが一覧から消え、.mdf と .ldf ファイルが残る
T-SQLでの実行
USE master;
GO
ALTER DATABASE SalesDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db @dbname = 'SalesDB';
SINGLE_USER オプションで他接続を切断してから実行します。
分離後の状態
.mdf(データファイル)と .ldf(ログファイル)がサーバー上に残ります。 これらを別サーバーにコピーしてアタッチすることで再利用できます。
データベースをアタッチ(Attach)する手順
GUI(SSMS)での手順
- [データベース] を右クリック → [アタッチ]
- [追加]ボタンで .mdf ファイルを選択
- 自動的に .ldf ファイルも検出される(なければ手動指定)
- [OK]で登録完了
T-SQLでの実行
CREATE DATABASE SalesDB
ON (FILENAME = 'D:\Data\SalesDB.mdf'),
(FILENAME = 'D:\Data\SalesDB_log.ldf')
FOR ATTACH;
ログファイルが紛失している場合は、FOR ATTACH_REBUILD_LOG を指定して再生成することも可能です。
バックアップファイルからの復元手順
GUI(SSMS)での復元
- [データベース]を右クリック → [データベースの復元]
- ソースに「デバイス」を選択し、バックアップファイル(.bak)を指定
- [オプション]で上書き(WITH REPLACE)を指定する場合あり
- [OK]で復元実行
T-SQLでの復元
RESTORE DATABASE SalesDB
FROM DISK = 'D:\Backup\SalesDB_Full.bak'
WITH MOVE 'SalesDB_Data' TO 'D:\Data\SalesDB.mdf',
MOVE 'SalesDB_Log' TO 'D:\Data\SalesDB.ldf',
REPLACE;
MOVE句で格納先を変更できるため、移行時にもよく使用されます。
操作時の注意点とトラブル対策
分離・アタッチの注意点
- 分離中はデータベースが利用不可になる(業務停止が必要)
- 分離後の.mdf/.ldfファイルは削除・移動時に破損リスクがあるため慎重に扱う
- アタッチ時、SQL Serverのバージョン互換性を確認(古い→新しいは可、逆は不可)
復元時の注意点
- 同名DBが存在する場合はWITH REPLACEが必要
- バックアップ元と同じリカバリモデルで復元するのが望ましい
- ログバックアップを使う場合は、順序(FULL→DIFF→LOG)を守る
よくあるトラブル例
- 「ファイルにアクセスできません」:SQL Serverの実行ユーザーにファイル権限を付与
- 「バージョンが異なります」:異なるバージョン間のアタッチは非対応(バックアップ経由で対応)
- 「ログファイルが見つかりません」:FOR ATTACH_REBUILD_LOGを使用
まとめと次のステップ
学んだ内容の整理
- 分離(Detach)はインスタンスから切り離す操作
- アタッチ(Attach)は.mdf/.ldfファイルを再登録する操作
- バックアップからの復元(Restore)は保守・障害対応時に使用
- バージョン互換性とファイル権限に注意
SQL Server学習シリーズ
参考リンク

0 件のコメント:
コメントを投稿