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

更新 : 2006 年 12 月 12 日

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

ms190794.note(ja-jp,SQL.90).gifメモ :
SQL Server のディスク上ストレージ形式は、64 ビット環境でも 32 ビット環境でも同じです。このため、アタッチは 32 ビット環境と 64 ビット環境の間でも機能します。一方の環境で実行中のサーバー インスタンスからデタッチしたデータベースは、他方の環境で実行中のサーバー インスタンスにアタッチできます。
ms190794.note(ja-jp,SQL.90).gifメモ :
データベースをデタッチおよびアタッチするたびに設定される権限の詳細については、「データ ファイルとログ ファイルのセキュリティ保護」を参照してください。

データベースのデタッチ

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

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

  • データベースがレプリケートおよびパブリッシュされている。レプリケートされている場合、データベースをパブリッシュしてはいけません。データベースをデタッチする前に、sp_replicationdboption を実行してパブリッシングを無効にする必要があります。
    ms190794.note(ja-jp,SQL.90).gifメモ :
    sp_replicationdboption を使用できない場合、sp_removedbreplication を実行してレプリケーションを削除できます。
  • データベース スナップショットがデータベースに存在している。
    データベースをデタッチするには、すべてのスナップショットを削除する必要があります。詳細については、「データベース スナップショットを削除する方法 (Transact-SQL)」を参照してください。
    ms190794.note(ja-jp,SQL.90).gifメモ :
    データベース スナップショットのデタッチおよびアタッチは行うことができません。
  • データベースがデータベース ミラーリング セッションでミラー化される。
    セッションが終了するまでは、データベースはデタッチできません。詳細については、「データベース ミラーリングの削除」を参照してください。
  • データベースに問題がある。SQL Server 2005 では、問題のあるデータベースはデタッチできません。デタッチするには緊急モードにする必要があります。データベースを緊急モードにする方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。
  • データベースがシステム データベースである。

データベースをデタッチすると、SQL Server のインスタンスのプラン キャッシュが消去されます。プラン キャッシュが消去されると、後続のすべての実行プランが再コンパイルされ、場合によっては、クエリ パフォーマンスが一時的に急激に低下します。SQL Server 2005 Service Pack 2 では、プラン キャッシュ内のキャッシュストアが消去されるたびに、"SQL Server は、一部のデータベース メンテナンス操作または再構成操作により、'%s' キャッシュストア (プラン キャッシュの一部) のキャッシュストア フラッシュを %d 個検出しました。" という情報メッセージが SQL Server エラー ログに記録されます。このメッセージは、キャッシュが 5 分以内にフラッシュされる場合に限り、その間隔でログに記録されます。

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

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

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

デタッチ エラーへの対応

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

  1. プライマリ ファイルだけでなく、データベースに関連付けられているすべてのファイルを再アタッチします。
  2. エラー メッセージの原因となった問題を解決します。
  3. データベースをデタッチし直します。

データベースのアタッチ

コピーまたはデタッチした SQL Server データベースはアタッチできます。SQL Server 2005 では、データベースの一部であるフルテキスト ファイルがデータベースと共にアタッチされます。詳細については、「フルテキスト カタログのアタッチとデタッチ」を参照してください。

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

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

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

ms190794.note(ja-jp,SQL.90).gifメモ :
アタッチ中のプライマリ データ ファイルが読み取り専用の場合、データベース エンジンではデータベースが読み取り専用であると想定されます。

暗号化されたデータベースが 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 ではプライマリ ファイルに格納されているログの場所を更新できないので、新しいログ ファイルは作成できません。
    ms190794.note(ja-jp,SQL.90).gif重要 :
    読み取り専用データベースをデタッチして再アタッチすると、差分のベース情報が失われます。その結果、その読み取り専用データベースと master データベースの同期が取れなくなります。この状態で差分バックアップを行うと、予期しない結果が発生する場合があります。読み取り専用データベースに対して差分バックアップを使用する場合、データベースを再アタッチした後に、完全バックアップを行って現在の差分のベースを作成してください。

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

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

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

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

ms190794.note(ja-jp,SQL.90).gifメモ :
新しいバージョンの SQL Server で作成したデータベースは、それ以前のバージョンにアタッチできません。
ms190794.note(ja-jp,SQL.90).gifメモ :
アタッチは、vardecimal ストレージ形式でも正しく機能します。ただし、各データベース エンジンを SQL Server 2005 Service Pack 2 以降にアップグレードし、関連するすべてのデータベースを vardecimal ストレージ形式に対応させる必要があります。たとえば、vardecimal ストレージ形式対応の Service Pack 2 データベースは、以前のバージョンの SQL Server にアタッチすることができません。vardecimal ストレージ形式の詳細については、「decimal データの可変長での格納」を参照してください。

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

以前のバージョンの SQL Server からデータベースをアップグレードするには

SQL Server 2005 では、デタッチ操作とアタッチ操作を使用して、SQL Server 7.0 または SQL Server 2000 のユーザー データベースをアップグレードできます。ただし、次の制限事項が適用されます。

  • SQL Server 7.0 または SQL Server 2000 で作成した master データベース、model データベース、または msdb データベースのコピーは、SQL Server 2005 にアタッチできません。
  • インデックス作成操作が書き込まれた SQL Server 7.0 のログ ファイルは、SQL Server 2000 および SQL Server 2005 のいずれにもアタッチできません。
  • デタッチではなくコピーされた、レプリケートされたデータベースをアタッチするには、次の操作を実行します。
    • 同じサーバー インスタンスのアップグレードされたバージョンにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_vupgrade_replication を実行してレプリケーションをアップグレードする必要があります。詳細については、「sp_vupgrade_replication (Transact-SQL)」を参照してください。
    • バージョンに関係なく別のサーバー インスタンスにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_removedbreplication を実行してレプリケーションを削除する必要があります。詳細については、「sp_removedbreplication (Transact-SQL)」を参照してください。

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

データベースまたはデータベース ファイルの移動

ms190794.note(ja-jp,SQL.90).gif重要 :
データベースを移動するときは、デタッチしてアタッチする操作ではなく、ALTER DATABASE による計画的再配置用のプロシージャを使用することをお勧めします。詳細については、「データベース ファイルの移動」を参照してください。

通常は、デタッチ操作とアタッチ操作を使用してデータベースを移動できます。一般的なシナリオでは、データベースを次のいずれかの場所に移動します。

  • 同一コンピュータ上の他の物理ディスク。たとえば、データ ファイルを格納するディスクの空き領域がない場合に、(他のディスク上に新しいファイルを追加してデータベースを拡張するのではなく) 既存のファイルを拡張するときなどです。
  • 他のコンピュータ。この場合、データベースを再作成してデータベース バックアップを復元する必要はありません。

デタッチしてアタッチする操作でデータベースを移動するには、次の操作が必要です。

  1. データベースをデタッチします。
  2. データベース ファイルを他のサーバーまたはディスクに移動します。
  3. 移動したファイルの新しい格納場所を指定してデータベースをアタッチします。

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

参照

概念

データベースのデタッチとアタッチ
データ ファイルとログ ファイルのセキュリティ保護
ファイルおよびファイル グループについて

その他の技術情報

CREATE DATABASE (Transact-SQL)
sp_detach_db (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • SQL Server のディスク上ストレージ形式が 64 ビット環境でも 32 ビット環境でも同じであるという注意事項を追加しました。
  • 「別のサーバー インスタンスへのデータベースのアタッチ」のセクションに注意事項を追加しました。
  • vardecimal ストレージ形式に関する注意事項を追加しました。

2006 年 7 月 17 日

新しい内容 :
  • 「データベースのデタッチ」にプラン キャッシュの消去に関する情報を追加しました。

2006 年 7 月 17 日

新しい内容 :
  • システム データベースのデタッチに対する制限を追加しました。
  • 「バックアップと復元およびデタッチ」セクションを追加しました。
  • 「バックアップと復元およびアタッチ」セクションを追加しました。

2005 年 12 月 5 日

新しい内容 :
  • セキュリティの記述を追加しました。