sp_detach_db (Transact-SQL)

Aktualisiert: 12. Dezember 2006

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

ms188031.note(de-de,SQL.90).gifWichtig:
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 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.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Keine

Hinweise

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.
    ms188031.note(de-de,SQL.90).gifHinweis:
    Wenn Sie sp_replicationdboption nicht verwenden können, können Sie die Replikation durch Ausführen von sp_removedbreplication entfernen.
  • Ein Datenbanksnapshot ist in der Datenbank vorhanden.
    Bevor Sie die Datenbank trennen können, müssen Sie alle Snapshots löschen. Weitere Informationen finden Sie unter Vorgehensweise: Löschen eines Datenbanksnapshots (Transact-SQL).
    ms188031.note(de-de,SQL.90).gifHinweis:
    Ein Datenbanksnapshot 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 müssen Sie für eine fehlerverdächtige Datenbank den Notfallmodus aktivieren, bevor diese getrennt werden kann. Weitere Informationen zum Aktivieren des Notfallmodus für eine Datenbank finden Sie unter ALTER DATABASE (Transact-SQL).
  • Die Datenbank ist eine Systemdatenbank.

Durch das Trennen einer Datenbank wird der Plancache für die Instanz von SQL Server gelöscht. Durch das Löschen des Plancaches wird eine Neukompilierung aller nachfolgenden Ausführungspläne verursacht, und möglicherweise entsteht plötzlich eine temporäre Verringerung der Abfrageleistung. In SQL Server 2005 Service Pack 2 enthält das SQL Server-Fehlerprotokoll für jeden geleerten Cachespeicher im Plancache folgende Meldung zur Information: "SQL Server hat für den '%s'-Cachespeicher (Bestandteil des Plancache) %d Leerungen des Cachespeichers gefunden, die von Datenbankwartungs- oder Neukonfigurierungsvorgängen ausgelöst wurden". Diese Meldung wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.

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 AdventureWorks-Datenbank, nachdem alle aktuellen Benutzer von der Datenbank getrennt wurden.

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO
ms188031.note(de-de,SQL.90).gifHinweis:
Wenn Sie die Trennung der aktuellen Benutzer 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

Setzt die Mitgliedschaft in der festen Datenbankrolle db_owner voraus.

Beispiele

Im folgenden Beispiel wird die AdventureWorks-Datenbank getrennt, wobei skipchecks auf True festgelegt ist.

EXEC sp_detach_db 'AdventureWorks', 'true';

Im folgenden Beispiel wird die AdventureWorks-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='AdventureWorks'
    , @keepfulltextindexfile='true';

Siehe auch

Verweis

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)

Andere Ressourcen

Trennen und Anfügen von Datenbanken
Sichern von Daten- und Protokolldateien
Vorgehensweise: Trennen einer Datenbank (SQL Server Management Studio)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Neuer Inhalt:
  • Den Hinweisen zum Löschen des Plancaches wurde ein Abschnitt hinzugefügt.
Geänderter Inhalt:
  • Die Einstellungen des @keepfulltextindexfile-Parameters wurden erläutert.

17. Juli 2006

Neuer Inhalt:
  • Die Einschränkung für das Trennen von Systemdatenbanken wurde hinzugefügt.

14. April 2006

Neuer Inhalt:
  • Ein Beispiel, in dem @keepfulltextindexfile verwendet wird, wurde hinzugefügt.
Geänderter Inhalt:
  • @KeepFulltextIndexFile wurde in @keepfulltextindexfile geändert.

05. Dezember 2005

Neuer Inhalt:
  • Einschränkung, dass die Datenbank nicht verwendet werden darf, und Abschnitt zum Erhalten exklusiven Zugriffs vor dem Ausführen von sp_detach_db hinzugefügt.