sp_detach_db (Transact-SQL)

Gilt für:SQL Server

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

Wichtig

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.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @dbname = ] 'database_name' Der Name der zu lösenden Datenbank. database_name ist ein sysname-Wert mit dem Standardwert NULL.

[ @skipchecks = ] 'skipchecks' Gibt an, ob UPDATE STATISTIC übersprungen oder ausgeführt werden soll. skipchecks ist ein nvarchar(10) -Wert mit dem Standardwert NULL. Um UPDATE STATISTICS zu überspringen, geben Sie true an. Um UPDATE STATISTICS explizit auszuführen, geben Sie false an.

UPDATE STATISTICS wird standardmäßig ausgeführt, um Informationen zu den Daten in den Tabellen und Indizes 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 Volltextindexdatei, die der zu trennenden Datenbank zugeordnet ist, während des Vorgangs zum Trennen der Datenbank nicht gelöscht wird. KeepFulltextIndexFile ist ein nvarchar(10) -Wert mit dem Standardwert true. Wenn KeepFulltextIndexFileauf false festgelegt ist, werden alle der Datenbank zugeordneten Volltextindexdateien und die Metadaten des Volltextindex gelöscht, es sei denn, die Datenbank ist schreibgeschützt. Wenn NULL oder TRUE, werden Volltextmetadaten beibehalten.

Wichtig

Der parameter @keepfulltextindexfile wird in einer zukü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“ (erfolgreich) oder „1“ (fehlerhaft)

Resultsets

Keine

Bemerkungen

Wenn eine Datenbank getrennt wird, werden alle Metadaten darin gelöscht. Wenn die Datenbank die Standarddatenbank aller Anmeldekonten war, wird master zur Standarddatenbank.

Hinweis

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

Beschränkungen

Eine Datenbank kann nicht getrennt werden, wenn eine der folgenden Punkte zutrifft:

  • 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.

    Hinweis

    Wenn Sie sp_replicationdboptionnicht verwenden können, können Sie die Replikation durch Ausführen von sp_removedbreplicationentfernen.

  • 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 Löschen einer Datenbankmomentaufnahme (Transact-SQL).

    Hinweis

    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 (SQL Server).

  • Die Datenbank ist fehlerverdächtig.

    Sie müssen für eine fehlerverdächtige Datenbank den Notfallmodus aktivieren, bevor Sie die Datenbank trennen können. Weitere Informationen zum Versetzen einer Datenbank in den Notfallmodus 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.

Bevor Sie die Datenbank auf SINGLE_USER festlegen, müssen Sie überprüfen, ob die AUTO_UPDATE_STATISTICS_ASYNC-Option auf OFF festgelegt ist. Wenn diese Option auf ON festgelegt ist, stellt der Hintergrundthread, der zum Aktualisieren von Statistiken verwendet wird, eine Verbindung mit der Datenbank her, und Sie können im Einzelbenutzermodus nicht auf die Datenbank zugreifen. Weitere Informationen finden Sie unter Festlegen des Einzelbenutzermodus für eine Datenbank.

Die folgende ALTER DATABASE Anweisung erhält beispielsweise exklusiven Zugriff auf die AdventureWorks2022-Datenbank, nachdem alle aktuellen Benutzer die Verbindung mit der Datenbank getrennt haben.

USE master;  
ALTER DATABASE AdventureWorks2022  
SET SINGLE_USER;  
GO  

Hinweis

Verwenden Sie auch die ROLLBACK-Option ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option, um aktuelle Benutzer sofort oder innerhalb einer angegebenen Anzahl von Sekunden zu erzwingen. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL).

Erneutes Anfügen einer Datenbank

Die getrennten Dateien bleiben erhalten und können mithilfe von CREATE DATABASE (mit der Option FOR ATTACH oder FOR ATTACH_REBUILD_LOG) 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 oder die Mitgliedschaft in der db_owner Rolle der Datenbank.

Beispiele

Im folgenden Beispiel wird die AdventureWorks2022-Datenbank getrennt, wobei skipchecks auf true festgelegt ist.

EXEC sp_detach_db 'AdventureWorks2022', 'true';  

Im folgenden Beispiel wird die AdventureWorks2022-Datenbank getrennt und die Volltextindexdateien und die Metadaten des Volltextindexes beibehalten. Durch diesen Befehl wird UPDATE STATISTICS ausgeführt. Dies entspricht dem Standardverhalten.

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

Weitere Informationen

ALTER DATABASE (Transact-SQL)
Anfügen und Trennen von Datenbanken (SQL Server)
CREATE DATABASE (SQL Server Transact-SQL)
Trennen einer Datenbank