sp_detach_db (Transact-SQL)

サーバー インスタンスから現在使用されていないデータベースを切り離します。必要に応じて、切り離す前に、すべてのテーブルに対して UPDATE STATISTICS を実行します。

重要な注意事項重要

レプリケートしたデータベースをデタッチする場合、パブリッシュを解除する必要があります。詳細については、後の「解説」を参照してください。

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

構文

sp_detach_db [ @dbname= ] 'database_name' 
    [ , [ @skipchecks= ] 'skipchecks' ] 
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ] 

引数

  • [ @dbname = ] 'database_name'
    デタッチするデータベースの名前を指定します。database_name のデータ型は sysname で、既定値は NULL です。

  • [ @skipchecks = ] 'skipchecks'
    UPDATE STATISTIC をスキップするか、実行するかを指定します。skipchecks のデータ型は nvarchar(10) で、既定値は NULL です。UPDATE STATISTICS をスキップするには、true を指定します。UPDATE STATISTICS を明示的に実行するには、false を指定します。

    既定では、UPDATE STATISTICS が実行されると、テーブルにあるデータと SQL Server 2005 データベース エンジン以降のバージョンにあるインデックスに関する情報が更新されます。UPDATE STATISTICS の実行は、データベースを読み取り専用メディアに移動する場合に使用すると便利です。

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    データベースをデタッチするとき、そのデータベースに関連付けられているフルテキスト インデックス ファイルを削除しないことを指定します。KeepFulltextIndexFile のデータ型は nvarchar(10) で、既定値は true です。KeepFulltextIndexFile が false の場合、データベースに関連付けられているフルテキスト インデックス ファイルとフルテキスト インデックスのメタデータは、データベースが読み取り専用でない限りすべて削除されます。NULL または true の場合、フルテキストに関連するメタデータは保持されます。

    重要な注意事項重要

    @keepfulltextindexfile パラメーターは今後のバージョンの SQL Server で廃止される予定です。新規の開発作業ではこのパラメーターを使用しないようにし、現在このパラメーターを使用しているアプリケーションはできるだけ早く修正してください。

リターン コード値

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

結果セット

なし

説明

データベースがデタッチされると、そのすべてのメタデータが削除されます。そのデータベースがログイン アカウントの既定のデータベースであった場合は、master が既定のデータベースとなります。

注意

すべてのログイン アカウントの既定のデータベースを表示する方法については、「sp_helplogins (Transact-SQL)」を参照してください。必要な権限が与えられている場合は、ALTER LOGIN を使用して、新しい既定のデータベースをログインに割り当てることができます。

制限事項

次のいずれかに該当する場合は、データベースをデタッチできません。

  • データベースが現在使用されている。詳細については、後の「排他アクセスの取得」を参照してください。

  • データベースがレプリケートされ、パブリッシュ済みとなっている。

    データベースをデタッチする前に、sp_replicationdboption を実行してパブリッシングを無効にする必要があります。

    注意

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

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

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

    注意

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

  • データベースがミラー化されている。

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

  • データベースに問題がある。

    SQL Server 2005 以降のバージョンでは、データベースをデタッチする前に、問題のあるデータベースを緊急モードに設定する必要があります。データベースを緊急モードにする方法の詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

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

排他アクセスの取得

データベースのデタッチには、データベースに対する排他アクセスが必要です。デタッチするデータベースが使用されている場合、デタッチするには、データベースを SINGLE_USER モードに設定して排他アクセスを取得する必要があります。

たとえば、次の ALTER DATABASE ステートメントでは、現在のすべてのユーザーがデータベースから切断した後で、AdventureWorks2008R2 データベースへの排他アクセスを取得します。

USE master;
ALTER DATABASE AdventureWorks2008R2
SET SINGLE_USER;
GO
注意

データベースから現在のユーザーを直ちに、または指定した秒数で切り離すには、ROLLBACK オプションも使用して「ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option」と指定します。詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

データベースの再アタッチ

デタッチされたファイルはそのまま残り、FOR ATTACH または FOR ATTACH_REBUILD_LOG オプションを指定した CREATE DATABASE によって再アタッチできます。ファイルを別のサーバーに移動し、そこにアタッチすることもできます。

権限

sysadmin 固定サーバー ロールのメンバーシップが必要です。

使用例

次の例では、skipchecks を True に設定して、AdventureWorks2008R2 データベースをデタッチします。

EXEC sp_detach_db 'AdventureWorks2008R2', 'true';

次の例では、AdventureWorks2008R2 データベースをデタッチし、フルテキスト インデックス ファイルおよびフルテキスト インデックスのメタデータは保持します。このコマンドでは、UPDATE STATISTICS が実行されます。これは既定の動作です。

exec sp_detach_db @dbname='AdventureWorks2008R2'
    , @keepfulltextindexfile='true';