Freigeben über


sp_detach_db (Transact-SQL)

Trennt eine zurzeit nicht verwendete Datenbank von einer Serverinstanz und führt optional vor dem Trennvorgang für alle Tabellen UPDATE STATISTICS aus.

Wichtiger HinweisWichtig

Eine replizierte Datenbank kann nur getrennt werden, wenn sie nicht veröffentlicht ist. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten in diesem Thema.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • [ @dbname = ] 'database_name'
    Der Name der zu trennenden Datenbank. database_name ist vom Datentyp sysname und hat den Standardwert NULL.

  • [ @skipchecks = ] 'skipchecks'
    Gibt an, ob UPDATE STATISTIC ausgelassen oder ausgeführt werden soll. skipchecks ist vom Datentyp nvarchar(10) und hat den Standardwert NULL. Geben Sie true an, um UPDATE STATISTICS auszulassen. Geben Sie false an, um UPDATE STATISTICS explizit auszuführen.

    UPDATE STATISTICS wird standardmäßig ausgeführt, um Informationen zu den Daten in den Tabellen und Indizes in SQL Server 2005-Datenbankmodul und neueren Versionen zu aktualisieren. Das Ausführen von UPDATE STATISTICS ist nützlich für Datenbanken, die auf Nur-Lese-Medien verschoben werden sollen.

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    Gibt an, dass die Volltext-Indexdatei, die der zu trennenden Datenbank zugeordnet ist, während des Trennvorgangs der Datenbank nicht gelöscht wird. KeepFulltextIndexFile ist vom Datentyp nvarchar(10) und hat den Standardwert true. Wenn KeepFulltextIndexFile den Wert false aufweist, werden alle Volltextindexdateien, die der Datenbank und den Metadaten zugeordnet sind, gelöscht, es sei denn, die Datenbank ist schreibgeschützt. Wenn der Wert NULL oder true lautet, werden volltextbezogene Metadaten beibehalten.

    Wichtiger HinweisWichtig

    Der @keepfulltextindexfile-Parameter wird in einer künftigen Version von SQL Server entfernt. Verwenden Sie diesen Parameter beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen er zurzeit verwendet wird.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Keine

Hinweise

Wenn eine Datenbank getrennt wird, werden alle Metadaten darin gelöscht. Falls es sich bei der Datenbank um die Standarddatenbank von Anmeldekonten gehandelt hat, wird master als Standarddatenbank für diese Anmeldekonten festgelegt.

HinweisHinweis

Informationen zum Anzeigen der Standarddatenbank aller Anmeldekonten finden Sie unter sp_helplogins (Transact-SQL). Sofern Sie über die erforderlichen Berechtigungen verfügen, können Sie einer Anmeldung mithilfe der ALTER LOGIN-Anweisung eine neue Standarddatenbank zuweisen.

Einschränkungen

Eine Datenbank kann in folgenden Fällen nicht getrennt werden:

  • Die Datenbank ist zurzeit in Verwendung. Weitere Informationen finden Sie im Abschnitt "Erhalten exklusiven Zugriffs" weiter unten in diesem Thema.

  • Wenn die Datenbank repliziert ist, wird sie veröffentlicht.

    Bevor Sie die Datenbank trennen können, müssen Sie die Veröffentlichung deaktivieren, indem Sie sp_replicationdboption ausführen.

    HinweisHinweis

    Wenn Sie sp_replicationdboption nicht verwenden können, können Sie die Replikation durch Ausführen von sp_removedbreplication entfernen.

  • Eine Datenbankmomentaufnahme ist in der Datenbank vorhanden.

    Bevor Sie die Datenbank trennen können, müssen Sie alle Momentaufnahmen löschen. Weitere Informationen finden Sie unter Vorgehensweise: Löschen eines Datenbanksnapshots (Transact-SQL).

    HinweisHinweis

    Eine Datenbankmomentaufnahme kann nicht getrennt oder angefügt werden.

  • Die Datenbank ist gespiegelt.

    Die Datenbank kann nur getrennt werden, wenn die Datenbank-Spiegelungssitzung beendet wird. Weitere Informationen finden Sie unter Entfernen der Datenbankspiegelung.

  • Die Datenbank ist fehlerverdächtig.

    In SQL Server 2005 und neueren Versionen müssen Sie für eine fehlerverdächtige Datenbank den Notfallmodus aktivieren, bevor Sie die Datenbank trennen können. Weitere Informationen zum Aktivieren des Notfallmodus für eine Datenbank finden Sie unter ALTER DATABASE (Transact-SQL).

  • Die Datenbank ist eine Systemdatenbank.

Erhalten exklusiven Zugriffs

Das Trennen einer Datenbank erfordert den exklusiven Zugriff auf die Datenbank. Wenn die zu trennende Datenbank gerade verwendet wird, müssen Sie vor dem Trennen für die Datenbank den SINGLE_USER-Modus festlegen, um exklusiven Zugriff zu erhalten.

Mit der folgenden ALTER DATABASE-Anweisung erhalten Sie beispielsweise exklusiven Zugriff auf die AdventureWorks2008R2-Datenbank, nachdem alle aktuellen Benutzer von der Datenbank getrennt wurden.

USE master;
ALTER DATABASE AdventureWorks2008R2
SET SINGLE_USER;
GO
HinweisHinweis

Wenn Sie die Trennung von aktuellen Benutzern sofort oder innerhalb einer angegebenen Anzahl von Sekunden erzwingen möchten, verwenden Sie auch die Option ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL).

Erneutes Anfügen einer Datenbank

Die getrennten Dateien bleiben gespeichert und können mithilfe von CREATE DATABASE (mit der FOR ATTACH- oder FOR ATTACH_REBUILD_LOG-Option) erneut angefügt werden. Die Dateien können auf einen anderen Server verschoben und dort angefügt werden.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin.

Beispiele

Im folgenden Beispiel wird die AdventureWorks2008R2-Datenbank getrennt, wobei skipchecks auf TRUE festgelegt ist.

EXEC sp_detach_db 'AdventureWorks2008R2', 'true';

Im folgenden Beispiel wird die AdventureWorks2008R2-Datenbank getrennt, wobei die Dateien für den Volltextindex und die Metadaten des Volltextindexes beibehalten werden. Durch diesen Befehl wird UPDATE STATISTICS ausgeführt. Dies entspricht dem Standardverhalten.

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