Verschieben von Systemdatenbanken

Gilt für: SQL Server

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

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

  • Bei geplanter Verschiebung.

  • Verschiebung aufgrund planmäßiger 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 den Vorgang Sichern und Wiederherstellen verwenden.

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.

Wichtig

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.

Verschieben der Systemdatenbanken

Zum Verschieben von Systemdatenbankdaten- oder Protokolldateien im Rahmen einer geplanten Verschiebung oder planmäßiger Wartungsarbeiten führen Sie die folgenden Schritte aus: Dies schließt die Systemdatenbanken model, msdb und tempdb ein.

Wichtig

Diese Prozedur gilt für alle Systemdatenbanken mit Ausnahme der master-Datenbank und der Resource-Datenbank. Die Schritte zum Verschieben der master-Datenbank finden Sie weiter unten in diesem Artikel. Die Resource-Datenbank kann nicht verschoben werden.

  1. Zeichnen Sie den vorhandenen Speicherort der Datenbankdateien, die Sie verschieben möchten, mithilfe der sys.master_files-Katalogsicht auf.

  2. Stellen Sie sicher, dass das Dienstkonto für die SQL Server Datenbank-Engine über vollständige Berechtigungen für den neuen Speicherort der Dateien verfügt. Weitere Informationen finden Sie unter Konfigurieren von Windows-Dienstkonten und -Berechtigungen. Wenn das Datenbank-Engine-Dienstkonto die Dateien am neuen Speicherort nicht steuern kann, wird die SQL-Server-Instanz nicht gestartet.

  3. Führen Sie für jede zu verschiebende Datenbankdatei die folgende Anweisung aus.

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

    Bis der Dienst neu gestartet wird, verwendet die Datenbank weiterhin die Daten und die Protokolldateien des vorhandenen Speicherorts.

  4. Beenden Sie die Instanz von SQL Server, um die Wartung durchzuführen. Informationen dazu finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten von SQL Server-Diensten.

  5. Kopieren Sie die Datenbankdatei(en) an den neuen Speicherort. Dies ist für die tempdb-Systemdatenbank kein notwendiger Schritt. Diese Dateien werden automatisch am neuen Speicherort erstellt.

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

  7. Überprüfen Sie die Dateiänderung durch Ausführen der folgenden Abfrage. Die Systemdatenbanken sollten die neuen physischen Dateispeicherorte melden.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. Da Sie in Schritt 5 die Datenbankdateien kopiert haben, anstatt sie zu verschieben, können Sie jetzt die nicht verwendeten Datenbankdateien sicher von ihrem vorherigen Speicherort löschen.

Nachverfolgung: Nach dem Verschieben der msdb-Systemdatenbank

Wenn die msdb-Datenbank verschoben und Datenbank-E-Mail konfiguriert ist, führen Sie die folgenden zusätzlichen 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';
    

    Wenn der Service Broker nicht für msdb aktiviert ist, muss er erneut aktiviert werden, damit Datenbank-E-Mail funktioniert. Weitere Informationen finden Sie unter ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    Vergewissern Sie sich, dass der Wert von is_broker_enabled jetzt 1 ist.

  2. Überprüfen Sie, ob Datenbank-E-Mail funktionsfähig ist, indem Sie eine Test-E-Mail senden.

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-Datenbank und der Resource-Datenbank. In den folgenden Beispielen werden die Windows-Befehlszeilenaufforderung und das Hilfsprogramm sqlcmd verwendet.

Wichtig

Wenn die Datenbank nicht gestartet werden kann, 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. Stellen Sie sicher, dass das Dienstkonto für die SQL Server Datenbank-Engine über vollständige Berechtigungen für den neuen Speicherort der Dateien verfügt. Weitere Informationen finden Sie unter Konfigurieren von Windows-Dienstkonten und -Berechtigungen. Wenn das Datenbank-Engine-Dienstkonto die Dateien am neuen Speicherort nicht steuern kann, wird die SQL-Server-Instanz nicht gestartet.

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

  3. Starten Sie die SQL Server-Instanz im ausschließlichen Wiederherstellungsmodus der master-Datenbank durch Eingeben der folgenden Befehle an der Eingabeaufforderung. Die Verwendung des Startparameters 3608 verhindert, dass SQL Server Datenbanken mit Ausnahme der master-Datenbank automatisch startet und wiederherstellt. Weitere Informationen finden Sie unter Startparameter und TF3608.

    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
    

    Informationen dazu finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten von SQL Server-Diensten.

  4. Stellen Sie sofort nach dem Start des Diensts mit Ablaufverfolgungsflag 3608 und /f eine sqlcmd-Verbindung mit dem Server her, um die verfügbare Einzelverbindung zu beanspruchen. Wenn sqlcmd beispielsweise lokal auf demselben Server wie die Standardinstanz (MSSQLSERVER) ausgeführt wird und eine Verbindung mit der Active Directory-Integrationsauthentifizierung hergestellt werden soll, führen Sie den folgenden Befehl aus:

    sqlcmd
    

    So stellen Sie mit der Active Directory-Integrationsauthentifizierung eine Verbindung mit einer benannten Instanz auf dem lokalen Server her:

    sqlcmd -S localhost\instancename
    

    Weitere Informationen zur sqlcmd-Syntax finden Sie unter SQLCMD-Hilfsprogramm.

    Verwenden Sie für jede zu verschiebende Datei die sqlcmd-Befehle oder SQL Server Management Studio, um die folgende Anweisung auszuführen. Weitere Informationen zum Verwenden des sqlcmd -Hilfsprogramms finden Sie unter Verwenden des Hilfsprogramms „sqlcmd“. Sobald die sqlcmd-Sitzung geöffnet ist, führen Sie die folgende Anweisung einmal für jede zu verschiebende Datei aus:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. Verwenden Sie hierzu das sqlcmd-Hilfsprogramm oder SQL Server Management Studio.

  6. Beenden Sie die Instanz von SQL Server. Führen Sie beispielsweise NET STOP MSSQLSERVER in der Eingabeaufforderung aus.

  7. Kopieren Sie die Datei(en) an den neuen Speicherort.

  8. Starten Sie die Instanz von SQL Serverneu. Führen Sie beispielsweise NET START MSSQLSERVER in der Eingabeaufforderung aus.

  9. Ü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>');
    
  10. Da Sie in Schritt 7 die Datenbankdateien kopiert haben, anstatt sie zu verschieben, können Sie jetzt die nicht verwendeten Datenbankdateien sicher von ihrem vorherigen Speicherort löschen.

Verschieben der master-Datenbank

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

  1. Stellen Sie sicher, dass das Dienstkonto für die SQL Server Datenbank-Engine über vollständige Berechtigungen für den neuen Speicherort der Dateien verfügt. Weitere Informationen finden Sie unter Konfigurieren von Windows-Dienstkonten und -Berechtigungen. Wenn das Datenbank-Engine-Dienstkonto die Dateien am neuen Speicherort nicht steuern kann, wird die SQL-Server-Instanz nicht gestartet.

  2. Starten Sie über das Menü Start den SQL Server-Konfigurations-Manager. Weitere Informationen zum erwarteten Standort finden Sie unter SQL Server-Konfigurations-Manager.

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

  4. Wählen Sie im Dialogfeld Eigenschaften von SQL Server (instance_name) die Registerkarte Startparameter aus.

  5. Wählen Sie im Feld Vorhandene Parameter den Parameter -d aus. Ändern Sie im Feld Startparameter angeben den Parameter in den neuen Pfad der master data-Datei. Wählen Sie Aktualisieren aus, um die Änderung zu speichern.

  6. Wählen Sie im Feld Vorhandene Parameter den Parameter -l aus. Ändern Sie im Feld Startparameter angeben den Parameter in den neuen Pfad der master log-Datei. Wählen Sie Aktualisieren aus, um die Änderung zu speichern.

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

    -dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    

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

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Wählen Sie OK aus, um die Änderungen dauerhaft zu speichern, und schließen Sie das Dialogfeld SQL Server (instance_name)-Eigenschaften.

  8. Beenden Sie die Instanz von SQL Server, indem Sie mit der rechten Maustaste auf den Instanznamen klicken und Beenden auswählen.

  9. Kopieren Sie die Dateien master.mdf und mastlog.ldf an den neuen Speicherort.

  10. Starten Sie die Instanz von SQL Serverneu.

  11. Ü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');
    
  12. An diesem Punkt sollte SQL Server normal ausgeführt werden. Microsoft empfiehlt jedoch, auch den Registrierungseintrag unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setupanzupassen, wobei instance_IDMSSQL13.MSSQLSERVERentspricht. Ändern Sie in dieser Struktur den SQLDataRoot Wert in den neuen Pfad des neuen Speicherorts der master Datenbankdateien. Wenn Sie es versäumen, die Registrierung zu aktualisieren, können Fehler bei Patches und Upgrades auftreten.

  13. Da Sie in Schritt 9 die Datenbankdateien kopiert haben, anstatt sie zu verschieben, können Sie jetzt die nicht verwendeten Datenbankdateien sicher von ihrem vorherigen Speicherort löschen.

Verschieben der Ressourcendatenbank

Der Speicherort der Resource-Datenbank ist \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. Die Datenbank kann nicht verschoben werden.

Nachverfolgung: Nach dem Verschieben aller Systemdatenbanken

Wenn Sie alle Systemdatenbanken auf ein neues Laufwerk oder Volume bzw. auf einen anderen Server mit einem anderen Laufwerkbuchstaben verschoben haben, führen Sie die folgenden Updates aus.

  • Ändern Sie den Pfad des SQL Server-Agent-Protokolls. Wenn Sie diesen Pfad nicht aktualisieren, kann SQL Server-Agent nicht gestartet werden.

  • Ändern Sie den Standardspeicherort der Datenbank. Beim Erstellen einer neuen Datenbank kann ein Fehler auftreten, wenn der als Standardspeicherort angegebene Laufwerkbuchstabe und Pfad nicht vorhanden ist.

Ändern des Pfads des SQL Server-Agent-Protokolls

Wenn Sie alle Systemdatenbanken auf ein neues Volumen bzw. auf einen anderen Server mit einem anderen Laufwerkbuchstaben verschoben haben und der Pfad der SQL Agent-Fehlerprotokolldatei SQLAGENT.OUT nicht mehr existiert, führen Sie die folgenden Updates aus.

  1. Erweitern Sie in SQL Server Management Studio im Objekt-Explorer SQL Server-Agent.

  2. Klicken Sie mit der rechten Maustaste auf Fehlerprotokolle, und wählen Sie Konfigurieren aus.

  3. Geben Sie im Dialogfeld Fehlerprotokolle des SQL Server-Agents konfigurieren den neuen Speicherort der Datei SQLAGENT.OUT an. Der Standardspeicherort ist C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

Ändern des Standardspeicherorts der Datenbank

  1. Von SQL Server Management Studio im Objekt-Explorer eine Verbindung mit der gewünschten SQL Server-Instanz herstellen. Klicken Sie mit der rechten Maustaste auf die Spalte, und wählen Sie Eigenschaftenaus.

  2. Wählen Sie im Dialogfeld Servereigenschaften die Option Datenbankeinstellungenaus.

  3. Wechseln Sie unter Standardspeicherorte für Datenbankzum neuen Speicherort sowohl für die Daten- als auch die Protokolldatei.

  4. Starten und beenden Sie den SQL Server-Dienst, um die Änderung abzuschließen.

Beispiele

A. Verschieben der tempdb-Datenbank

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

Tipp

Nutzen Sie diese Gelegenheit, um Ihre tempdb-Dateien auf optimale Größe und Platzierung zu überprüfen. Weitere Informationen finden Sie unter Optimieren der Leistung von tempdb in SQL Server.

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 4 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. Stellen Sie sicher, dass das Dienstkonto für die SQL Server Datenbank-Engine über vollständige Berechtigungen für den neuen Speicherort der Dateien verfügt. Weitere Informationen finden Sie unter Konfigurieren von Windows-Dienstkonten und -Berechtigungen. Wenn das Datenbank-Engine-Dienstkonto die Dateien am neuen Speicherort nicht steuern kann, wird die SQL-Server-Instanz nicht gestartet.

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

    Bis der Dienst neu gestartet wird, verwendet tempdb weiterhin die Daten und die Protokolldateien des vorhandenen Speicherorts.

  4. Beenden Sie die Instanz von SQL Server, und starten Sie sie erneut.

  5. Ü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');
    
  6. Löschen Sie die nicht verwendeten tempdb-Dateien am ursprünglichen Speicherort.