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.
Zeichnen Sie den vorhandenen Speicherort der Datenbankdateien, die Sie verschieben möchten, mithilfe der sys.master_files-Katalogsicht auf.
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.
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.
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.
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.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.
Ü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>');
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.
Ü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.Ü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.
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.
Beenden Sie die Instanz von SQL Server, wenn sie gestartet ist.
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 dermaster
-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.
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
Verwenden Sie hierzu das sqlcmd-Hilfsprogramm oder SQL Server Management Studio.
Beenden Sie die Instanz von SQL Server. Führen Sie beispielsweise
NET STOP MSSQLSERVER
in der Eingabeaufforderung aus.Kopieren Sie die Datei(en) an den neuen Speicherort.
Starten Sie die Instanz von SQL Serverneu. Führen Sie beispielsweise
NET START MSSQLSERVER
in der Eingabeaufforderung aus.Ü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>');
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.
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.
Starten Sie über das Menü Start den SQL Server-Konfigurations-Manager. Weitere Informationen zum erwarteten Standort finden Sie unter SQL Server-Konfigurations-Manager.
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.
Wählen Sie im Dialogfeld Eigenschaften von SQL Server (instance_name) die Registerkarte Startparameter aus.
Wählen Sie im Feld Vorhandene Parameter den Parameter
-d
aus. Ändern Sie im Feld Startparameter angeben den Parameter in den neuen Pfad dermaster
data-Datei. Wählen Sie Aktualisieren aus, um die Änderung zu speichern.Wählen Sie im Feld Vorhandene Parameter den Parameter
-l
aus. Ändern Sie im Feld Startparameter angeben den Parameter in den neuen Pfad dermaster
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 dermaster
-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
-DatendateiE:\SQLData
lautet, werden die Parameterwerte folgendermaßen geändert:-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
Wählen Sie OK aus, um die Änderungen dauerhaft zu speichern, und schließen Sie das Dialogfeld SQL Server (instance_name)-Eigenschaften.
Beenden Sie die Instanz von SQL Server, indem Sie mit der rechten Maustaste auf den Instanznamen klicken und Beenden auswählen.
Kopieren Sie die Dateien
master.mdf
undmastlog.ldf
an den neuen Speicherort.Starten Sie die Instanz von SQL Serverneu.
Ü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');
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\Setup
anzupassen, wobei instance_IDMSSQL13.MSSQLSERVER
entspricht. Ändern Sie in dieser Struktur denSQLDataRoot
Wert in den neuen Pfad des neuen Speicherorts dermaster
Datenbankdateien. Wenn Sie es versäumen, die Registrierung zu aktualisieren, können Fehler bei Patches und Upgrades auftreten.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.
Erweitern Sie in SQL Server Management Studio im Objekt-Explorer SQL Server-Agent.
Klicken Sie mit der rechten Maustaste auf Fehlerprotokolle, und wählen Sie Konfigurieren aus.
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
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.
Wählen Sie im Dialogfeld Servereigenschaften die Option Datenbankeinstellungenaus.
Wechseln Sie unter Standardspeicherorte für Datenbankzum neuen Speicherort sowohl für die Daten- als auch die Protokolldatei.
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.
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
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.
Ä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.Beenden Sie die Instanz von SQL Server, und starten Sie sie erneut.
Ü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');
Löschen Sie die nicht verwendeten
tempdb
-Dateien am ursprünglichen Speicherort.