Verschieben von Benutzerdatenbanken

Gilt für: SQL Server

In SQL Server können Sie die Daten-, Protokoll- und Volltextkatalogdateien einer Benutzerdatenbank an einen neuen Speicherort verschieben, indem Sie den neuen Dateispeicherort in der FILENAME-Klausel der ALTER DATABASE-Anweisung angeben. Diese Methode ermöglicht das Verschieben von Datenbankdateien innerhalb derselben Instanz von SQL Server. Wenn Sie eine Datenbank auf eine andere Instanz von SQL Server oder einen anderen Server verschieben möchten, verwenden Sie Sicherungs- und Wiederherstellungs- oder Trennungs- und Anfügungsoperationen.

Hinweis

In diesem Artikel wird das Verschieben von Benutzerdatenbankdateien behandelt. Informationen zum Verschieben von Systemdatenbankdateien finden Sie unter Verschieben von Systemdatenbanken.

Überlegungen

Wenn Sie eine Datenbank auf eine andere Serverinstanz verschieben, müssen Sie möglicherweise einen Teil oder auch alle Metadaten für die Datenbank erneut erstellen, um Benutzern und Anwendungen ein konsistentes Verhalten bereitzustellen. Weitere Informationen finden Sie unter Verwalten von Metadaten beim Bereitstellen einer Datenbank auf einem anderen Server.

Einige Funktionen von SQL Server Datenbank-Engine ändern die Art und Weise, wie Datenbank-Engine Informationen in den Datenbankdateien speichert. Diese Funktionen sind nicht in allen Editionen von SQL Server verfügbar. Eine Datenbank, die diese Funktionen enthält, kann nicht in eine Edition von SQL Server verschoben werden, die sie nicht unterstützt. Verwenden Sie die dynamische Verwaltungssicht sys.dm_db_persisted_sku_features, um alle editionsspezifischen Features aufzulisten, die in der aktuellen Datenbank aktiviert sind.

Die Verfahren in diesem Artikel erfordern den logischen Namen der Datenbankdateien. Zum Abrufen des Namens führen Sie eine Abfrage für die Namensspalte in der sys.master_files -Katalogsicht aus.

Volltextkataloge sind in die Datenbank integriert, statt im Dateisystem gespeichert. Die Volltextkataloge werden automatisch verschoben, wenn Sie eine Datenbank verschieben.

Hinweis

Stellen Sie sicher, dass das Dienstkonto für Konfigurieren von Windows-Dienstkonten und -berechtigungen über Berechtigungen für den neuen Dateispeicherort im Dateisystem verfügt. Weitere Informationen finden Sie unter Konfigurieren von Dateisystemberechtigungen für den Datenbank-Engine-Zugriff.

Prozedur zur geplanten Verschiebung

Zum Verschieben einer Daten- oder Protokolldatei im Rahmen einer geplanten Verschiebung müssen Sie die folgenden Schritte ausführen:

  1. Führen Sie für jede zu verschiebende Datei die folgende Anweisung aus.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Führen Sie die folgende Anweisung aus, um die Datenbank offline zu schalten.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Diese Aktion erfordert exklusiven Zugriff auf die Datenbank. Wenn eine andere Verbindung zur Datenbank geöffnet ist, wird die ALTER DATABASE-Anweisung blockiert, bis alle Verbindungen geschlossen sind. Informationen zur Außerkraftsetzung dieses Verhaltens finden Sie im Abschnitt zur WITH <termination>-Klausel. Wenn Sie automatisch ein Rollback durchführen und alle anderen Verbindungen zur Datenbank trennen möchten, verwenden Sie folgenden Ansatz:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Verschieben Sie die Datei(en) an den neuen Speicherort.

  4. Führen Sie die folgende Anweisung aus.

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Verschiebung aufgrund planmäßiger Datenträgerwartung

Zum Verschieben einer Datei im Rahmen eines planmäßigen Datenträgerwartungsprozesses müssen Sie die folgenden Schritte ausführen:

  1. Führen Sie für jede zu verschiebende Datei die folgende Anweisung aus.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Um die Wartung durchzuführen, halten Sie die Instanz von SQL Server an oder fahren Sie das System herunter. Informationen dazu finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten von SQL Server-Diensten.

  3. Verschieben Sie die Datei(en) an den neuen Speicherort.

  4. Starten Sie die Instanz von SQL Server oder den Server erneut. Informationen dazu finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten von SQL Server-Diensten

  5. Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Prozedur zur Wiederherstellung nach Fehlern

Wenn eine Datei aufgrund eines Hardwarefehlers verschoben werden muss, müssen Sie die folgenden Schritte ausführen, um die Datei an einen neuen Speicherort zu verschieben:

Wichtig

Wenn die Datenbank nicht gestartet werden kann, d. h., wenn sie als fehlerverdächtig eingestuft wurde oder sich in einem nicht wiederhergestellten Status befindet, können nur Mitglieder der festen Rolle sysadmin die Datei verschieben.

  1. Beenden Sie die Instanz von SQL Server, wenn sie bereits gestartet ist.

  2. Starten Sie die SQL Server-Instanz im ausschließlichen Wiederherstellungsmodus der master-Datenbank durch Eingeben der folgenden Befehle an der Eingabeaufforderung.

  3. Verwenden Sie für jede zu verschiebende Datei die sqlcmd-Befehle oder SQL Server Management Studio, um die folgende Anweisung auszuführen.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    

    Weitere Informationen zum Verwenden des sqlcmd-Hilfsprogramms finden Sie unter „sqlcmd“ - Verwenden des Hilfsprogramms.

  4. Verwenden Sie hierzu das sqlcmd-Hilfsprogramm oder SQL Server Management Studio.

  5. Beenden Sie die Instanz von SQL Server.

  6. Verschieben Sie die Datei(en) an den neuen Speicherort.

  7. Starten Sie die Instanz von SQL Server wieder. Führen Sie z. B. folgenden Befehl aus: NET START MSSQLSERVER

  8. Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    

Beispiele

Im folgenden Beispiel wird die AdventureWorks2022 -Protokolldatei im Rahmen einer geplanten Verschiebung an einen neuen Speicherort verschoben.

  1. Vergewissern Sie sich, dass Sie sich im Kontext der master-Datenbank befinden.

    USE master;
    GO
    
  2. Zurücksenden des logischen Dateinamens.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';
    GO
    
  3. Schalten Sie die Datenbank offline.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Physisches verschieben der Datei an einen neuen Speicherort. In der folgenden Anweisung ändern Sie den in FILENAME angegebenen Pfad in den neuen Speicherort der Datei auf Ihrem Server.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Überprüfen Sie den neuen Speicherort.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';