Freigeben über


sp_attach_db (Transact-SQL)

Gilt für: SQL Server

Fügt eine Datenbank an einen Server an.

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. Stattdessen wird die Verwendung von CREATE DATABASE <database_name> FOR ATTACH empfohlen. Weitere Informationen finden Sie unter CREATE DATABASE. Verwenden Sie die Verwendung CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG, um mehrere Protokolldateien neu zu erstellen, wenn mindestens ein neuer Speicherort vorhanden ist.

Fügen Sie Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen nicht an, oder stellen Sie sie wieder her. Solche Datenbanken können schädlichen Code enthalten, der möglicherweise unbeabsichtigten Transact-SQL -Code ausführt oder Fehler verursacht, indem er das Schema oder die physische Datenbankstruktur ändert. Bevor Sie eine Datenbank aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, führen Sie auf einem Nichtproduktionsserver DBCC CHECKDB für die Datenbank aus. Überprüfen Sie außerdem den Code in der Datenbank, z.B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code.

Syntax

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Argumente

[ @dbname = ] N'dbname'

Der Name der Datenbank, die an den Server angefügt werden soll. @dbname ist "sysname" ohne Standard.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

Der physische Name, einschließlich des Pfads, einer Datenbankdatei. Dieser Parameter ist nvarchar(260), mit einem Standardwert von NULL. Sie können bis zu 16 Dateinamen angeben. Die Parameternamen beginnen bei @filename1 und erhöhen die @filename16. Die Dateinamenliste muss mindestens die primäre Datei (.mdf) enthalten. Die primäre Datei enthält die Systemtabellen, die auf andere Dateien in der Datenbank zeigen. Die Liste muss außerdem alle Dateien enthalten, die nach dem Trennen der Datenbank verschoben wurden.

Dieser Parameter ist dem FILENAME Parameter der CREATE DATABASE Anweisung zugeordnet. Weitere Informationen finden Sie unter CREATE DATABASE.

Hinweis

Wenn Sie eine SQL Server 2005 (9.x)-Datenbank, die Volltextkatalogdateien enthält, an eine neuere Version von SQL Server anfügen, werden die Katalogdateien zusammen mit den anderen Datenbankdateien, identisch mit SQL Server 2005 (9.x), von ihrem vorherigen Speicherort angefügt. Weitere Informationen finden Sie unter Upgrade der Volltextsuche.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Resultset

Keine.

Hinweise

Die sp_attach_db gespeicherte Prozedur sollte nur für Datenbanken ausgeführt werden, die zuvor mithilfe eines expliziten sp_detach_db Vorgangs oder in kopierten Datenbanken vom Datenbankserver getrennt wurden. Wenn Sie mehr als 16 Dateien angeben müssen, verwenden CREATE DATABASE <database_name> FOR ATTACH Oder CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Weitere Informationen finden Sie unter CREATE DATABASE.

Wird für eine Datei kein Pfad angegeben, wird davon ausgegangen, dass sie sich am zuletzt bekannten Speicherort befindet. Wenn Sie eine Datei an einem anderen Speicherort verwenden möchten, müssen Sie den neuen Speicherort angeben.

Eine Datenbank, die in einer aktuelleren Version von SQL Server erstellt wurde, kann in früheren Versionen nicht angefügt werden.

Hinweis

Eine Datenbankmomentaufnahme kann nicht getrennt oder angefügt werden.

Berücksichtigen Sie beim Anfügen einer replizierten Datenbank, die kopiert wurde, anstatt getrennt zu werden, die folgenden Bedingungen:

  • Wenn Sie die Datenbank an dieselbe Serverinstanz und -version wie die ursprüngliche Datenbank anfügen, sind keine weiteren Schritte erforderlich.

  • Wenn Sie die Datenbank an die gleiche Serverinstanz mit einer aktualisierten Version anfügen, müssen Sie sp_vupgrade_replication ausführen, um die Replikation zu aktualisieren, nachdem der Anfügevorgang abgeschlossen wurde.

  • Wenn Sie die Datenbank an eine andere Serverinstanz unabhängig von der Version anfügen, müssen Sie sp_removedbreplication ausführen, um die Replikation zu entfernen, nachdem der Anfügevorgang abgeschlossen wurde.

Wenn eine Datenbank zuerst an eine neue Instanz von SQL Server angefügt oder wiederhergestellt wird, wird eine Kopie des Datenbankmasterschlüssels (DMK) – verschlüsselt durch den Dienstmasterschlüssel (SMK) – noch nicht auf dem Server gespeichert. Sie müssen die OPEN MASTER KEY Anweisung verwenden, um das DMK zu entschlüsseln. Nachdem das DMK entschlüsselt wurde, haben Sie die Möglichkeit, die automatische Entschlüsselung in Zukunft zu aktivieren, indem Sie die ALTER MASTER KEY REGENERATE Anweisung verwenden, um dem Server eine Kopie des DMK bereitzustellen, die mit der SMK verschlüsselt ist. Wenn ein Upgrade einer Datenbank von einer früheren Version durchgeführt wird, sollte das DMK neu generiert werden, um den neueren AES-Algorithmus zu verwenden. Weitere Informationen zum Neugenerieren des DMK finden Sie unter ALTER MASTER KEY. Die zum Neugenerieren des DMK zum Upgrade auf AES erforderliche Zeit hängt von der Anzahl der Objekte ab, die durch den DMK geschützt werden. Das Regenerieren des DMK-Schlüssels für das Upgrade auf AES ist nur einmal erforderlich und hat keine Auswirkungen auf zukünftige Regenerationen im Rahmen einer Schlüsseldrehungsstrategie.

Berechtigungen

Informationen dazu, wie Berechtigungen behandelt werden, wenn eine Datenbank angefügt wird, finden Sie unter CREATE DATABASE.

Beispiele

Im folgenden Beispiel werden Dateien von AdventureWorks2022 an den aktuellen Server angefügt.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';