Share via


sp_attach_db (Transact-SQL)

更新 : 2006 年 12 月 12 日

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

ms179877.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。代わりに、CREATE DATABASE database_name FOR ATTACH を使用することをお勧めします。詳細については、「CREATE DATABASE (Transact-SQL)」を参照してください。
ms179877.note(ja-jp,SQL.90).gifメモ :
複数のログ ファイルを再構築するときに、これらのログ ファイル 1 つ以上に対して新しい場所を指定する場合は、CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG を使用します。
ms179877.security(ja-jp,SQL.90).gifセキュリティ メモ :
不明なソースや信頼されていないソースからデータベースをアタッチまたは復元しないことをお勧めします。こうしたデータベースには、意図しない 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 まで順に増加します。指定するファイルには少なくともプライマリ ファイルが含まれている必要があります。プライマリ ファイルには、データベース内の他のファイルを参照するシステム テーブルが含まれています。また、データベースがデタッチされた後で移動したファイルも指定する必要があります。

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

    SQL Server 2005 データベース エンジンでは、アタッチされるデータベースに含まれているフルテキスト ファイルも、すべてデータベースと共にアタッチされます。フルテキスト カタログの新しいパスを指定する場合、ファイル名なしでディレクトリ名を指定すればカタログ ファイルを指定できます。詳細については、「フルテキスト カタログのアタッチとデタッチ」を参照してください。

    ms179877.note(ja-jp,SQL.90).gifメモ :
    フルテキスト カタログは、ルート ディレクトリにはアタッチできません。

リターン コードの値

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 でデータベースをアタッチすることはできません。

ms179877.note(ja-jp,SQL.90).gifメモ :
データベース スナップショットは、デタッチまたはアタッチできません。

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

  • 元のデータベースと同じサーバー インスタンスおよびバージョンにデータベースをアタッチする場合は、必要な追加手順はありません。
  • 同じサーバー インスタンスのアップグレードされたバージョンにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_vupgrade_replication を実行してレプリケーションをアップグレードする必要があります。
  • バージョンに関係なく別のサーバー インスタンスにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_removedbreplication を実行してレプリケーションを削除する必要があります。

権限

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

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

EXEC sp_attach_db @dbname = N'AdventureWorks', 
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf', 
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf';

参照

関連項目

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

その他の技術情報

データベースのデタッチとアタッチ
データ ファイルとログ ファイルのセキュリティ保護
フルテキスト カタログのアタッチとデタッチ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

追加内容 :
  • 「解説」セクションを更新して、作成されたバージョンより前のバージョンの SQL Server でデータベースをアタッチすることはできないという内容を追加しました。

2005 年 12 月 5 日

追加内容 :
  • セキュリティに関する注記を追加。