Freigeben über


sp_detach_db (Transact-SQL)

Gilt für: SQL Server

Trennt eine Datenbank, die derzeit nicht von einer Serverinstanz verwendet wird, und wird optional für alle Tabellen ausgeführt UPDATE STATISTICS , bevor sie getrennt werden.

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

Transact-SQL-Syntaxkonventionen

Syntax

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

Argumente

[ @dbname = ] N'dbname'

Der Name der Datenbank, die getrennt werden soll. @dbname ist "sysname" mit der Standardeinstellung "NULL.

[ @skipchecks = ] N'skipchecks'

Gibt an, ob übersprungen oder ausgeführt werden UPDATE STATISTICSsoll. @skipchecks ist nvarchar(10), wobei die Standardeinstellung istNULL. Geben Sie zum Überspringen UPDATE STATISTICSan true. Geben Sie zum expliziten Ausführen UPDATE STATISTICSan false.

UPDATE STATISTICS Standardmäßig werden Informationen zu den Daten in den Tabellen und Indizes aktualisiert. Das Ausführen UPDATE STATISTICS ist nützlich für Datenbanken, die in schreibgeschützte Medien verschoben werden sollen.

[ @keepfulltextindexfile = ] N'keepfulltextindexfile'

Gibt an, dass die Volltextindexdatei, die der datenbank zugeordnet ist, die getrennt wird, während des Datenbanktrennvorgangs nicht gelöscht wird. @keepfulltextindexfile ist nvarchar(10), mit einem Standardwert von true.

  • Wenn @keepfulltextindexfile ist false, 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, volltextbezogene Metadaten beibehalten werden.

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Resultset

Keine.

Hinweise

Wenn eine Datenbank getrennt wird, werden alle Metadaten darin gelöscht. Wenn es sich bei der Datenbank um die Standarddatenbank von Anmeldekonten handelt, master wird die Standarddatenbank.

Hinweis

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

Begrenzungen

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

  • Die Datenbank ist zurzeit in Verwendung. Weitere Informationen finden Sie unter Exklusiven Zugriff.

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

    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 Ablegen einer Datenbankmomentaufnahme.

    Eine Datenbankmomentaufnahme kann nicht getrennt oder angefügt werden.

  • Die Datenbank ist gespiegelt.

    Die Datenbank kann erst getrennt werden, wenn die Datenbankspiegelungssitzung 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 Einfügen einer Datenbank in den Notfallmodus finden Sie unter ALTER DATABASE.

  • Die Datenbank ist eine Systemdatenbank.

Exklusiven Zugriff erhalten

Das Trennen einer Datenbank erfordert den exklusiven Zugriff auf die Datenbank. Wenn die Datenbank, die Sie trennen möchten, verwendet wird, bevor Sie sie trennen können, legen Sie die Datenbank auf SINGLE_USER den Modus fest, um exklusiven Zugriff zu erhalten.

Stellen Sie vor dem Festlegen der Datenbank sicher SINGLE_USER, dass die AUTO_UPDATE_STATISTICS_ASYNC Option auf OFF. festgelegt ist. Wenn diese Option auf ON festgelegt ist, übernimmt der Hintergrundthread, der zum Aktualisieren von Statistiken verwendet wird, eine Verbindung mit der Datenbank, und Sie können nicht im Einzelbenutzermodus auf die Datenbank zugreifen. Weitere Informationen finden Sie unter So legen Sie den Einzelbenutzermodus für eine Datenbank fest.

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

Um aktuelle Benutzer sofort oder innerhalb einer bestimmten Anzahl von Sekunden aus der Datenbank zu erzwingen, können Sie auch die ROLLBACK Option verwenden.

ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;

Weitere Informationen finden Sie unter ALTER DATABASE.

Erneutes Anfügen einer Datenbank

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

Beispiele

Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022- oder AdventureWorksDW2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

Im folgenden Beispiel wird die AdventureWorks2022 Datenbank mit @skipchecks auf " true.

EXEC sp_detach_db 'AdventureWorks2022', 'true';

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