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.
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 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.Hinweis: 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).Hinweis: 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
Hinweis: |
---|
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 |
|
17. Juli 2006 |
|
14. April 2006 |
|
05. Dezember 2005 |
|