次の方法で共有


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

データベースのデータ ファイルおよびトランザクション ログ ファイルは、デタッチして、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 2005 以降のバージョンでは、問題のあるデータベースはデタッチできません。デタッチするには緊急モードにする必要があります。データベースを緊急モードにする方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

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

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

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

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

デタッチ エラーへの対応

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

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

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

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

データベースのアタッチ

コピーまたはデタッチした SQL Server データベースはアタッチできます。フルテキスト カタログ ファイルを含む SQL Server 2005 データベースを SQL Server 2008 サーバー インスタンスにアタッチする場合、カタログ ファイルは 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 2005 以降のバージョンでは、アタッチおよびデタッチ操作により、複数データベースにまたがる組み合わせ所有権が無効になります。組み合わせ所有権を有効にする方法の詳細については、「cross db ownership chaining オプション」を参照してください。また、データベースをアタッチするときは常に TRUSTWORTHY が OFF に設定されます。TRUSTWORTHY を ON に設定する方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

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

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

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

重要な注意事項重要

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

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

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

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

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

  • SQL Server 2000 または SQL Server 2005 で作成した master データベース、model データベース、または msdb データベースのコピーはアタッチできません。

  • レプリケートされたデータベースをアタッチする際に、そのデータベースがデタッチではなくコピーされたものである場合は、次の点を考慮してください。

    • 同じサーバー インスタンスのアップグレードされたバージョンにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_vupgrade_replication を実行してレプリケーションをアップグレードする必要があります。詳細については、「sp_vupgrade_replication (Transact-SQL)」を参照してください。

    • バージョンに関係なく別のサーバー インスタンスにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_removedbreplication を実行してレプリケーションを削除する必要があります。詳細については、「sp_removedbreplication (Transact-SQL)」を参照してください。

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

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

重要な注意事項重要

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

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

  • 同一コンピュータ上の他の物理ディスク。たとえば、データ ファイルを格納するディスクの空き領域がない場合に、(他のディスク上に新しいファイルを追加してデータベースを拡張するのではなく) 既存のファイルを拡張するときなどです。

  • 他のコンピュータ。この場合、データベースを再作成してデータベース バックアップを復元する必要はありません。

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

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

  2. データベース ファイルを他のサーバーまたはディスクに移動します。

  3. 移動したファイルの新しい格納場所を指定してデータベースをアタッチします。

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