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

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

SQL Server のディスク上ストレージ形式は、64 ビット環境でも 32 ビット環境でも同じです。 このため、アタッチは 32 ビット環境と 64 ビット環境の間でも機能します。 一方の環境で実行中のサーバー インスタンスからデタッチしたデータベースは、他方の環境で実行中のサーバー インスタンスにアタッチできます。

このトピックの内容

  • セキュリティ

  • データベースのデタッチ

  • データベースのアタッチ

  • 関連タスク

セキュリティ

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

セキュリティに関する注意セキュリティに関する注意

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

データベースのデタッチ

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

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

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

    注意

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

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

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

    注意

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

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

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

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

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

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

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

デタッチ エラーへの対応

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

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

データベースのアタッチ

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

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

注意

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

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

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

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

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

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

このセクションの内容

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

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

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

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

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

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

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

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

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

重要な注意事項重要

新しいバージョンの SQL Server で作成したデータベースは、それ以前のバージョンでアタッチすることはできません。

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連タスク

データベースをデタッチするには

データベースをアタッチするには

デタッチとアタッチを使用してデータベースをアップグレードするには

デタッチとアタッチを使用してデータベースを移動するには

データベース スナップショットを削除するには

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

概念

データベース ファイルとファイル グループ