Teilen über


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.

  1. Zeichnen Sie alle serverweiten Konfigurationswerte auf.

    SELECT * FROM sys.configurations;
    
  2. 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;
    
  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 die aktuelle Sicherung der Datenbanken master, model und msdb.

  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. Überprüfen Sie, ob Kopien der Daten und Protokollvorlagendateien der Datenbanken master, model und msdb 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 (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 zu setup\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 resourceDatenbank 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

  1. 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 Server C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  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 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 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 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 von tempdb-Dateien während des Setups nicht bekannt. Daher weiß das RebuildDatabase-Szenario nicht, wie viele tempdb-Dateien wieder hinzugefügt werden müssen. Sie können den Wert der Anzahl von tempdb-Dateien mit dem SQLTEMPDBFILECOUNT-Parameter erneut bereitstellen. Wenn der Parameter nicht bereitgestellt wird, fügt RebuildDatabase eine Standardanzahl von tempdb-Dateien hinzu. Diese Standardanzahl von tempdb-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 und msdb 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

  1. Starten Sie von SQL Server das Setupprogramm (setup.exe) aus dem Verteilermedium.

  2. Klicken Sie im linken Navigationsbereich auf Wartung und dann auf Reparieren.

  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. Klicken Sie auf OK oder Installieren, um den Vorgang fortzusetzen.

  4. Wählen Sie auf der Seite „Instanz auswählen“ die zu reparierende Instanz aus, und klicken Sie dann auf Weiter.

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

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

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

  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. Weitere Informationen zu Ablaufverfolgungsflag 3608 finden Sie unter TF3608.

  3. 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"
    
  4. Benennen Sie in Windows Explorer diemsdb-Datenbankdateien um. Diese befinden sich standardmäßig im Unterordner DATA der SQL Server-Instanz.

  5. Beenden Sie SQL Server-Konfigurations-Manager, und starten Sie den Datenbank-Engine Dienst normal ohne zusätzliche Ablaufverfolgungskennzeichnungen neu.

  6. 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 Sie MSSQLXX.INSTANCE_NAME außerdem durch das Verzeichnis, das Ihrer Version und Instanz entspricht.

  7. Öffnen Sie die Datei instmsdb.out im Windows-Editor, und prüfen Sie, ob die Ausgabe fehlerfrei ist.

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

  9. Legen Sie die in der msdb-Datenbank gespeicherten Benutzerinhalte wie Aufträge, Warnungen und andere Elemente erneut an.

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

  1. Benennen Sie die aktuellen Dateien tempdb.mdf und templog.ldf um, falls sie vorhanden sind.

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

  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. Fahren Sie den Server herunter, indem Sie im Eingabeaufforderungsfenster Ctrl+C drücken.

  5. Starten Sie den SQL Server-Dienst neu. Dadurch wird ein neuer Satz von tempdb-Datenbankdateien erstellt und die tempdb-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 Parameternamen

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

  • Leerzeichen 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.