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 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.

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 einer anderen Serverinstanz (SQL Server).

Einige Funktionen von SQL Server-Datenbankmodul ändern die Art und Weise, wie Datenbankmodul Informationen in den Datenbankdateien speichert. Diese Funktionen sind nicht in allen Editionen von SQL Serververfü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 Funktionen aufzulisten, die in der aktuellen Datenbank aktiviert sind.

Für die Prozeduren in diesem Thema ist der logische Name der Datenbankdateien erforderlich. Zum Abrufen des Namens führen Sie eine Abfrage für die Namensspalte in der sys.master_files-Katalogsicht aus.

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

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

  1. Führen Sie die folgende Anweisung aus.

    ALTER DATABASE database_name SET OFFLINE;  
    
    
  2. Verschieben Sie die Datei(en) 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 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>');  
    
    

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. Beenden Sie die Instanz von SQL Server , oder fahren Sie das System für die Wartungsarbeiten herunter. Weitere Informationen finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten des Datenbankmoduls, SQL Server-Agent oder des SQL Server-Browsers.

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

  4. Starten Sie die Instanz von SQL Server oder den Server neu. Weitere Informationen finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten des Datenbankmoduls, SQL Server-Agent oder des SQL Server-Browsers.

  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>');  
    
    

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:

System_CAPS_ICON_important.jpg 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 gestartet ist.

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

    • 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 Starten, Beenden, Anhalten, Fortsetzen und Neustarten des Datenbankmoduls, SQL Server-Agent oder des SQL Server-Browsers.

  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 Verwenden des Hilfsprogramms „sqlcmd“.

  4. Starten Sie das Hilfsprogramm sqlcmd 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. 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>');  
    
    

Im folgenden Beispiel wird die AdventureWorks2012-Protokolldatei im Rahmen einer geplanten Verschiebung 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';  

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 des Datenbankmoduls, SQL Server-Agent oder des SQL Server-Browsers

Community-Beiträge

HINZUFÜGEN
Anzeigen: