Vorgehensweise: Verschieben einer Datenbank durch Trennen und Anfügen (Transact-SQL)

Wichtiger HinweisWichtig

Es wird empfohlen, Datenbanken mit der ALTER DATABASE-Prozedur für geplante Verschiebungen zu verschieben, anstatt die Optionen zum Trennen und Anfügen zu verwenden. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL).

Eine getrennte Datenbank kann an einen anderen Speicherort verschoben und an die gleiche oder eine andere Serverinstanz angefügt werden.

SicherheitshinweisSicherheitshinweis

Es empfiehlt sich nicht, Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen anzufügen oder wiederherzustellen. Solche Datenbanken können bösartigen Code enthalten, mit dem unbeabsichtigter Transact-SQL-Code ausgeführt oder Fehler verursacht werden können, indem das Schema oder die physische Datenbankstruktur geändert wird. Bevor Sie eine Datenbank aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, führen Sie in der Datenbank auf einem Nichtproduktionsserver DBCC CHECKDB aus, und überprüfen Sie auch den Code in der Datenbank, z. B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code.

Wenn Sie eine SQL Server 2005-Datenbank mit Volltextkatalogdateien an eine SQL Server 2008-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. Weitere Informationen finden Sie unter Aktualisieren der Volltextsuche. Wenn Sie eine aktualisierte SQL Server 2005-Datenbank mit Volltextkatalogdateien von einer SQL Server 2008-Serverinstanz trennen, werden die Katalogdateien zusammen mit den anderen Datenbankdateien beibehalten. Dies entspricht der Vorgehensweise in SQL Server 2005.

HinweisHinweis

Mit dem Trennen und Anfügen können Sie auch eine Datenbank aus SQL Server 2000 oder SQL Server 2005 auf SQL Server 2008 aktualisieren. Weitere Informationen finden Sie unter Vorgehensweise: Aktualisieren einer Datenbank durch Trennen und Anfügen (Transact-SQL).

Prozedur

So kopieren Sie eine Datenbank mit den Optionen zum Trennen und Anfügen

  1. Trennen Sie die Datenbank mithilfe der gespeicherten Prozedur sp_detach_db.

  2. Verschieben Sie die getrennten Datenbankdateien und Protokolldateien im Windows-Explorer oder an der Windows-Eingabeaufforderung an den neuen Speicherort.

    HinweisHinweis

    Um eine Datenbank mit nur einer Datei zu verschieben, können Sie E-Mail verwenden, falls die Datei nicht allzu groß ist.

    Sie sollten die Protokolldateien verschieben, selbst wenn Sie neue Protokolldateien erstellen möchten. In einigen Fällen sind für das erneute Anfügen einer Datenbank die vorhandenen Protokolldateien erforderlich. Deshalb sollten Sie immer alle getrennten Protokolldateien behalten, bis die Datenbank ohne sie erfolgreich angefügt wurde.

    HinweisHinweis

    Wenn Sie versuchen, die Datenbank anzufügen, ohne die Protokolldatei anzugeben, wird beim Anfügen die Protokolldatei im ursprünglichen Speicherort gesucht. Falls noch eine Kopie der Protokolldatei im ursprünglichen Speicherort vorhanden ist, wird diese Kopie angefügt. Um die Verwendung der ursprünglichen Protokolldatei zu vermeiden, geben Sie den Pfad der neuen Protokolldatei an, oder entfernen Sie die ursprüngliche Kopie der Protokolldatei (nachdem Sie sie an den neuen Speicherort kopiert haben).

  3. Fügen Sie die kopierten Dateien mithilfe der CREATE DATABASE-Anweisung von Transact-SQL und der FOR ATTACH [ WITH <service_broker_option> ]-Klausel oder einer FOR ATTACH_REBUILD_LOG-Klausel an (weitere Informationen finden Sie unter CREATE DATABASE (Transact-SQL)). Jede Datenbank enthält einen eindeutigen Bezeichner, der zum Weiterleiten von Service Broker-Nachrichten an diese Datenbank verwendet wird. Wenn die Datenbank Service Broker verwendet, lesen Sie die Informationen unter Verwalten von Service Broker-Identitäten.

    HinweisHinweis

    Informationen zum Anfügen einer Datenbank mithilfe des Objekt-Explorers finden Sie unter Vorgehensweise: Anfügen einer Datenbank (SQL Server Management Studio).

Beispiel

Im folgenden Beispiel wird eine Kopie der AdventureWorks-Datenbank mit dem Namen MyAdventureWorks erstellt. Die Transact-SQL-Anweisungen werden in einem Abfrage-Editorfenster ausgeführt, das mit der Serverinstanz verbunden ist, an die AdventureWorks angefügt ist.

  1. Führen Sie die folgenden Transact-SQL-Anweisungen aus, um die AdventureWorks-Datenbank zu trennen:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks';
    GO
    
  2. Verwenden Sie die gewünschte Methode, und kopieren Sie die Datenbankdateien (AdventureWorks_Data.mdf und AdventureWorks_log) nach C:\MySQLServer\AdventureWorks_Data.mdf bzw. C:\MySQLServer\AdventureWorks_Log.ldf.

    Wichtiger HinweisWichtig

    Speichern Sie für eine Produktionsdatenbank die Datenbank und das Transaktionsprotokoll auf separaten Datenträgern.

    Um Dateien im Netzwerk auf einen Datenträger auf einem Remotecomputer zu kopieren, verwenden Sie den UNC-Namen (Universal Naming Convention) des Remotespeicherorts. Ein UNC-Name hat das Format **\\Servername\Sharename\Path\**Filename. Wie beim Schreiben von Dateien auf die lokale Festplatte müssen die entsprechenden Berechtigungen für das Lesen oder Schreiben einer Datei auf dem Remotedatenträger dem von der SQL Server-Instanz verwendeten Benutzerkonto erteilt werden.

  3. Führen Sie die folgenden Transact-SQL-Anweisungen aus, um die verschobene Datenbank und optional das zugehörige Protokoll anzufügen:

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf')
        FOR ATTACH;
    GO
    
    HinweisHinweis

    In SQL Server Management Studio ist eine neu angefügte Datenbank nicht sofort im Objekt-Explorer sichtbar. Um die Datenbank anzuzeigen, klicken Sie im Objekt-Explorer im Menü Ansicht auf Aktualisieren. Wenn der Datenbanken-Knoten im Objekt-Explorer erweitert wird, wird nun die neu angefügte Datenbank in der Liste der Datenbanken angezeigt.