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

データベースのデータ ログ ファイルとトランザクション ログ ファイルをデタッチしてから、SQL Serverの同じインスタンスまたは別のインスタンスに再アタッチできます。 データベースのデタッチとアタッチは、データベースを同じコンピューター上のSQL Serverの別のインスタンスに変更する場合や、データベースを移動する場合に便利です。

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

セキュリティ

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

重要

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

データベースのデタッチ

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

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

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

    Note

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

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

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

    Note

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

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

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

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

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

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

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

デタッチ エラーへの対応

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

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

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

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

データベースのインポート

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

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

Note

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

暗号化されたデータベースが最初に 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)」を参照してください。

Related Tasks

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

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

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

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

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

参照

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