データベースのデタッチとアタッチ (SQL Server)

適用対象: SQL Server

データベースのデータ ファイルおよびトランザクション ログ ファイルは、デタッチして、SQL Server の同一または別の インスタンスに再度アタッチすることができます。 同一コンピューターの別の SQL Server インスタンスにデータベースを変更したり、データベースを移動したりする場合、データベースをデタッチしてアタッチする操作が便利です。

アクセス許可

ファイル アクセス許可は、データベースのデタッチやアタッチなど、一部のデータベース操作中に設定されます。

重要

不明なソースや信頼されていないソースからのデータベースのアタッチまたは復元は実行しないことをお勧めします。 こうしたデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。 不明または信頼できないソースのデータベースを使用する前に、運用サーバー以外のサーバーでそのデータベースに対し DBCC CHECKDB (Transact-SQL) を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。

データベースのデタッチ

データベースはデタッチすると、SQL Server インスタンスからは削除されますが、データ ファイルおよびトランザクション ログ ファイル内ではそのまま残ります。 これらのデータ ファイルとトランザクション ログ ファイルを使用して、SQL Server の任意のインスタンスにデータベースをアタッチできます。その際、そのデータベースをデタッチした元のサーバーにアタッチすることもできます。

次の条件に 1 つでも該当する場合、データベースをデタッチできません:

  • データベースがレプリケートおよびパブリッシュされている。 レプリケートされている場合、データベースをパブリッシュしてはいけません。 データベースをデタッチする前に、 sp_replicationdboptionを実行してパブリッシングを無効にする必要があります。

    Note

    sp_replicationdboption を使用できない場合、sp_removedbreplication を実行してレプリケーションを削除できます。

  • データベースに、データベース スナップショットが存在する。

    データベースをデタッチするには、すべてのデータベース スナップショットを削除する必要があります。 詳細については、「データベース スナップショットの削除 (Transact-SQL)」を参照してください。

    Note

    データベース スナップショットのデタッチおよびアタッチは行うことができません。

  • データベースは、Always On 可用性グループの一部です。

    可用性グループから削除されるまで、データベースをデタッチすることはできません。 詳細については、「Always On 可用性グループからプライマリ データベースを削除する」をご覧ください。

  • データベースがデータベース ミラーリング セッションでミラー化される。

    セッションが終了しない限り、データベースはデタッチできません。 詳細については、「データベース ミラーリングの削除 (SQL Server)」を参照してください。

  • データベースに問題がある。 問題のあるデータベースはデタッチできません。デタッチできるようにするには緊急モードにする必要があります。 データベースを緊急モードに設定する方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

  • データベースがシステム データベースである。

バックアップと復元およびデタッチ

読み取り専用のデータベースをデタッチすると、差分バックアップの差分ベースに関する情報が失われます。 詳細については、「差分バックアップ (SQL Server)」を参照してください。

デタッチ エラーへの対応

データベースのデタッチ中にエラーが発生すると、データベースがクリーンに閉じず、トランザクション ログが再構築されないことがあります。 エラー メッセージが表示される場合は、次の修正操作を実行してください。

  1. プライマリ ファイルだけでなく、データベースに関連付けられているすべてのファイルを再アタッチします。

  2. エラー メッセージの原因となった問題を解決します。

  3. データベースをデタッチし直します。

データベースのアタッチ

コピーまたはデタッチした SQL Server データベースはアタッチできます。 フルテキスト カタログ ファイルを含む SQL Server 2005 (9.x) データベースを サーバー インスタンスにアタッチする場合、カタログ ファイルは SQL Server 2005 (9.x) と同様に他のデータベース ファイルと一緒に以前の場所からアタッチされます。 詳細については、「フルテキスト検索のアップグレード」を参照してください。

データベースをアタッチするときは、すべてのデータ ファイル (.mdf ファイルおよび .ndf ファイル) を利用できる状態にする必要があります。 データベースを最初に作成したときか最後にアタッチしたときとデータ ファイルのパスが異なる場合、ファイルの現在のパスを指定する必要があります。

Note

アタッチ中のプライマリ データ ファイルが読み取り専用の場合、データベース エンジンではデータベースが読み取り専用であると想定されます。

暗号化されたデータベースが SQL Server のインスタンスに最初にアタッチされている場合、データベースの所有者は、OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password' というステートメントを実行してデータベース マスター キー (DMK) を開く必要があります。 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY というステートメントを実行して DMK の自動暗号化解除を有効にすることをお勧めします。 詳細については、「CREATE MASTER KEY (Transact-SQL)」と「ALTER MASTER KEY (Transact-SQL)」を参照してください。

次に示すように、ログ ファイルをアタッチするための要件の一部は、データベースが読み書き可能か読み取り専用かによって異なります。

  • 読み書き可能なデータベースは、通常、新しい場所にログ ファイルをアタッチできます。 ただし、場合によっては、データベースの再アタッチに既存のログ ファイルが必要になります。 したがって、デタッチされたログ ファイルなしでデータベースが正常にアタッチされるまで、デタッチされたすべてのログ ファイルを常に保持しておくことが重要です。

    読み書き可能なデータベースのログ ファイルが 1 つで、そのファイルの新しい場所を指定しない場合、アタッチ操作ではファイルの古い場所が検索されます。 古いログ ファイルが見つかった場合、データベースがクリーンにシャットダウンされたかどうかにかかわらず、そのファイルが使用されます。 ただし、古いログ ファイルが見つからなかった場合、およびデータベースがクリーンにシャットダウンされたもののアクティブなログ チェーンがない場合、アタッチ操作によってそのデータベースの新しいログ ファイルが作成されます。

  • アタッチ中のプライマリ データ ファイルが読み取り専用の場合、データベース エンジンではデータベースが読み取り専用であると想定されます。 読み取り専用データベースは、プライマリ ファイルに指定されている場所でログ ファイルを使用できる必要があります。 SQL Server ではプライマリ ファイルに格納されているログの場所を更新できないので、新しいログ ファイルは作成できません。

データベースのアタッチ時におけるメタデータの変更

読み取り専用データベースをデタッチして再アタッチすると、現在の差分ベースに関するバックアップ情報が失われます。 差分ベース とは、データベース内のすべてのデータ、またはデータベースのファイルやファイル グループのサブセット内のすべてのデータを対象とした最新の完全バックアップのことです。 ベース バックアップ情報がない場合、master データベースは読み取り専用データベースと同期されなくなります。そのため、それ以降に取得した差分バックアップで予期しない結果が発生することがあります。 したがって、読み取り専用データベースに対して差分バックアップを使用している場合は、データベースを再アタッチした後に、完全バックアップを行って新しい差分ベースを作成する必要があります。 差分バックアップについては、「差分バックアップ (SQL Server)」を参照してください。

アタッチ時に、データベースが起動します。 通常はデータベースをアタッチすると、そのデータベースはデタッチまたはコピーされたときと同じ状態になります。 ただし、アタッチおよびデタッチ操作により、複数データベースにまたがる組み合わせ所有権が無効になります。 チェーンを有効にする方法については、「 cross db ownership chaining サーバー構成オプション」を参照してください。

重要

既定で、かつ、セキュリティ上の理由から、データベースがアタッチされているとき、is_broker_enabledis_honor_broker_priority_onis_trustworthy_on のオプションは必ず OFF に設定されます。 これらのオプションを ON に設定する方法については「ALTER DATABASE (Transact-SQL)」を参照してください。 メタデータの詳細については、「データベースを別のサーバーで使用できるようにするときのメタデータの管理」を参照してください。

バックアップと復元およびアタッチ

完全または部分的にオフラインのデータベースと同様に、復元中のファイルが含まれているデータベースはアタッチできません。 復元シーケンスを停止すると、データベースをアタッチできます。 データベースのインポート後、復元シーケンスを再開できます。

別のサーバー インスタンスへのデータベースのアタッチ

重要

最新バージョンの SQL Server で作成したデータベースは、それ以前のバージョンでアタッチすることはできません。 これにより、データベースが古いバージョンのデータベース エンジンで物理的に使用できないようにします。 ただし、これはメタデータの状態に関係し、データベースの互換性レベル には影響しません。 詳細については、「ALTER DATABASE (Transact-SQL) の互換性レベル」を参照してください。

データベースを別のサーバー インスタンスにアタッチするときは、ユーザーおよびアプリケーションに一貫した使用環境を提供するために、その他のサーバー インスタンスで、データベースのメタデータの一部またはすべてを作成し直す必要が生じる場合があります。 このメタデータには、ログインやジョブなどが含まれます。 詳細については、「データベースを別のサーバーで使用できるようにするときのメタデータの管理」を参照してください。

タスク [アーティクル]
データベースのデタッチ - sp_detach_db (Transact-SQL)
- データベースのデタッチ
データベースのアタッチ - CREATE DATABASE
- データベースのアタッチ
- sp_attach_db (Transact-SQL)
- sp_attach_single_file_db (Transact-SQL)
デタッチとアタッチの操作を使用してデータベースをアップグレードする - デタッチとアタッチを使用したデータベースのアップグレード (Transact-SQL)
デタッチとアタッチの操作を使用してデータベースを移動する - デタッチとアタッチを使用したデータベースの移動 (Transact-SQL)
データベース スナップショットの削除 - データベース スナップショットの削除 (Transact-SQL)