sp_attach_db (Transact-SQL)sp_attach_db (Transact-SQL)

Gilt für: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Fügt eine Datenbank an einen Server an.Attaches a database to a server.

Wichtig

Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. wir empfehlen, stattdessen CREATE DATABASE database_name for Attach zu verwenden.We recommend that you use CREATE DATABASE database_name FOR ATTACH instead. Weitere Informationen finden Sie unter CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Hinweis

Zum erneuten Erstellen mehrerer Protokolldateien, wenn mindestens ein Speicherort vorhanden ist, verwenden Sie CREATE DATABASE database_name for ATTACH_REBUILD_LOG.To rebuild multiple log files when one or more have a new location, use CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Wichtig

Das Anfügen oder Wiederherstellen von Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen wird nicht empfohlen.We recommend that you do not attach or restore databases from unknown or untrusted sources. Solche Datenbanken können bösartigen Code enthalten, der möglicherweise unbeabsichtigten Transact-SQLTransact-SQL -Code ausführt oder Fehler verursacht, indem er das Schema oder die physische Datenbankstruktur ändert.Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. 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.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

SyntaxSyntax

  
sp_attach_db [ @dbname= ] 'dbname'  
    , [ @filename1= ] 'filename_n' [ ,...16 ]   

ArgumenteArguments

[ @dbname = ] 'dbnam_ ' ist der Name der Datenbank, die an den Server angefügt werden soll.[ @dbname = ] 'dbnam_ ' Is the name of the database to be attached to the server. Der Name muss eindeutig sein.The name must be unique. dbname ist vom Datentyp vom Datentyp sysnameund hat den Standardwert NULL.dbname is sysname, with a default of NULL.

[ @filename1 = ] 'filename_n' ist der physische Name der Datenbankdatei, einschließlich des Pfads.[ @filename1 = ] 'filename_n' Is the physical name, including path, of a database file. filename_n ist vom Datentyp nvarchar (260) und hat den Standardwert NULL.filename_n is nvarchar(260), with a default of NULL. Sie können bis zu 16 Dateinamen angeben.Up to 16 file names can be specified. Die Parameternamen beginnen bei @filename1 und erhöhen @filename16.The parameter names start at @filename1 and increment to @filename16. Die Liste der Dateinamen muss mindestens die primäre Datei einschließen.The file name list must include at least the primary file. Die primäre Datei enthält die Systemtabellen, die auf andere Dateien in der Datenbank zeigen.The primary file contains the system tables that point to other files in the database. Die Liste muss außerdem alle Dateien enthalten, die nach dem Trennen der Datenbank verschoben wurden.The list must also include any files that were moved after the database was detached.

Hinweis

Dieses Argument entspricht dem FILENAME-Parameter der CREATE DATABASE-Anweisung.This argument maps to the FILENAME parameter of the CREATE DATABASE statement. Weitere Informationen finden Sie unter CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Wenn Sie eine SQL Server 2005 (9.x)SQL Server 2005 (9.x) -Datenbank mit Volltextkatalogdateien an eine SQL Server 2019 (15.x)SQL Server 2019 (15.x) -Serverinstanz anfügen, werden die Katalogdateien von ihrem vorherigen Speicherort aus zusammen mit den anderen Datenbankdateien angefügt. Dies entspricht der Vorgehensweise in SQL Server 2005 (9.x)SQL Server 2005 (9.x).When you attach a SQL Server 2005 (9.x)SQL Server 2005 (9.x) database that contains full-text catalog files onto a SQL Server 2019 (15.x)SQL Server 2019 (15.x) server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005 (9.x)SQL Server 2005 (9.x). Weitere Informationen finden Sie unter Upgrade der Volltextsuche.For more information, see Upgrade Full-Text Search.

RückgabecodewerteReturn Code Values

0 (Erfolg) oder 1 (Fehler)0 (success) or 1 (failure)

ResultsetsResult Sets

KeineNone

RemarksRemarks

Die gespeicherte Prozedur sp_attach_db sollte nur für Datenbanken ausgeführt werden, die zuvor vom Datenbankserver getrennt wurden, indem ein expliziter sp_detach_db Vorgang oder kopierte Datenbanken verwendet wurden.The sp_attach_db stored procedure should only be executed on databases that were previously detached from the database server by using an explicit sp_detach_db operation or on copied databases. Wenn Sie mehr als 16 Dateien angeben müssen, verwenden Sie CREATE DATABASE database_name for Attach oder CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG.If you have to specify more than 16 files, use CREATE DATABASE database_name FOR ATTACH or CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Weitere Informationen finden Sie unter CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Wird für eine Datei kein Pfad angegeben, wird davon ausgegangen, dass sie sich am zuletzt bekannten Speicherort befindet.Any unspecified file is assumed to be in its last known location. Wenn Sie eine Datei an einem anderen Speicherort verwenden möchten, müssen Sie den neuen Speicherort angeben.To use a file in a different location, you must specify the new location.

Eine Datenbank, die in einer neueren Version von SQL ServerSQL Server erstellt wurde, kann in früheren Versionen nicht angefügt werden.A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions.

Hinweis

Eine Datenbankmomentaufnahme kann nicht getrennt oder angefügt werden.A database snapshot cannot be detached or attached.

Berücksichtigen Sie Folgendes, wenn Sie eine replizierte Datenbank anfügen, die kopiert statt getrennt wurde:When you attach a replicated database that was copied instead of being detached, consider the following:

  • Wenn Sie die Datenbank an die gleiche Serverinstanz und -version wie die ursprüngliche Datenbank anfügen, sind keine weiteren Schritte erforderlich.If you attach the database to the same server instance and version as the original database, no additional steps are required.

  • 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.If you attach the database to the same server instance but with an upgraded version, you must execute sp_vupgrade_replication to upgrade replication after the attach operation is complete.

  • 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.If you attach the database to a different server instance, regardless of version, you must execute sp_removedbreplication to remove replication after the attach operation is complete.

Wird eine Datenbank zum ersten Mal an eine neue Instanz von SQL ServerSQL Serverangefügt oder wiederhergestellt, ist noch keine Kopie des Datenbank-Hauptschlüssels (verschlüsselt vom Diensthauptschlüssel) auf dem Server gespeichert.When a database is first attached or restored to a new instance of SQL ServerSQL Server, a copy of the database master key (encrypted by the service master key) is not yet stored in the server. Der Datenbank-Hauptschlüssel (Database Master Key, DMK) muss mithilfe der Anweisung OPEN MASTER KEY entschlüsselt werden.You must use the OPEN MASTER KEY statement to decrypt the database master key (DMK). Nachdem der Datenbank-Hauptschlüssel entschlüsselt wurde, können Sie für die Zukunft die automatische Entschlüsselung aktivieren, indem Sie die Anweisung ALTER MASTER KEY REGENERATE verwenden. Auf diese Weise können Sie eine Kopie des mit dem Diensthauptschlüssel (Service Master Key, SMK) verschlüsselten Datenbank-Hauptschlüssels für den Server bereitstellen.Once the DMK has been decrypted, you have the option of enabling automatic decryption in the future by using the ALTER MASTER KEY REGENERATE statement to provision the server with a copy of the DMK, encrypted with the service master key (SMK). Wenn eine Datenbank von einer früheren Version aktualisiert wurde, sollte der DMK neu generiert werden, damit er den neueren AES-Algorithmus verwendet.When a database has been upgraded from an earlier version, the DMK should be regenerated to use the newer AES algorithm. Weitere Informationen zum Neugenerieren des DMK finden Sie unter ALTER MASTER KEY (Transact-SQL).For more information about regenerating the DMK, see ALTER MASTER KEY (Transact-SQL). 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.The time required to regenerate the DMK key to upgrade to AES depends upon the number of objects protected by the DMK. Der DMK muss nur einmal auf AES aktualisiert und neu generiert werden. Dies hat keine Auswirkungen auf zukünftige Neugenerierungen im Rahmen einer Schlüsselrotationsstrategie.Regenerating the DMK key to upgrade to AES is only necessary once, and has no impact on future regenerations as part of a key rotation strategy.

BerechtigungenPermissions

Informationen dazu, wie Berechtigungen verarbeitet werden, wenn eine Datenbank angefügt wird, finden Sie unter CREATE DATABASE (SQL Server)Transact-SQL.For information about how permissions are handled when a database is attached, see CREATE DATABASE (SQL Server Transact-SQL).

BeispieleExamples

Im folgenden Beispiel werden Dateien von AdventureWorks2012AdventureWorks2012 an den aktuellen Server angefügt.The following example attaches files from AdventureWorks2012AdventureWorks2012 to the current server.

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

Siehe auchSee Also

Anfügen und Trennen von Datenbanken (SQL Server) Database Detach and Attach (SQL Server)
sp_detach_db (Transact-SQL) sp_detach_db (Transact-SQL)
sp_helpfile (Transact-SQL) sp_helpfile (Transact-SQL)
sp_removedbreplication (Transact-SQL) sp_removedbreplication (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)System Stored Procedures (Transact-SQL)