Neuerstellen von Systemdatenbanken
Gilt für: SQL Server
Systemdatenbanken müssen neu erstellt werden, um Beschädigungen der Systemdatenbanken master, model, msdboder resource zu beheben oder die Standardsortierung auf Serverebene zu ändern. Dieser Artikel enthält schrittweise Anweisungen für die Neuerstellung von Systemdatenbanken in SQL Server.
Dieser Artikel ist nicht mit der Neuerstellung von Indizes verknüpft.
Begrenzungen
Bei der Neuerstellung der Systemdatenbanken master
, model
, msdb
und tempdb
werden die Datenbanken abgelegt und an ihrem ursprünglichen Speicherort neu erstellt. Wenn in der REBUILD-Anweisung eine neue Sortierung angegeben wird, werden die Systemdatenbanken unter Verwendung dieser Sortiereinstellung erstellt. Alle Benutzeränderungen an diesen Datenbanken gehen verloren. Beispielsweise kann die master
-Datenbank benutzerdefinierte Objekte, die msdb
-Datenbank geplante Aufträge und die model
-Datenbank Änderungen der Standardeinstellungen für Datenbanken enthalten.
Voraussetzungen
Führen Sie die folgenden Aufgaben aus, bevor Sie die Systemdatenbanken neu erstellen, um sicherzustellen, dass Sie die Systemdatenbanken mit ihren aktuellen Einstellungen wiederherstellen können.
Zeichnen Sie alle serverweiten Konfigurationswerte auf.
SELECT * FROM sys.configurations;
Zeichnen Sie alle Hotfixes auf, die auf die SQL Server-Instanz und die aktuelle Sortierung angewendet wurden. Sie müssen diese Hotfixes erneut anwenden, nachdem Sie die Systemdatenbanken neu erstellt haben.
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime, SERVERPROPERTY('Collation') AS Collation;
Zeichnen Sie den aktuellen Speicherort aller Daten und Protokolldateien für die Systemdatenbanken auf. Durch die erneute Erstellung der Systemdatenbanken werden alle Systemdatenbanken an ihrem ursprünglichen Speicherort installiert. Wenn Sie Systemdatenbank-Daten oder Protokolldateien an einen anderen Speicherort verschoben haben, müssen Sie die Dateien erneut verschieben.
SELECT name, physical_name AS current_file_location FROM sys.master_files WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
Suchen Sie die aktuelle Sicherung der Datenbanken
master
,model
undmsdb
.Wenn die Instanz von SQL Server als Replikationsverteiler konfiguriert ist, suchen Sie die aktuelle Sicherung der
distribution
Datenbank.Stellen Sie sicher, dass Sie die geeigneten Berechtigungen haben, um die Systemdatenbanken neu zu erstellen. Um diesen Vorgang ausführen zu können, müssen Sie Mitglied der festen Serverrolle sysadmin sein. Weitere Informationen finden Sie unter Rollen auf Serverebene.
Überprüfen Sie, ob Kopien der Daten und Protokollvorlagendateien der Datenbanken
master
,model
undmsdb
auf dem lokalen Server vorhanden sind. Der Standardspeicherort für die Vorlagendateien istC:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates
(wobei<xx>
die Version ist, die Sie installiert haben). Diese Dateien werden während der Neuerstellung verwendet und müssen vorhanden sein, um Setup erfolgreich ausführen zu können. Wenn sie fehlen, führen Sie die Reparaturfunktion von Setup aus, oder kopieren Sie die Dateien manuell vom Installationsmedium. Um die Dateien auf dem Installationsmedium zu finden, navigieren Sie zum entsprechenden Plattformverzeichnis (x86 oder x64), und navigieren Sie dann zusetup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates
.
Neuerstellen von Systemdatenbanken
Mit der folgenden Vorgehensweise werden die master
, model
, msdb
und tempdb
Systemdatenbanken neu erstellt. Sie können die Systemdatenbanken, die neu erstellt werden sollen, nicht angeben. Für gruppierte Instanzen muss diese Vorgehensweise für den aktiven Knoten ausgeführt werden, und die SQL Server-Ressource in der entsprechenden Clusteranwendungsgruppe muss zuvor offline geschaltet werden.
Durch diese Vorgehensweise wird die resource
Datenbank nicht neu erstellt. Gehen Sie zum Abschnitt Vorgehensweise zum Neuerstellen der Ressourcen–Systemdatenbank weiter unten in diesem Artikel.
Erstellen Sie Systemdatenbanken für eine Instanz von SQL Server neu
Legen Sie das
setup.exe
SQL Server-Installationsmedium in das Laufwerk ein, oder wechseln Sie an einer Eingabeaufforderung zum Speicherort der Datei auf dem lokalen Server. Für SQL Server 2022 (16.x) lautet der Standardspeicherort auf dem ServerC:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022
.Geben Sie den folgenden Befehl in das Eingabeaufforderungsfenster ein. Die eckigen Klammern zeigen optionale Parameter an. Geben Sie die Klammern nicht ein. Wenn Sie Windows als Betriebssystem verwenden und die Benutzerkontensteuerung aktiviert ist, sind für die Ausführung des Setups erhöhte Rechte erforderlich. Die Eingabeaufforderung muss als Administrator ausgeführt werden.
setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
Parametername Beschreibung /QUIET oder /Q Gibt an, dass das Setup ohne Benutzeroberfläche ausgeführt werden sollte. /ACTION=REBUILDDATABASE Gibt an, dass die Systemdatenbanken vom Setup neu erstellt werden sollte. /INSTANCENAME=InstanceName Der Name der SQL Server-Instanz. Geben Sie MSSQLSERVER für die Standardinstanz ein. /SQLSYSADMINACCOUNTS=accounts Gibt die Windows-Gruppen oder die individuellen Konten an, die der festen Serverrolle sysadmin hinzugefügt werden sollen. Wenn Sie mehr als ein Konto angeben, trennen Sie die Konten mit einem Leerzeichen. Geben Sie z.B. BUILTIN\Administrators MyDomain\MyUserein. Wenn Sie ein Konto angeben, dessen Name ein Leerzeichen enthält, setzen Sie den Kontonamen in doppelte Anführungszeichen. Geben Sie beispielsweise NT AUTHORITY\SYSTEMein. [ /SAPWD=StrongPassword ] Dieser Parameter gibt das Kennwort für das SQL Server-sa-Konto an. Dieser Parameter ist erforderlich, wenn die Instanz den gemischten Authentifizierungsmodus (SQL Server- und Windows-Authentifizierung) verwendet.
Sicherheitshinweis: Das sa-Konto ist ein bekanntes SQL Server-Konto und oft das Ziel böswilliger Benutzer. Es ist unerlässlich, für die Systemadministratoranmeldung ein sicheres Kennwort zu verwenden.
Geben Sie diesen Parameter nicht für den Windows-Authentifizierungsmodus an.[ /SQLCOLLATION=CollationName ] Gibt eine neue Sortierung auf Serverebene an. Dieser Parameter ist optional. Wenn keine Sortierung angegeben wird, wird die aktuelle Sortierung des Servers verwendet.
Wichtig: Die Änderung der Sortierung auf Serverebene ändert nicht die Sortierung vorhandener Benutzerdatenbanken. Alle neu erstellten Benutzerdatenbanken verwenden standardmäßig die neue Sortierung.
Weitere Informationen finden Sie unter Festlegen oder Ändern der Serversortierung.[ /SQLTEMPDBFILECOUNT=NumberOfFiles ] Gibt die Anzahl von tempdb
-Datendateien an. Dieser Wert kann auf bis zu 8 bzw. auf die Anzahl von Kernen erhöht werden, je nachdem, welcher Wert größer ist.
Standardwert: 8 oder die Anzahl von Kernen, je nachdem, welcher Wert niedriger ist.[ /SQLTEMPDBFILESIZE=FileSizeInMB ] Gibt die Anfangsgröße jeder tempdb
-Datendatei in MB an. Das Setup ermöglicht eine Größe von bis zu 1024 MB.
Standardwert: 8[ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] Gibt das Dateivergrößerungsinkrement jeder tempdb
-Datendatei in MB an. Der Wert 0 zeigt an, dass die automatische Vergrößerung deaktiviert ist und kein zusätzlicher Platz zulässig ist. Das Setup ermöglicht eine Größe von bis zu 1024 MB.
Standardwert: 64[ /SQLTEMPDBLOGFILESIZE=FileSizeInMB ] Gibt die Anfangsgröße der tempdb
-Protokolldatei in MB an. Das Setup ermöglicht eine Größe von bis zu 1024 MB.
Standardwert: 8.
Zulässiger Bereich: Min = 8, Max = 1024.[ /SQLTEMPDBLOGFILEGROWTH=FileSizeInMB ] Gibt das Dateivergrößerungsinkrement jeder tempdb
-Protokolldatei in MB an. Der Wert 0 zeigt an, dass die automatische Vergrößerung deaktiviert ist und kein zusätzlicher Platz zulässig ist. Das Setup ermöglicht eine Größe von bis zu 1024 MB.
Standardwert: 64
Zulässiger Bereich: Min = 8, Max = 1024.[ /SQLTEMPDBDIR=Directories ] Gibt die Verzeichnisse für tempdb
-Datendateien an. Wenn Sie mehr als ein Verzeichnis angeben, trennen Sie die Verzeichnisse mit einem Leerzeichen. Wenn mehrere Verzeichnisse angegeben sind, werden dietempdb
-Datendateien im Roundrobinverfahren auf die Verzeichnisse verteilt.
Standardwert: Systemdatenverzeichnis[ /SQLTEMPDBLOGDIR=Directory ] Gibt das Verzeichnis für die tempdb
-Protokolldatei an.
Standardwert: SystemdatenverzeichnisWenn Setup die Neuerstellung der Systemdatenbanken abgeschlossen hat, wechselt es ohne Meldungen zur Eingabeaufforderung zurück. Lesen Sie die Protokolldatei Summary.txt, um zu überprüfen, ob der Prozess erfolgreich abgeschlossen wurde. Diese Datei befindet sich unter
C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
.Das RebuildDatabase-Szenario löscht Systemdatenbanken und installiert diese neu in einem fehlerfreien Zustand. Da die Einstellung der Anzahl von
tempdb
-Dateien nicht beibehalten wird, ist der Wert der Anzahl vontempdb
-Dateien während des Setups nicht bekannt. Daher weiß das RebuildDatabase-Szenario nicht, wie vieletempdb
-Dateien wieder hinzugefügt werden müssen. Sie können den Wert der Anzahl vontempdb
-Dateien mit dem SQLTEMPDBFILECOUNT-Parameter erneut bereitstellen. Wenn der Parameter nicht bereitgestellt wird, fügt RebuildDatabase eine Standardanzahl vontempdb
-Dateien hinzu. Diese Standardanzahl vontempdb
-Dateien ist die Anzahl von CPUs oder 8, je nachdem, welche Anzahl niedriger ist.
Aufgaben nach der Neuerstellung
Nach der Neuerstellung der Datenbank müssen Sie möglicherweise die folgenden zusätzlichen Aufgaben ausführen:
Stellen Sie die letzten vollständigen Sicherungen der Datenbanken
master
,model
undmsdb
wieder her. Weitere Informationen finden Sie unter Sichern und Wiederherstellen von Systemdatenbanken (SQL Server).Wichtig
Wenn Sie die Serversortierung geändert haben, stellen Sie die Systemdatenbanken nicht wieder her. Auf diese Weise wird die neue Sortierung durch die vorherige Sortiereinstellung ersetzt.
Wenn keine Sicherung verfügbar ist oder wenn die wiederhergestellte Sicherung nicht aktuell ist, erstellen Sie alle fehlenden Einträge neu. Erstellen Sie z.B. alle fehlenden Einträge für die Benutzerdatenbanken, Sicherungsmedien, SQL Server-Anmeldenamen, Endpunkte usw. neu. Die beste Möglichkeit zur Neuerstellung der Einträge besteht darin, die ursprünglichen Skripts auszuführen, mit denen sie erstellt wurden.
Wichtig
Es wird empfohlen, Skripts vor unerlaubtem Zugriff zu schützen. Auf diese Weise können Sie verhindern, dass sie von nicht autorisierten Personen geändert werden.
Sie müssen die
distribution
Datenbank wiederherstellen, wenn die Instanz von SQL Server als Replikationsverteiler konfiguriert ist. Weitere Informationen finden Sie unter Sichern und Wiederherstellen von replizierten Datenbanken.Verschieben Sie die Systemdatenbanken an die Speicherorte, die Sie zuvor aufgezeichnet haben. Weitere Informationen finden Sie unter Verschieben von Systemdatenbanken.
Überprüfen Sie, ob die serverweiten Konfigurationswerte zu den Werten passen, die Sie zuvor aufgezeichnet haben.
Neuerstellen der Ressourcen-Datenbank
Mit der folgenden Vorgehensweise wird die resource
Systemdatenbank neu erstellt. Wenn Sie die resource
Datenbank neu erstellen, gehen alle Hotfixes verloren. Daher müssen sie noch mal angewendet werden.
Erstellen Sie die Systemdatenbank „Ressource“ neu
Starten Sie von SQL Server das Setupprogramm (
setup.exe
) aus dem Verteilermedium.Klicken Sie im linken Navigationsbereich auf Wartung und dann auf Reparieren.
Es werden Unterstützungsregeln für Setup und Dateiroutinen ausgeführt, um sicherzustellen, dass die erforderlichen Komponenten auf dem System installiert sind und dass der Computer den Setupüberprüfungsregeln erfüllt. Klicken Sie auf OK oder Installieren, um den Vorgang fortzusetzen.
Wählen Sie auf der Seite „Instanz auswählen“ die zu reparierende Instanz aus, und klicken Sie dann auf Weiter.
Die Reparaturregeln werden ausgeführt, um den Vorgang zu überprüfen. Wählen Sie zum Fortsetzen des Vorgangs Weiter aus.
Klicken Sie auf der Seite Bereit zum Reparieren auf Reparieren. Wenn die Seite Abgeschlossen angezeigt wird, wurde der Vorgang abgeschlossen.
Erstellen einer neuen msdb-Datenbank
Wenn die msdb
-Datenbank beschädigt ist und Sie keine Sicherung der msdb
-Datenbank erstellt haben, können Sie mit dem Skript instmsdb
eine neue msdb
-Datenbank erstellen.
Warnung
Beim Neuerstellen der msdb
-Datenbank mit dem instmsdb.sql
-Skript werden alle in msdb
gespeicherten Informationen wie Aufträge, Warnungen, Operatoren, Wartungspläne, Sicherungsverläufe, Einstellungen für die richtlinienbasierte Verwaltung, Datenbank-E-Mail, Leistungs-Data Warehouse usw. gelöscht.
Beenden Sie alle Dienste, die eine Verbindung mit dem Datenbank-Engine herstellen, einschließlich SQL Server-Agent, SSRS, SSIS und aller Anwendungen, die SQL Server als Datenspeicher verwenden.
Starten Sie SQL Server über die Befehlszeile mit dem Befehl:
NET START MSSQLSERVER /T3608
Weitere Informationen finden Sie unter Starten, Beenden, Anhalten, Fortsetzen und Neustarten von SQL Server-Diensten. Weitere Informationen zu Ablaufverfolgungsflag 3608 finden Sie unter TF3608.
Trennen Sie in einem weiteren Befehlszeilenfenster die
msdb
-Datenbank, indem Sie den folgenden Befehl ausführen und dabei<servername>
durch die Instanz von SQL Server ersetzen:SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
Benennen Sie in Windows Explorer die
msdb
-Datenbankdateien um. Diese befinden sich standardmäßig im Unterordner DATA der SQL Server-Instanz.Beenden Sie SQL Server-Konfigurations-Manager, und starten Sie den Datenbank-Engine Dienst normal ohne zusätzliche Ablaufverfolgungskennzeichnungen neu.
Stellen Sie in einem Befehlszeilenfenster eine Verbindung mit SQL Server her, und führen Sie folgenden Befehl aus:
SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
Ersetzen Sie
<servername>
durch die Instanz des Datenbank-Engine. Verwenden Sie den Dateisystempfad der SQL Server-Instanz. Ersetzen SieMSSQLXX.INSTANCE_NAME
außerdem durch das Verzeichnis, das Ihrer Version und Instanz entspricht.Öffnen Sie die Datei
instmsdb.out
im Windows-Editor, und prüfen Sie, ob die Ausgabe fehlerfrei ist.Wenden Sie alle auf der Instanz installierten CUs erneut an, wodurch die
msdb
Datenbank auf die aktuelle CU-Ebene aktualisiert wird.Legen Sie die in der
msdb
-Datenbank gespeicherten Benutzerinhalte wie Aufträge, Warnungen und andere Elemente erneut an.Sichern Sie die
msdb
Datenbank.
Neuerstellen der tempdb-Datenbank
Wenn die tempdb
-Datenbank beschädigt oder womöglich beschädigt ist und die Datenbank-Engine nicht startet, können Sie tempdb
neu erstellen, ohne alle Systemdatenbanken neu erstellen zu müssen.
Benennen Sie die aktuellen Dateien
tempdb.mdf
undtemplog.ldf
um, falls sie vorhanden sind.Starten Sie SQL Server von einer Eingabeaufforderung aus, indem Sie die sqlservr-Anwendung verwenden.
sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
Verwenden Sie für einen Standardinstanz-Namen
MSSQLSERVER
und für benannte InstanzenMSSQL$<instance_name>
. Ablaufverfolgungsflag 4022 deaktiviert die Ausführung von gespeicherten Startprozeduren. Dies-mSQLCMD
ermöglicht nur sqlcmd.exe, eine Verbindung mit dem Server herzustellen. Weitere Informationen finden Sie unter Andere Startup-Optionen.Hinweis
Stellen Sie sicher, dass das Eingabeaufforderungsfenster nach dem Start von SQL Server geöffnet bleibt. Das Schließen des Eingabeaufforderungsfensters beendet den Prozess.
Stellen Sie mithilfe von sqlcmd eine Verbindung mit dem Server her, und verwenden Sie dann die folgende gespeicherte Prozedur, um den Status der
tempdb
-Datenbank zurückzusetzen.exec master..sp_resetstatus tempdb
Fahren Sie den Server herunter, indem Sie im Eingabeaufforderungsfenster
Ctrl
+C
drücken.Starten Sie den SQL Server-Dienst neu. Dadurch wird ein neuer Satz von
tempdb
-Datenbankdateien erstellt und dietempdb
-Datenbank wiederhergestellt.
Problembehandlung von Fehlern bei der Neuerstellung
Syntaxfehler und andere Laufzeitfehler werden im Eingabeaufforderungsfenster angezeigt. Überprüfen Sie die SETUP-Anweisung auf folgende Syntaxfehler:
Fehlender Schrägstrich (
/
) vor jedem ParameternamenFehlendes Gleichheitszeichen (
=
) zwischen dem Parameternamen und dem ParameterwertLeerzeichen zwischen dem Parameternamen und dem Gleichheitszeichen
Kommas (
,
) oder andere Zeichen, die nicht in der Syntax angegeben sind.
Wenn der Neuerstellungsvorgang abgeschlossen ist, überprüfen Sie die SQL Server-Protokolle auf Fehler. Der Standardprotokollspeicherort ist C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
. Um die Protokolldatei zu suchen, die die Ergebnisse des Neuerstellungsprozesses enthält, wechseln Sie über eine Eingabeaufforderung zum Ordner Protokolle, und führen Sie dann findstr /s RebuildDatabase summary*.*
aus. Diese Suche führt Sie zu den Protokolldateien, die die Ergebnisse der Neuerstellung der Systemdatenbanken enthalten. Öffnen Sie die Protokolldateien, und untersuchen Sie sie auf relevante Fehlermeldungen.