データベースのデタッチとアタッチ (SQL Server)Database Detach and Attach (SQL Server)

データベースのデータ ファイルおよびトランザクション ログ ファイルは、デタッチして、 SQL ServerSQL Serverの同一または別のインスタンスに再度アタッチすることができます。The data and transaction log files of a database can be detached and then reattached to the same or another instance of SQL ServerSQL Server. 同一コンピューターの別の SQL ServerSQL Server インスタンスにデータベースを変更したり、データベースを移動したりする場合、データベースをデタッチしてアタッチする操作が便利です。Detaching and attaching a database is useful if you want to change the database to a different instance of SQL ServerSQL Server on the same computer or to move the database.

Security Security

ファイル アクセス許可は、データベースのデタッチやアタッチなど、さまざまなデータベース操作中に設定されます。File access permissions are set during a number of database operations, including detaching or attaching a database.

重要

不明なソースや信頼されていないソースからデータベースをアタッチまたは復元しないことをお勧めします。We recommend that you do not attach or restore databases from unknown or untrusted sources. こうしたデータベースには、意図しない Transact-SQLTransact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. 不明または信頼できないソースのデータベースを使用する前に、実稼働用ではないサーバーでそのデータベースに対し DBCC CHECKDB を実行し、さらに、そのデータベースのストアド プロシージャやその他のユーザー定義コードなどのコードを調べます。Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

データベースのデタッチ Detaching a Database

データベースはデタッチすると、 SQL ServerSQL Server インスタンスからは削除されますが、データ ファイルおよびトランザクション ログ ファイル内ではそのまま残ります。Detaching a database removes it from the instance of SQL ServerSQL Server but leaves the database intact within its data files and transaction log files. これらのデータ ファイルとトランザクション ログ ファイルを使用して、 SQL ServerSQL Serverの任意のインスタンスにデータベースをアタッチできます。その際、そのデータベースをデタッチした元のサーバーにアタッチすることもできます。These files can then be used to attach the database to any instance of SQL ServerSQL Server, including the server from which the database was detached.

次の条件に 1 つでも該当する場合、データベースをデタッチできません。You cannot detach a database if any of the following are true:

  • データベースがレプリケートおよびパブリッシュされている。The database is replicated and published. レプリケートされている場合、データベースをパブリッシュしてはいけません。If replicated, the database must be unpublished. データベースをデタッチする前に、 sp_replicationdboptionを実行してパブリッシングを無効にする必要があります。Before you can detach it, you must disable publishing by running sp_replicationdboption.

    注意

    sp_replicationdboptionを使用できない場合、 sp_removedbreplicationを実行してレプリケーションを削除できます。If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • データベースに、データベース スナップショットが存在する。A database snapshot exists on the database.

    データベースをデタッチするには、すべてのデータベース スナップショットを削除する必要があります。Before you can detach the database, you must drop all of its snapshots. 詳細については、「 データベース スナップショットの削除 (Transact-SQL)の同一または別のインスタンスに再度アタッチすることができます。For more information, see Drop a Database Snapshot (Transact-SQL).

    注意

    データベース スナップショットのデタッチおよびアタッチは行うことができません。A database snapshot cannot be detached or attached.

  • データベースがデータベース ミラーリング セッションでミラー化される。The database is being mirrored in a database mirroring session.

    セッションが終了するまでは、データベースはデタッチできません。The database cannot be detached unless the session is terminated. 詳細については、「データベース ミラーリングを削除する (SQL Server)」を参照してください。For more information, see Removing Database Mirroring (SQL Server).

  • データベースに問題がある。The database is suspect. 問題のあるデータベースはデタッチできません。デタッチするには緊急モードにする必要があります。A suspect database cannot be detached; before you can detach it, you must put it into emergency mode. データベースを緊急モードに設定する方法の詳細については、「 ALTER DATABASE (Transact-SQL)」を参照してください。For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • データベースがシステム データベースである。The database is a system database.

バックアップと復元およびデタッチBackup and Restore and Detach

読み取り専用のデータベースをデタッチすると、差分バックアップの差分ベースに関する情報が失われます。Detaching a read-only database loses information about the differential bases of differential backups. 詳細については、「差分バックアップ (SQL Server)」を参照してください。For more information, see Differential Backups (SQL Server).

デタッチ エラーへの対応Responding to Detach Errors

データベースのデタッチ中にエラーが発生すると、データベースがクリーンに閉じず、トランザクション ログが再構築されないことがあります。Errors produced while detaching a database can prevent the database from closing cleanly and the transaction log from being rebuilt. エラー メッセージが表示される場合は、次の修正操作を実行してください。If you receive an error message, perform the following corrective actions:

  1. プライマリ ファイルだけでなく、データベースに関連付けられているすべてのファイルを再アタッチします。Reattach all files associated with the database, not just the primary file.

  2. エラー メッセージの原因となった問題を解決します。Resolve the problem that caused the error message.

  3. データベースをデタッチし直します。Detach the database again.

データベースのインポート Attaching a Database

コピーまたはデタッチした SQL ServerSQL Server データベースはアタッチできます。You can attach a copied or detached SQL ServerSQL Server database. フルテキスト カタログ ファイルを含む SQL Server 2005SQL Server 2005 データベースを SQL Server 2016SQL Server 2016 サーバー インスタンスにアタッチする場合、カタログ ファイルは SQL Server 2005SQL Server 2005と同様に他のデータベース ファイルと一緒に以前の場所からアタッチされます。When you attach a SQL Server 2005SQL Server 2005 database that contains full-text catalog files onto a SQL Server 2016SQL Server 2016 server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005SQL Server 2005. 詳細については、「 フルテキスト検索のアップグレード」を参照してください。For more information, see Upgrade Full-Text Search.

データベースをアタッチするときは、すべてのデータ ファイル (MDF ファイルおよび NDF ファイル) を利用できる状態にする必要があります。When you attach a database, all data files (MDF and NDF files) must be available. データベースを最初に作成したときか最後にアタッチしたときとデータ ファイルのパスが異なる場合、ファイルの現在のパスを指定する必要があります。If any data file has a different path from when the database was first created or last attached, you must specify the current path of the file.

注意

アタッチ中のプライマリ データ ファイルが読み取り専用の場合、 データベース エンジンDatabase Engine ではデータベースが読み取り専用であると想定されます。If the primary data file being attached is read-only, the データベース エンジンDatabase Engine assumes that the database is read-only.

暗号化されたデータベースが SQL ServerSQL Serverのインスタンスに最初にアタッチされている場合、データベース所有者は、OPEN MASTER KEY DECRYPTION BY PASSWORD = 'パスワード'というステートメントを実行してデータベースのマスター キーを開く必要があります。When an encrypted database is first attached to an instance of SQL ServerSQL Server, the database owner must open the master key of the database by executing the following statement: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY ステートメントを実行してマスター キーの自動暗号化解除を有効にすることをお勧めします。We recommend that you enable automatic decryption of the master key by executing the following statement: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. 詳細については、「CREATE MASTER KEY (Transact-SQL)」と「ALTER MASTER KEY (Transact-SQL)」を参照してください。For more information, see CREATE MASTER KEY (Transact-SQL) and ALTER MASTER KEY (Transact-SQL).

次に示すように、ログ ファイルをアタッチするための要件の一部は、データベースが読み書き可能か読み取り専用かによって異なります。The requirement for attaching log files depends partly on whether the database is read-write or read-only, as follows:

  • 読み書き可能なデータベースは、通常、新しい場所にログ ファイルをアタッチできます。For a read-write database, you can usually attach a log file in a new location. ただし、場合によっては、データベースの再アタッチに既存のログ ファイルが必要になります。However, in some cases, reattaching a database requires its existing log files. したがって、デタッチされたログ ファイルなしでデータベースが正常にアタッチされるまで、デタッチされたすべてのログ ファイルを常に保持しておくことが重要です。Therefore, it is important to always keep all the detached log files until the database has been successfully attached without them.

    読み書き可能なデータベースのログ ファイルが 1 つで、そのファイルの新しい場所を指定しない場合、アタッチ操作ではファイルの古い場所が検索されます。If a read-write database has a single log file and you do not specify a new location for the log file, the attach operation looks in the old location for the file. 古いログ ファイルが見つかった場合、データベースがクリーンにシャットダウンされたかどうかにかかわらず、そのファイルが使用されます。If it is found, the old log file is used, regardless of whether the database was shut down cleanly. しかし、古いログ ファイルが見つからなかった場合、およびデータベースがクリーンにシャットダウンされたもののアクティブなログ チェーンがない場合、アタッチ操作によってそのデータベースの新しいログ ファイルが作成されます。However, if the old log file is not found and if the database was shut down cleanly and has no active log chain, the attach operation attempts to build a new log file for the database.

  • アタッチ中のプライマリ データ ファイルが読み取り専用の場合、 データベース エンジンDatabase Engine ではデータベースが読み取り専用であると想定されます。If the primary data file being attached is read-only, the データベース エンジンDatabase Engine assumes that the database is read-only. 読み取り専用データベースは、プライマリ ファイルに指定されている場所でログ ファイルを使用できる必要があります。For a read-only database, the log file or files must be available at the location specified in the primary file of the database. SQL ServerSQL Server ではプライマリ ファイルに格納されているログの場所を更新できないので、新しいログ ファイルは作成できません。A new log file cannot be built because SQL ServerSQL Server cannot update the log location stored in the primary file.

データベースのインポート時におけるメタデータの変更 Metadata Changes on Attaching a Database

読み取り専用データベースをデタッチして再アタッチすると、現在の差分ベースに関するバックアップ情報が失われます。When a read-only database is detached and then reattached, the backup information about the current differential base is lost. 差分ベース とは、データベース内のすべてのデータ、またはデータベースのファイルやファイル グループのサブセット内のすべてのデータを対象とした最新の完全バックアップのことです。The differential base is the most recent full backup of all the data in the database or in a subset of the files or filegroups of the database. ベース バックアップ情報がない場合、 master データベースは読み取り専用データベースと同期されなくなります。そのため、それ以降に取得した差分バックアップで予期しない結果が発生することがあります。Without the base-backup information, the master database becomes unsynchronized with the read-only database, so differential backups taken thereafter may provide unexpected results. したがって、読み取り専用データベースに対して差分バックアップを使用する場合は、データベースを再アタッチした後に、完全バックアップを行って新しい差分ベースを作成する必要があります。Therefore, if you are using differential backups with a read-only database, you should establish a new differential base by taking a full backup after you reattach the database. 差分バックアップについては、「差分バックアップ (SQL Server)」を参照してください。For information about differential backups, see Differential Backups (SQL Server).

アタッチ時に、データベースが起動します。On attach, database startup occurs. 通常はデータベースをアタッチすると、そのデータベースはデタッチまたはコピーされたときと同じ状態になります。Generally, attaching a database places it in the same state that it was in when it was detached or copied. ただし、アタッチおよびデタッチ操作により、複数データベースにまたがる組み合わせ所有権が無効になります。However, attach-and-detach operations both disable cross-database ownership chaining for the database. チェーンを有効にする方法については、「 cross db ownership chaining サーバー構成オプション」を参照してください。For information about how to enable chaining, see cross db ownership chaining Server Configuration Option. また、データベースをアタッチするときは常に TRUSTWORTHY が OFF に設定されます。Also, TRUSTWORTHY is set to OFF whenever the database is attached. TRUSTWORTHY を ON に設定する方法については「ALTER DATABASE (Transact-SQL)」を参照してください。For information about how to set TRUSTWORTHY to ON, see ALTER DATABASE (Transact-SQL).

バックアップと復元およびアタッチBackup and Restore and Attach

完全または部分的にオフラインのデータベースと同様に、復元中のファイルが含まれているデータベースはアタッチできません。Like any database that is fully or partially offline, a database with restoring files cannot be attached. 復元シーケンスを停止すると、データベースをアタッチできます。If you stop the restore sequence, you can attach the database. データベースのインポート後、復元シーケンスを再開できます。Then, you can restart the restore sequence.

別のサーバー インスタンスへのデータベースのインポート Attaching a Database to Another Server Instance

重要

新しいバージョンの SQL ServerSQL Server で作成したデータベースは、それ以前のバージョンでアタッチすることはできません。A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions.

データベースを別のサーバー インスタンスにアタッチするときは、ユーザーおよびアプリケーションに一貫した使用環境を提供するために、アタッチ先のサーバー インスタンスで、ログインやジョブなどのデータベースのメタデータの一部またはすべてを作成し直す必要が生じる場合があります。When you attach a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all of the metadata for the database, such as logins and jobs, on the other server instance. 詳細については、「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)」を参照してください。For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server).

データベースをデタッチするにはTo detach a database

参照See Also

データベース ファイルとファイル グループDatabase Files and Filegroups