Verschieben von Systemdatenbanken

In diesem Thema wird beschrieben, wie Systemdatenbanken in SQL Server verschoben werden. Das Verschieben von Systemdatenbanken kann in den folgenden Situationen nützlich sein:

  • Wiederherstellung nach einem Fehler. Wenn z. B. die Datenbank aufgrund eines Hardwarefehlers als fehlerverdächtig eingestuft oder heruntergefahren wurde.

  • Eine geplante Verschiebung.

  • Verschiebung wegen einer geplanten Datenträgerwartung.

Die folgenden Verfahren gelten für das Verschieben von Datenbankdateien innerhalb derselben Instanz von SQL Server. Zum Verschieben einer Datenbank in eine andere Instanz von SQL Server oder auf einen anderen Server können Sie die Vorgänge Sichern und Wiederherstellen oder Trennen und Anfügen verwenden.

Für die Prozeduren im Rahmen dieses Themas wird der logische Name der Datenbankdateien benötigt. Zum Abrufen des Namens führen Sie eine Abfrage für die Namensspalte in der sys.master_files-Katalogsicht aus.

Wichtiger HinweisWichtig

Wenn Sie eine Systemdatenbank verschieben und anschließend die master-Datenbank neu erstellen, müssen Sie die Systemdatenbank erneut verschieben, da bei der Neuerstellung alle Systemdatenbanken an ihrem standardmäßigen Speicherort installiert werden. Weitere Informationen zum Neuerstellen der Masterdatenbank finden Sie im Abschnitt zum Neuerstellen von Systemdatenbanken und Neuerstellen der Registrierung unter Vorgehensweise: Installieren von SQL Server 2008 von der Eingabeaufforderung.

Prozedur zur geplanten Verschiebung und planmäßigen Datenträgerwartung

Zum Verschieben von Systemdatenbankdaten- oder Protokolldateien im Rahmen einer geplanten Verschiebung oder planmäßiger Wartungsarbeiten führen Sie die folgenden Schritte aus: Diese Prozedur gilt für alle Systemdatenbanken mit Ausnahme der master- und Resource-Datenbanken.

  1. Führen Sie die folgende Anweisung für jede zu verschiebende Datei 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 Beenden von Diensten.

  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 und Neustarten von 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>');
    

Wenn die msdb-Datenbank verschoben wurde und die SQL Server-Instanz für Datenbank-E-Mail konfiguriert ist, führen Sie zusätzlich die folgenden Schritte aus.

  1. Überprüfen Sie mit der folgenden Abfrage, ob Service Broker für die msdb-Datenbank aktiviert ist.

    SELECT is_broker_enabled 
    FROM sys.databases
    WHERE name = N'msdb';
    

    Weitere Informationen zum Aktivieren von Service Broker finden Sie unter ALTER DATABASE (Transact-SQL).

  2. Überprüfen Sie, ob Datenbank-E-Mail funktionsfähig ist, indem Sie eine Test-E-Mail senden. Weitere Informationen finden Sie unter Problembehandlung bei Datenbank-E-Mail.

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: Diese Prozedur gilt für alle Systemdatenbanken mit Ausnahme der master- und Resource-Datenbanken.

Wichtiger HinweisWichtig

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. Bei den in diesen Befehlen angegebenen Parametern wird nach Groß- und Kleinschreibung unterschieden. Die Befehle werden nicht ausgeführt, wenn die Parameter nicht wie gezeigt angegeben werden.

    • 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 Vorgehensweise: Starten einer Instanz von SQL Server (net-Befehle).

  3. Verwenden Sie für jede zu verschiebende Datei 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 Dienstprogramms sqlcmd finden Sie unter Verwendung des Dienstprogramms "sqlcmd".

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

  5. Beenden Sie die Instanz von SQL Server. Führen Sie dazu z. B. NET STOP MSSQLSERVER aus.

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

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

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

Verschieben der master-Datenbank

Führen Sie die folgenden Schritte aus, um die master-Datenbank zu verschieben.

  1. Zeigen Sie im Menü Start auf Alle Programme, auf Microsoft SQL Server 2005, auf Konfigurationstools, und klicken Sie dann auf SQL Server-Konfigurations-Manager.

  2. Klicken Sie im Knoten SQL Server-Dienste mit der rechten Maustaste auf die Instanz von SQL Server (z. B. SQL Server (MSSQLSERVER)), und wählen Sie Eigenschaften aus.

  3. Klicken Sie im Dialogfeld Eigenschaften von SQL Server (instance_name) auf die Registerkarte Erweitert.

  4. Bearbeiten Sie die Werte unter Startparameter so, dass sie auf den geplanten Speicherort für die Daten- und Protokolldateien der Masterdatenbank zeigen, und klicken Sie auf OK. Das Verschieben der Fehlerprotokolldatei ist optional.

    Der Parameterwert der Datendatei muss dem -d-Parameter und der Wert der Protokolldatei muss dem -l-Parameter entsprechen. Im folgenden Beispiel werden die Parameterwerte für den Standardspeicherort der master-Daten- und Protokolldateien dargestellt.

    -dC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\
    master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\
    LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\
    DATA\mastlog.ldf
    

    Wenn der geplante Speicherort für das Verschieben der Master- und Protokolldateien E:\SQLData lautet, werden die Parameterwerte folgendermaßen geändert:

    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
    
  5. Beenden Sie die Instanz von SQL Server, indem Sie mit der rechten Maustaste auf den Instanznamen klicken und Beenden wählen.

  6. Verschieben Sie die Dateien master.mdf und mastlog.ldf an den neuen Speicherort.

  7. Starten Sie die Instanz von SQL Server neu.

  8. Überprüfen Sie die Dateiänderung für die master-Datenbank, indem Sie die folgende Abfrage ausführen.

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
    

Verschieben der Ressourcendatenbank

Der Speicherort der Ressourcendatenbank in SQL Server 2008 ist <laufwerk>: \Programme\Microsoft SQL Server\MSSQL10.<instanzname>\MSSQL\Binn\. Die Datenbank kann nicht verschoben werden.

Beispiele

A. Verschieben der tempdb-Datenbank

Im folgenden Beispiel werden die tempdb-Daten- und Protokolldateien im Rahmen einer geplanten Verschiebung an einen neuen Speicherort verschoben.

HinweisHinweis

Da tempdb jedes Mal neu erstellt wird, wenn die Instanz von SQL Server gestartet wird, müssen die Daten- und Protokolldateien nicht physisch verschoben werden. Die Dateien werden am neuen Speicherort erstellt, sobald der Dienst in Schritt 3 neu gestartet wird. Bis der Dienst neu gestartet wird, verwendet tempdb weiterhin die Daten und die Protokolldateien des vorhandenen Speicherorts.

  1. Ermitteln Sie die logischen Dateinamen der tempdb-Datenbank und ihren aktuellen Speicherort auf dem Datenträger.

    SELECT name, physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Ändern Sie den Speicherort der einzelnen Dateien mithilfe von ALTER DATABASE.

    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    
  3. Beenden Sie die Instanz von SQL Server, und starten Sie sie erneut.

  4. Überprüfen Sie die Dateiänderung.

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  5. Löschen Sie die Dateien tempdb.mdf und templog.ldf vom ursprünglichen Speicherort.

Änderungsverlauf

Aktualisierter Inhalt

Aktualisiert den Abschnitt "Verschieben der Ressourcendatenbank", um anzugeben, dass die Ressourcendatenbank nicht verschoben werden kann.