sp_detach_db (Transact-SQL)

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen)

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.

Symbol für Themenlink Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @dbname = ] 'database_name' Der Name der Datenbank, die getrennt werden soll. database_name ist ein Wert vom Datentyp vom Datentyp sysname und hat den Standardwert NULL.

[ @skipchecks = ] 'skipchecks' Gibt an, ob die Update Statistik übersprungen oder ausgeführt werden soll. wobei skipchecks " ist ein nvarchar (10) -Wert mit dem Standardwert NULL. Um die Update Statistik 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 Volltextindex Datei, die der zu trennende Datenbank zugeordnet ist, während des Trenn Vorgangs der Datenbank nicht gelöscht wird. Keepfulltextindexfile ist ein nvarchar (10) -Wert mit dem Standardwert true. Wenn keepfulltextindexfile den Wert false aufweist, werden alle der Datenbank zugeordneten Volltextindex Dateien und die Metadaten des voll Text Indexes gelöscht, es sei denn, die Datenbank ist schreibgeschützt. Wenn NULL oder true, werden voll Text bezogene Metadaten beibehalten.

Wichtig

Der @ keepfulltextindexfile -Parameter wird in einer zukünftigen Version von entfernt SQL Server . 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 dazu, wie Sie die Standarddatenbank aller Anmeldekonten anzeigen, finden Sie unter sp_helplogins (Transact-SQL-). Wenn Sie über die erforderlichen Berechtigungen verfügen, können Sie die Alter Login -Anweisung verwenden, um einer Anmeldung eine neue Standarddatenbank zuzuweisen.

Beschränkungen

Eine Datenbank kann nicht getrennt werden, wenn Folgendes 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 durch Ausführen von sp_replicationdboptiondeaktivieren.

    Hinweis

    Wenn Sie sp_replicationdboption nicht 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 Datenbank-Momentaufnahme (Transact-SQL)angefügt werden.

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

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.

Beispielsweise erhält die folgende ALTER DATABASE Anweisung exklusiven Zugriff auf die AdventureWorks2012 Datenbank, nachdem alle aktuellen Benutzer die Verbindung mit der Datenbank getrennt haben.

USE master;  
ALTER DATABASE AdventureWorks2012  
SET SINGLE_USER;  
GO  

Hinweis

Verwenden Sie die Option Rollback, um die aktuellen Benutzer sofort oder innerhalb einer angegebenen Anzahl von Sekunden aus der Datenbank zu erzwingen. verwenden Sie die Option Rollback: ALTER DATABASE database_name SET SINGLE_USER with Rollback rollback_option. Weitere Informationen zu dieser Einstellung 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 Server Rolle sysadmin oder die Mitgliedschaft in der db_owner Rolle der Datenbank.

Beispiele

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

EXEC sp_detach_db 'AdventureWorks2012', 'true';  

Im folgenden Beispiel wird die AdventureWorks2012-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='AdventureWorks2012'  
    , @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