Neuerstellen von Systemdatenbanken

Gilt für:SQL Server

Systemdatenbanken müssen neu erstellt werden, um Beschädigungsprobleme in den Master-, Modell-, Msdb- oder Ressourcensystemdatenbanken zu beheben oder die Standardsortierung auf Serverebene zu ändern. Dieser Artikel enthält schrittweise Anleitungen zum Neuerstellen von Systemdatenbanken in SQL Server.

Beschränkungen und Einschränkungen

Wenn die masterDatenbanken , model, msdbund tempdb Systemdatenbanken neu erstellt werden, werden die Datenbanken verworfen 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. Sie können beispielsweise benutzerdefinierte Objekte in der master Datenbank, geplante Aufträge in msdboder Änderungen an den Standarddatenbankeinstellungen in der model Datenbank haben.

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.

  1. Zeichnen Sie alle serverweiten Konfigurationswerte auf.

    SELECT * FROM sys.configurations;
    
  2. Notieren Sie alle Hotfixes, die auf die Instanz von SQL Server 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;
    
  3. 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'));
    
  4. Suchen Sie nach der aktuellen Sicherung der masterDatenbanken , modelund msdb verwenden Sie diese.

  5. Wenn die Instanz von SQL Server als Replikationsverteiler konfiguriert ist, suchen Sie die aktuelle Sicherung der distribution Datenbank.

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

  7. Stellen Sie sicher, dass Kopien der masterDateien , modelmsdb Daten und Protokolldateien auf dem lokalen Server vorhanden sind. Der Standardspeicherort für die Vorlagendateien ist C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates (wo <xx> befindet sich die version, 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 zu setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates.

Neuerstellen von Systemdatenbanken

Im folgenden Verfahren werden die masterDatenbanken , model, , msdbund tempdb Systemdatenbanken neu erstellt. Sie können die Systemdatenbanken nicht angeben, die neu erstellt werden sollen. Bei gruppierten Instanzen muss diese Prozedur auf dem aktiven Knoten ausgeführt werden, und die SQL Server-Ressource in der entsprechenden Clusteranwendungsgruppe muss offline ausgeführt werden, bevor die Prozedur ausgeführt wird.

Mit diesem Verfahren wird die resource Datenbank nicht neu erstellt. Weitere Informationen finden Sie im Abschnitt "Neuerstellen der Ressourcensystemdatenbank " weiter unten in diesem Artikel.

Neuerstellen von Systemdatenbanken für eine Instanz von SQL Server

  1. Fügen Sie das SQL Server-Installationsmedium in das Laufwerk ein, oder ändern Sie über eine Eingabeaufforderung Verzeichnisse in den Speicherort der setup.exe Datei auf dem lokalen Server. Für SQL Server 2022 (16.x) lautet C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022der Standardspeicherort auf dem Server.

  2. 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 Setup ohne Benutzeroberfläche ausgeführt werden soll.
    /ACTION=REBUILDDATABASE Gibt an, dass Setup die Systemdatenbanken neu erstellen soll.
    /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 ] Gibt das Kennwort für das SQL Server sa-Konto an. Dieser Parameter ist erforderlich, wenn die Instanz den Modus "Gemischte Authentifizierung" (SQL Server und Windows-Authentifizierung) verwendet.

    Sicherheitshinweis: Das Sa-Konto ist ein bekanntes SQL Server-Konto und wird häufig von böswilligen Benutzern verwendet. Es ist wichtig, dass Sie ein sicheres Kennwort für die sa-Anmeldung 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: Das Ändern 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 der 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 die tempdb-Datendateien im Roundrobinverfahren auf die Verzeichnisse verteilt.

    Standardwert: Systemdatenverzeichnis
    [ /SQLTEMPDBLOGDIR=Directory ] Gibt das Verzeichnis für die tempdb Protokolldatei an.

    Standardwert: Systemdatenverzeichnis
  3. Wenn 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.

  4. Das Szenario "RebuildDatabase" löscht Systemdatenbanken und installiert sie erneut in einem sauberen Zustand. Da die Einstellung der Dateianzahl nicht beibehalten wird, wird der Wert der Anzahl der tempdb Dateien während des tempdb Setups nicht bekannt. Daher weiß das ebuildDatabase-Szenario nicht, wie tempdb viele Dateien gelesen werden sollen. Sie können den Wert der Anzahl der tempdb Dateien erneut mit dem PARAMETER "SQLTEMPDBFILECOUNT" angeben. Wenn der Parameter nicht angegeben wird, fügt "RebuildDatabase" eine Standardanzahl von tempdb Dateien hinzu, bei denen es sich um so viele tempdb Dateien wie die CPU-Anzahl oder 8 handelt, je nachdem, welcher Wert 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 Ihre neuesten vollständigen Sicherungen der master, modelund msdb Datenbanken 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 eine Sicherung nicht verfügbar ist oder die wiederhergestellte Sicherung nicht aktuell ist, erstellen Sie alle fehlenden Einträge erneut. Erstellen Sie beispielsweise alle fehlenden Einträge für Ihre Benutzerdatenbanken, Sicherungsgeräte, SQL Server-Anmeldungen, Endpunkte usw. erneut. 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.

  • Wenn die Instanz von SQL Server als Replikationsverteiler konfiguriert ist, müssen Sie die distribution Datenbank wiederherstellen. 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 resource Datenbank

Im folgenden Verfahren wird die resource Systemdatenbank neu erstellt. Wenn Sie die resource Datenbank neu erstellen, gehen alle Hot Fixes verloren und müssen daher erneut angewendet werden.

Neuerstellen der resource Systemdatenbank

  1. Starten Sie das SQL Server-Setupprogramm (setup.exe) über die Verteilungsmedien.

  2. Wählen Sie im linken Navigationsbereich "Wartung" und dann " Reparieren" aus.

  3. 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. Wählen Sie "OK" oder "Installieren" aus, um den Vorgang fortzusetzen.

  4. Wählen Sie auf der Seite "Instanz auswählen" die instanz aus, die repariert werden soll, und wählen Sie dann "Weiter" aus.

  5. Die Reparaturregeln werden ausgeführt, um den Vorgang zu überprüfen. Wählen Sie zum Fortsetzen des Vorgangs Weiter aus.

  6. Wählen Sie auf der Seite "Bereit zum Reparieren" die Option "Reparieren" aus. Wenn die Seite Abgeschlossen angezeigt wird, wurde der Vorgang abgeschlossen.

Erstellen einer neuen msdb Datenbank

Wenn die msdb Datenbank beschädigt oder vermutet wird und Sie keine Sicherung der msdb Datenbank haben, können Sie ein neues msdb erstellen, indem Sie das instmsdb Skript verwenden.

Warnung

Wenn Sie die msdb Datenbank mithilfe des instmsdb.sql Skripts neu erstellen, werden alle Informationen, die in msdb Aufträgen, Warnungen, Operatoren, Wartungsplänen, Sicherungsverlauf, Richtlinienbasierte Verwaltungseinstellungen, Datenbank-E-Mail, Performance Data Warehouse usw. gespeichert sind, beseitigt.

  1. Beenden Sie alle Dienste, die eine Verbindung mit dem Datenbankmodul herstellen, einschließlich SQL Server-Agent, SSRS, SSIS und allen Anwendungen, die SQL Server als Datenspeicher verwenden.

  2. 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. Informationen zur Ablaufverfolgungskennzeichnung 3608 finden Sie unter TF3608.

  3. Trennen Sie die msdb Datenbank in einem anderen Befehlszeilenfenster, indem Sie den folgenden Befehl ausführen und durch die Instanz von SQL Server ersetzen <servername> :

    SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
    
  4. Benennen Sie die Datenbankdateien mithilfe des Windows-Explorers um msdb . Standardmäßig befinden sich diese im DATA-Unterordner für die SQL Server-Instanz.

  5. Beenden Und starten Sie den Datenbankmoduldienst mit SQL Server Configuration Manager ohne zusätzliche Ablaufverfolgungskennzeichnungen, und starten Sie den Dienst neu.

  6. Stellen Sie in einem Eingabeaufforderungsfenster eine Verbindung mit SQL Server her, und führen Sie den 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 durch <servername> die Instanz des Datenbankmoduls. Verwenden Sie den Dateisystempfad der Instanz von SQL Server. Ersetzen Sie MSSQLXX.INSTANCE_NAME außerdem durch das Verzeichnis, das Ihrer Version und Instanz entspricht.

  7. Öffnen Sie die Datei mit dem Windows Editor, instmsdb.out und überprüfen Sie die Ausgabe auf Fehler.

  8. Wenden Sie alle auf der Instanz installierten CUs erneut an, wodurch die msdb Datenbank auf die aktuelle CU-Ebene aktualisiert wird.

  9. Erstellen Sie den in der msdb Datenbank gespeicherten Benutzerinhalt neu, z. B. Aufträge, Warnungen und andere Elemente.

  10. Sichern Sie die msdb Datenbank.

Neuerstellen der tempdb Datenbank

Wenn die tempdb Datenbank beschädigt oder verdächtig ist und das Datenbankmodul nicht gestartet werden kann, können Sie neu erstellen tempdb , ohne dass alle Systemdatenbanken neu erstellt werden müssen.

  1. Benennen Sie die aktuellen tempdb.mdf dateien um templog.ldf , wenn sie nicht fehlen.

  2. Starten Sie SQL Server über eine Eingabeaufforderung mithilfe des folgenden Befehls.

    sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
    

    Verwenden Sie für einen Standardinstanznamen MSSQLSERVERdie Verwendung für benannte Instanzen MSSQL$<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 "Weitere Startoptionen".

    Hinweis

    Stellen Sie sicher, dass das Eingabeaufforderungsfenster nach dem Start von SQL Server geöffnet bleibt. Das Schließen des Eingabeaufforderungsfensters beendet den Prozess.

  3. 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
    
  4. Beenden Sie den Server, indem Sie in das Eingabeaufforderungsfenster drücken Ctrl+C .

  5. Starten Sie den SQL Server-Dienst neu. Dadurch wird eine neue Gruppe von tempdb Datenbankdateien erstellt und die tempdb Datenbank wiederhergestellt.

Problembehandlung bei Neuerstellungsfehlern

Syntaxfehler und andere Laufzeitfehler werden im Eingabeaufforderungsfenster angezeigt. Überprüfen Sie die SETUP-Anweisung auf folgende Syntaxfehler:

  • Fehlendes Schrägstrichzeichen (/) vor jedem Parameternamen.

  • Fehlendes Gleichheitszeichen (=) zwischen dem Parameternamen und dem Parameterwert.

  • Leerzeichen zwischen dem Parameternamen und dem Gleichheitszeichen

  • Vorhandensein von Kommas (,) oder anderen Zeichen, die in der Syntax nicht angegeben sind.

Überprüfen Sie nach Abschluss des Neuerstellungsvorgangs die SQL Server-Protokolle auf Fehler. Der Standardspeicherort des Protokolls lautet 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.

Siehe auch