sp_attach_db (Transact-SQL)

データベースをサーバーにアタッチします。

重要な注意事項重要

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに、CREATE DATABASE database_name FOR ATTACH を使用することをお勧めします。 詳細については、「CREATE DATABASE (Transact-SQL)」を参照してください。

注意

複数のログ ファイルを再構築するときに、これらのログ ファイル 1 つ以上に対して新しい場所を指定する場合は、CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG を使用します。

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

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

トピック リンク アイコン Transact-SQL 構文表記規則

構文

sp_attach_db [ @dbname= ] 'dbname'
    , [ @filename1= ] 'filename_n' [ ,...16 ] 

引数

  • [ @dbname= ] **'**dbnam '
    サーバーにアタッチされるデータベースの名前を指定します。 名前は一意である必要があります。 dbname のデータ型は sysname で、既定値は NULL です。

  • [ @filename1= ] 'filename_n'
    データベース ファイルの物理名を、パスも含めて指定します。 filename_n のデータ型は nvarchar(260) で、既定値は NULL です。 ファイル名は 16 個まで指定できます。 最初のパラメーター名は @filename1 であり、@filename16 まで順に増加します。 指定するファイルには少なくともプライマリ ファイルが含まれている必要があります。 プライマリ ファイルには、データベース内の他のファイルを参照するシステム テーブルが含まれています。 また、データベースがデタッチされた後で移動したファイルも指定する必要があります。

    注意

    この引数は、CREATE DATABASE ステートメントの FILENAME パラメーターにマップされます。 詳細については、「CREATE DATABASE (Transact-SQL)」を参照してください。

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

リターン コード値

0 (成功) または 1 (失敗)

結果セット

なし

説明

sp_attach_db は、sp_detach_db 操作を明示的に使用してデータベース サーバーからデタッチされたデータベース、またはコピーされたデータベースに対してのみ実行してください。 16 ファイル以上を指定する必要がある場合は、CREATE DATABASE database_name FOR ATTACH または CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG を使用します。 詳細については、「CREATE DATABASE (Transact-SQL)」を参照してください。

指定されていないファイルは、最後に指定された場所にあることが想定されます。 異なる場所にあるファイルを使用するには、新しい場所を指定する必要があります。

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

注意

データベース スナップショットは、デタッチまたはアタッチできません。

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

  • 元のデータベースと同じサーバー インスタンスおよびバージョンにデータベースをアタッチする場合は、必要な追加手順はありません。

  • 同じサーバー インスタンスのアップグレードされたバージョンにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_vupgrade_replication を実行してレプリケーションをアップグレードする必要があります。

  • バージョンに関係なく、別のサーバー インスタンスにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_removedbreplication を実行してレプリケーションを削除する必要があります。

SQL Server 2012 にアタッチできるのは SQL Server 2005 以降のデータベースだけです。 データベースの互換性レベルが 90 未満の場合、データベースを SQL Server 2012 にアタッチすると、その互換性レベルは 90 に変更されます。

データベースが最初に SQL Server の新しいインスタンスにアタッチまたは復元されるとき、データベース マスター キー (サービス マスター キーにより暗号化されたもの) のコピーはまだサーバーに格納されていません。 OPEN MASTER KEY ステートメントを使用して、データベース マスター キー (DMK) の暗号化を解除する必要があります。 DMK の暗号化が解除されると、ALTER MASTER KEY REGENERATE ステートメントを使用して、サービス マスター キー (SMK) で暗号化された DMK のコピーをサーバーに提供することにより、将来、自動的に暗号化解除することも可能となります。 データベースを以前のバージョンからアップグレードした場合、新しい AES アルゴリズムを使用するように DMK を再作成する必要があります。 DMK の再作成方法の詳細については、「ALTER MASTER KEY (Transact-SQL)」を参照してください。 DMK キーを再作成して AES にアップグレードするのに必要な時間は、DMK によって保護されているオブジェクトの数によって異なります。 DMK キーを再作成して AES にアップグレードする作業は、1 回限りで済み、キー ローテーション手法の一環として今後行われる再作成には影響を与えません。

権限

データベースをアタッチする際の権限の扱いについては、「CREATE DATABASE (Transact-SQL)」を参照してください。

使用例

次の例では、 AdventureWorks2012 から現在のサーバーにファイルをアタッチします。

EXEC sp_attach_db @dbname = N'AdventureWorks2012', 
    @filename1 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf', 
    @filename2 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';

関連項目

参照

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_removedbreplication (Transact-SQL)

システム ストアド プロシージャ (Transact-SQL)

概念

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