2026年5月8日金曜日

SQL Server データベースの分離・アタッチ・復元方法|トラブル対応と環境移行の実務

サーバー移行やトラブル時に役立つ!SQL Serverのデータベース分離・アタッチ・復元方法を解説

SQL Serverでは、データベースを一時的に切り離したり、別の環境へ移行したりする場面があります。
そのときに使用するのが分離(Detach)アタッチ(Attach)、そしてバックアップからの復元(Restore)です。
この記事では、それぞれの操作の違いと使い分け、実務で安全に行うための手順と注意点をわかりやすく解説します。

目次

分離・アタッチ・復元の違いを理解する

それぞれの役割と特徴

操作 概要 主な用途 必要なファイル
分離(Detach) データベースをインスタンスから切り離す 他サーバーへの移動・コピー前 .mdf, .ldf
アタッチ(Attach) 既存の.mdf/.ldfファイルを再登録する 移行後の再利用・復旧 .mdf, .ldf(または一部省略可)
復元(Restore) バックアップファイル(.bak)から復旧 バックアップ運用からの復旧 .bak

分離+アタッチはファイルベースでの移行、 バックアップ+復元は保守運用での復旧というイメージで使い分けます。

データベースを分離(Detach)する手順

GUI(SSMS)での手順

  1. 対象データベースを右クリック → [タスク] → [デタッチ]
  2. 確認画面で接続ユーザーを切断し、「OK」をクリック
  3. データベースが一覧から消え、.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)での手順

  1. [データベース] を右クリック → [アタッチ]
  2. [追加]ボタンで .mdf ファイルを選択
  3. 自動的に .ldf ファイルも検出される(なければ手動指定)
  4. [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)での復元

  1. [データベース]を右クリック → [データベースの復元]
  2. ソースに「デバイス」を選択し、バックアップファイル(.bak)を指定
  3. [オプション]で上書き(WITH REPLACE)を指定する場合あり
  4. [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 件のコメント:

コメントを投稿