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 2008 R2 サーバー インスタンスにアタッチする場合、カタログ ファイルは 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 2008 R2、SQL Server 2008 にアタッチするには、ソース データベースが少なくともバージョン 80 (SQL Server 2000) である必要があります。互換性レベルが 80 に満たない SQL Server 2000 データベースまたは SQL Server 2005 データベースは、アタッチ時に互換性 80 に設定されます。

権限

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

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

EXEC sp_attach_db @dbname = N'AdventureWorks2008R2', 
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf', 
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf';