SQL Server msdb Database Tables

By: Eric Blinn
Overview

istnieje wiele obiektów, które tworzą bazę danych MSDB i możliwość bezpośredniego zapytania tych tabel może być bardzo pomocna. Przyjrzymy się niektórym tabelom, które są przydatne do zapytań.

jakie są kluczowe tabele w bazie danych MSDB, które są ważne dla SQL ServerProfessionals wiedzieć o?

w MSDB jest duża liczba tabel, które powinien znać specjalista SQL Server. Ten autor napisał kilka podpowiedzi MSSQL specjalnie na ich temat. Ta wskazówka dotyczy tabel agenta SQL Server i ta wskazówka obejmuje tabele historii kopii zapasowych i przywracania.

ten samouczek podświetli kilka grup tabel MSDB, które są często wyszukiwane.

SELECT * FROM dbo.suspect_pages;

Suspect_pages pomaga śledzić uszkodzone strony danych lub te, które mogą ulec uszkodzeniu z powodu awarii podsystemu dysku. Mogą to być strony, które zostały znalezione z powodu normalnego zapytań, które miały błąd 823 lub 824, zostały znalezione przez polecenie DBCCCheck lub zostały znalezione podczas walidacji sumy kontrolnej kopii zapasowej. Bazy danych powinny być świadome tej tabeli i odpytywać ją od czasu do czasu, aby upewnić się, że nie ma naprawionych błędów.

istnieje limit 1000 wierszy dla tej tabeli. Mam nadzieję, że nie jest to liczba, która jest powszechnie testowana, ale jeśli jest starsza, wiersze nie są starzone automatycznie, aby zrobić miejsce dla nowych. SQL Server po prostu zatrzymuje zapisywanie informacji, jeśliw tabeli jest 1000 wierszy. Z tego powodu starsze wiersze powinny być usuwane przez DBA po przejrzeniu i rozwiązaniu tego, co je spowodowało. Przeczytaj więcej o thistable inthis tip!

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;

zestaw kopii zapasowych tabeli zawiera wiersz za każdym razem, gdy wykonywana jest kopia zapasowa. Tablebackupmediafamily zawiera jeden wiersz dla każdego pliku kopii zapasowej utworzonego lub dołączonego.Większość baz danych tworzy kopię zapasową jednej bazy danych na plik i pozostawia te tabele z relacją 1: 1.Jeśli używasz kopii zapasowych w paski lub umieszczasz wiele kopii zapasowych w jednym pliku, nie będą one 1: 1.

rozważ ten wynik z powyższego zapytania z kopii zapasowej w paski.

szczegóły kopii zapasowej

istnieją 2 wiersze, ale tylko jeden identyfikator zestawu kopii zapasowej, numer 1. Wskazuje to, że istnieje tylko jedna kopia zapasowa. Kopia zapasowa została wysłana na ten sam identyfikator zestawu nośników, 1, ale ten zestaw zawiera 2 numery sekwencyjne. Oznacza to, że aby zakończyć restoreof bazy danych testtde oba pliki będą potrzebne i muszą być wymienione.

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';

teraz rozważ ten wynik ustawiony dla serii kopii zapasowych udostępniających pojedynczy plik.

szczegóły kopii zapasowej

istnieją 2 różne zestawy kopii zapasowych, 2 i 3, ale jeden zestaw nośników i pojedyncza nazwa pliku. Oznacza to, że istnieje wiele kopii zapasowych dzielących jeden plik. Oba wiersze mają sekwencję 1, co oznacza, że nie ma pasków dla obu kopii zapasowych. W tym przypadku kolumna pozycji staje się ważna. „Plik” 1 będzie kolejną kopią zapasową testtde, podczas gdy „plik” 2 będzie kopią zapasową MSDB.

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

ta tabela rejestruje wszystkie zdarzenia związane z usługą dbmail. Jest to ta sama informacja, którą można znaleźć w SSMS, klikając menu kontekstowe „View Database Mail Log”.

ten zrzut ekranu pokazuje opcję menu kontekstowego wcześniej wspomnianą w Management-Database Mail-View Database Mail Log
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;

ta grupa tabel rejestruje Ustawienia DBMailprofile i konta. Tabela sysmail_profile zawiera jeden wiersz perprofile, podczas gdy sysmail_account zawiera wiersz dla każdego konta. Każdy wiersz w tabeli sysmail_profileaccount dopasowuje 1 profil do 1 konta. Pozwala to na wiele relacji między profilami i kontami.

ten przykładowy wynik pokazuje 2 profilyz jednym kontem.

ten zrzut ekranu pokazuje Profile 2 ponumerowane 1 i 2 dzielące jedno konto z identyfikatorem konta 1.

Czy Mogę zobaczyć kod tabel i widoków systemowych w MSDB, a jeśli tak, to jak?

tabele systemowe w MSDB można przeglądać za pomocą sp_help lub za pomocą opcji „Design” contextmenu w Eksploratorze obiektów.

exec sp_help sysjobs;
ten zrzut ekranu pokazuje wyjście poprzedniego polecenia TSQL. Pokazuje szczegóły tabeli sysjobs z MSDB.

widoki nie mają opcji Modyfikuj lub „script as” w menu kontekstowym, jak userviews, ale nadal mogą być przeglądane za pomocą sp_helptext.

exec sp_helptext sysjobs_view;
ten zrzut ekranu pokazuje wyjście kodu TSQL powyżej. Jest to instrukcja "CREATE VIEW", która pokazuje definicję widoku.

Czy Mogę zmienić te obiekty w bazie danych MSDB?

SQL Server pozwoli na zmianę tabel i widoków systemowych, ale nie powinno się tego robić. Kreatory, ekrany SSMS i ekrany usługi Azure Data Studio wskazują, że obiekty te zachowują się w określony sposób, a ich zmiana może spowodować ich niepowodzenie.

dla indeksów nieklastrowych można zrobić wyjątek. Na instancji z wieloma bazami danych i dużą ilością historii kopii zapasowych lub wieloma zadaniami agenta SQL Server z dużą ilością historii, niektóre zapytania monitorujące mogą działać nadmiernie wolno, a dodawanie nieklastrowych indeksów do obsługi raportowania lub innych operacji może rozwiązać ten problem.

Czy Mogę przechowywać własne obiekty w bazie danych MSDB?

SQL Server pozwoli na dodawanie obiektów do bazy danych MSDB, ale nie powinno to być dozwolone. Zamiast tego, Zachowaj specjalną bazę danych użytkownika o nazwie „_DBA”, w której administratorzy mogą przechowywać obiekty używane do zarządzania instancją.

Ostatnia Aktualizacja: 31.03.2020

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.