Freigeben über


Verschieben von Benutzerdatenbanken

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 gilt für das Verschieben von Datenbankdateien innerhalb derselben Instanz von SQL Server. Um eine Datenbank in eine andere Instanz von SQL Server oder auf einen anderen Server zu verschieben, verwenden Sie Sicherungs- und Wiederherstellungs- oderTrennen- und Anfügenvorgänge.

Überlegungen

Wenn Sie eine Datenbank auf eine andere Serverinstanz verschieben, um Benutzern und Anwendungen eine konsistente Erfahrung zu bieten, müssen Sie möglicherweise einige oder alle Metadaten für die Datenbank erneut erstellen. Weitere Informationen finden Sie unter Verwalten von Metadaten beim Bereitstellen einer Datenbank auf einer anderen Serverinstanz (SQL Server).

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

Für die Verfahren in diesem Thema ist der logische Name der Datenbankdateien erforderlich. Um den Namen abzurufen, fragen Sie die Namensspalte in der sys.master_files Katalogansicht ab.

Ab SQL Server 2008 R2 werden Volltextkataloge in die Datenbank integriert, anstatt im Dateisystem gespeichert zu werden. Die Volltextkataloge werden jetzt automatisch verschoben, wenn Sie eine Datenbank verschieben.

Geplantes Umsiedlungsverfahren

Führen Sie die folgenden Schritte aus, um eine Daten- oder Protokolldatei als Teil einer geplanten Verlagerung zu verschieben:

  1. Führen Sie den folgenden Befehl aus.

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. Verschieben Sie die Datei oder Dateien an den neuen Speicherort.

  3. Führen Sie für jede verschobene Datei die folgende Anweisung aus.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. Führen Sie den folgenden Befehl aus.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. Überprüfen Sie die Dateiänderung, indem Sie die folgende Abfrage ausführen.

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

Umzug für geplante Datenträgerwartung

Führen Sie die folgenden Schritte aus, um eine Datei als Teil eines geplanten Datenträgerwartungsprozesses zu verschieben:

  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. Beenden Sie die Instanz von SQL Server, oder beenden Sie das System, um Die Wartung durchzuführen. Weitere Informationen finden Sie unter "Start", "Beenden", "Anhalten", "Fortsetzen", "Neustarten" des Datenbankmoduls, des SQL Server-Agents oder des SQL Server-Browserdiensts.

  3. Verschieben Sie die Datei oder Dateien an den neuen Speicherort.

  4. Starten Sie die Instanz von SQL Server oder dem Server neu. Weitere Informationen finden Sie unter Start, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent oder SQL Server Browser Service

  5. Überprüfen Sie die Dateiänderung, indem Sie die folgende Abfrage ausführen.

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

Fehlerwiederherstellungsprozedur

Wenn eine Datei aufgrund eines Hardwarefehlers verschoben werden muss, führen Sie die folgenden Schritte aus, um die Datei an einen neuen Speicherort zu verschieben.

Von Bedeutung

Wenn die Datenbank nicht gestartet werden kann, d. h. im verdächtigen Modus oder in einem nicht wiederhergestellten Zustand, können nur Mitglieder der festen Rolle "sysadmin" die Datei verschieben.

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

  2. Starten Sie die Instanz von SQL Server im Master-only-Wiederherstellungsmodus, indem Sie einen der folgenden Befehle an der Eingabeaufforderung ausführen.

    • Führen Sie für die Standardinstanz (MSSQLSERVER) den folgenden Befehl aus.

      NET START MSSQLSERVER /f /T3608  
      
    • Führen Sie für eine benannte Instanz den folgenden Befehl aus.

      NET START MSSQL$instancename /f /T3608  
      

    Weitere Informationen finden Sie unter "Start", "Beenden", "Anhalten", "Fortsetzen", "Neustarten" des Datenbankmoduls, des SQL Server-Agents oder des SQL Server-Browserdiensts.

  3. Verwenden Sie sqlcmd-Befehle oder SQL Server Management Studio, um die folgende Anweisung auszuführen, damit jede Datei verschoben werden kann.

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

    Weitere Informationen zur Verwendung des sqlcmd-Hilfsprogramms finden Sie unter Verwenden des sqlcmd-Hilfsprogramms.

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

  5. Beenden Sie die Instanz von SQL Server.

  6. Verschieben Sie die Datei oder Dateien an den neuen Speicherort.

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

  8. Überprüfen Sie die Dateiänderung, indem Sie die folgende Abfrage ausführen.

    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 AdventureWorks2012-Protokolldatei im Rahmen einer geplanten Verlagerung an einen neuen Speicherort verschoben.

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

Siehe auch

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
Anfügen und Trennen von Datenbanken (SQL Server)
Verschieben von Systemdatenbanken
Verschieben von Datenbankdateien
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Starten, Beenden, Anhalten, Fortsetzen und Neustarten der Datenbank-Engine, SQL Server-Agent oder des SQL Server-Browsers