SQL Server MSDB-Datenbanktabellen

Von: Eric Blinn
Übersicht

Es gibt viele Objekte, aus denen die MSDB-Datenbank besteht, und es kann sehr hilfreich sein, einige dieser Tabellen direkt abzufragen. Wir werden uns einige Dertabellen ansehen, die für Abfragen nützlich sind.

Was sind die Schlüsseltabellen in der MSDB-Datenbank, die für SQL ServerProfessionals wichtig sind?

In MSDB gibt es eine große Anzahl von Tabellen, die ein SQL Server-Experte kennen sollte. Dieser Autor hat ein paar MSSQLTips speziell über sie geschrieben. In diesem Tipp dreht sich alles um die SQL Server-Agententabellen, und dieser Tipp behandelt die Sicherungs- und Wiederherstellungsverlaufstabellen.

In diesem Lernprogramm werden einige Gruppen von MSDB-Tabellen hervorgehoben, die häufig abgefragt werden.

SELECT * FROM dbo.suspect_pages;

Suspect_pages hilft Spur korrupte Datenseiten oder solche mit dem Potenzial forcorruption aufgrund eines fehlerhaften Disk-Subsystem. Dies können Seiten sein, die aufgrund normaler Abfragen gefunden wurden, die einen 823- oder 824-Fehler aufwiesen, von einem DBCCCheck-Befehl gefunden wurden oder während einer Backup-Prüfsummenüberprüfung gefunden wurden. DBAs sollten sich dieser Tabelle bewusst sein und sie gelegentlich abfragen, um sicherzustellen, dass keine unkorrigierten Fehler vorliegen.

Es gibt ein Limit von 1000 Zeilen für diese Tabelle. Hoffentlich ist das keine Zahl, die allgemein getestet wird, aber wenn es ältere Zeilen sind, werden sie nicht automatisch gealtert, um Platz für neue zu schaffen. SQL Server stoppt einfach die Aufzeichnung von Informationen, wennEs gibt 1000 Zeilen in der Tabelle. Aus diesem Grund sollten ältere Zeilen von einem DBA gelöscht werden, nachdem überprüft und behoben wurde, was sie verursacht hat. Lesen Sie mehr über thistable indieser Tipp!

SELECT backup_set_id, database_name, bset.media_set_id, position, family_sequence_number, physical_device_nameFROM msdb.dbo.backupset bset INNER JOIN backupmediafamily bfam ON bset.media_set_id = bfam.media_set_id;

Die Tabelle Backupset enthält jedes Mal eine Zeile, wenn eine Sicherung erstellt wird. Die tablebackupmediafamily enthält eine Zeile für jede erstellte oder angehängte Sicherungsdatei.Die meisten DBAs sichern eine Datenbank pro Datei und belassen diese Tabellen mit einer 1: 1-Beziehung.Wenn Sie Striped-Backups verwenden oder mehrere Backups in eine einzige Datei packen, sind sie nicht 1: 1.

Betrachten Sie diese Ergebnismenge aus der obigen Abfrage aus einer gestreiften Sicherung.

Backup-Details

Es gibt 2 Zeilen, aber nur eine einzige Backup-Set-ID, Nummer 1. Dies zeigt anEs gibt nur ein Backup. Die Sicherung wurde an dieselbe Mediensatz-ID 1 gesendet, aber dieser Satz enthält 2 Sequenznummern. Dies bedeutet, dass für die Wiederherstellung der Datenbank testtde beide Dateien benötigt werden und aufgelistet werden müssen.

RESTORE HEADERONLY FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\Stripe1.bak',DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\Stripe2.bak';

Betrachten Sie nun diese Ergebnismenge für eine Reihe von Sicherungen, die eine einzelne Datei gemeinsam nutzen.

Sicherungsdetails

Es gibt 2 verschiedene Sicherungssätze, 2 und 3, aber einen einzelnen Mediensatz und einen einzelnen Dateinamen. Dies zeigt an, dass es mehrere Backups gibt, die sich eine Singlefile teilen. Beide Zeilen haben eine Sequenz von 1, die angibt, dass für beide Sicherungen kein Stripingfor vorhanden ist. In diesem Fall wird die Positionsspalte wichtig. „DATEI“ 1 ist ein weiteres Testtde-Backup, während „DATEI“ 2 ein MSDB-Backup ist.

RESTORE HEADERONLY FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\MultiBackupFile.bak'WITHH FILE = 1;RESTORE HEADERONLY FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\MultiBackupFile.bak'WITH FILE = 2;

SELECT * FROM ..;

Diese Tabelle zeichnet alle dbmail-bezogenen Ereignisse auf. Es sind die gleichen Informationen, die Sie in SSMS finden, indem Sie auf das Kontextmenü „Datenbank-Mailprotokoll anzeigen“ klickenoption.

Dieser Screenshot zeigt die Kontextmenüoption, die zuvor unter Management - Database Mail - View Database Mail Log erwähnt wurde
SELECT sp.profile_id, sp.name, spa.account_id, sa.name, sa.email_address, sa.display_name, ISNULL(spp.is_default, 0) IsDefaultProfileFROM . sp INNER JOIN . spa ON sp.profile_id = spa.profile_id INNER JOIN . sa ON spa.account_id = sa.account_id LEFT OUTER JOIN . spp ON sp.profile_id = spp.profile_id;

Diese Gruppe von Tabellen zeichnet die DBMailprofile- und Kontoeinstellungen auf. Die Tabelle sysmail_profile enthält eine Zeile pro Profil, während sysmail_account für jedes Konto eine Zeile enthält. Jede Zeile in der Tabelle sysmail_profileaccount entspricht 1 Profil 1 Konto. Dies ermöglicht eine Viele-zu-Viele-Beziehung zwischen Profilen und Konten.

Diese Beispielausgabe zeigt 2 Profile, die sich ein einzelnes Konto teilen.

Dieser Screenshot zeigt 2 Profile mit den Nummern 1 und 2, die sich ein einzelnes Konto mit der Konto-ID 1 teilen.

Kann ich den Code für die Systemtabellen und -ansichten in MSDB sehen und wenn ja, wie?

Die Systemtabellen in MSDB können mit sp_help oder mit der Kontextmenüoption „Design“ im Objekt-Explorer angezeigt werden.

exec sp_help sysjobs;
 Dieser Screenshot zeigt die Ausgabe des vorherigen TSQL-Befehls. Es zeigt die Details der Sysjobs-Tabelle aus MSDB.

Die Ansichten haben in ihrem Kontextmenü keine Option Ändern oder „Skript als“ wie userviews, aber sie können weiterhin mit sp_helptext angezeigt werden.

exec sp_helptext sysjobs_view;
 Dieser Screenshot zeigt die Ausgabe des obigen TSQL-Codes. Es ist eine "CREATE VIEW" -Anweisung, die die Ansichtsdefinition anzeigt.

Kann ich diese Objekte in der MSDB-Datenbank ändern?

SQL Server erlaubt es, die Systemtabellen und Ansichten zu ändern, aber dies sollte absolut nicht getan werden. Die Assistenten, SSMS-Bildschirme und Azure Data Studio-Bildschirme erwarten, dass sich diese Objekte auf eine bestimmte Weise verhalten.

Für nicht gruppierte Indizes kann eine Ausnahme gemacht werden. Auf einer Instanz withmany Datenbanken und viele Backup-Historie oder viele SQL Server-Agent-Jobs mit einer großen Menge an Geschichte, einige Überwachungsabfragen können am Ende unerschwinglich slowand laufen nicht-Clustered Indizes Hinzufügen Berichterstattung oder andere Operationen zu unterstützen, kann solvethat Problem.

Kann ich meine eigenen Objekte in der MSDB-Datenbank speichern?

SQL Server erlaubt das Hinzufügen von Objekten zur MSDB-Datenbank, dies sollte jedoch wahrscheinlich nicht zulässig sein. Bewahren Sie stattdessen eine spezielle Benutzerdatenbank mit dem Namen „_DBA“ auf, in der Administratoren Objekte aufbewahren können, die zum Verwalten der Instanz verwendet werden.

Letzte Aktualisierung: 31.3.2020

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.