Automatyzacja strony DBCC

w 2006 roku Paul Randal udokumentował stronę DBCC na swoim blogu Microsoft pod adresem https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx. W swoim poście zauważysz, że aby zwrócić wyjście ze strony DBCC na ekran, musisz najpierw włączyć flagę śledzenia 3604. Powyższy wpis na blogu pokazuje kilka przykładów wyników i wykorzystania ich do dalszych działań. Niestety, ta metoda wymaga ręcznej interwencji, Aby uzyskać niezbędne dane ze strony w celu dalszej pracy z nią.

wiesz, na pewno byłoby miło, gdyby można było usunąć ręczną interwencję i całkowicie zautomatyzować zadanie, którego szukasz. Ten wpis na blogu pokaże Ci, jak można to zrobić i poda kilka przykładów.

w moim ostatnim wpisie na blogu wprowadziłem opcjonalne ustawienie dla kilku komend DBCC: z TABLERESULTS. Zwraca to dane wyjściowe w formacie tabelarycznym, w sposób pozwalający na ich wykorzystanie. Jak się okazuje, to opcjonalne ustawienie działa również ze stroną DBCC. Możesz to zobaczyć, sprawdzając stronę informacji o bazie danych (Strona 9) głównej bazy danych:

kod źródłowy
strona DBCC ('master', 1, 9, 3) z tabelami;

polecenie to, które można uruchomić bez znacznika trace, zwraca dane w zakładce w 4 kolumnach: ParentObject, Object, Field oraz VALUE. Jak się okazuje, niniejsza strona każdej bazy danych zawiera na sobie sporo interesujących informacji. Zautomatyzujmy pobieranie określonej informacji z tej strony:

kod źródłowy
IF OBJECT_ID ('tempdb.dbo.#DBCCPAGE') IS NOT NULL DROP TABLE #DBCCPAGE;CREATE TABLE #DBCCPAGE ( ParentObject VARCHAR(255), VARCHAR(255), Field VARCHAR(255), VARCHAR(255));INSERT INTO #DBCCPAGEEXECUTE ('DBCC PAGE ("master", 1, 9, 3) WITH TABLERESULTS;'); SELECT LASTGOODDBCCDATE = CONVERT(DATETIME, VALUE)FROM #dbccpagewhere field = 'DBI_DBCCLASTKNOWNGOOD';

ten wspaniały fragment kodu zwraca ostatni raz, gdy pomyślnie sprawdzono DBCC CHECKDB w głównej bazie danych. Jakie to słodkie? Gdy odkryjesz serwer, na którym zadanie CHECKDB nie powiodło się do tego stopnia, że zadanie zawiedziało tylko wpisy w historii zadań, możesz teraz dowiedzieć się, jak długo minęło od ostatniego pomyślnego uruchomienia.

„sztuczką” do wykonania tej pracy jest hermetyzacja polecenia DBCC jako ciągu znaków i wywołanie go za pomocą funkcji EXECUTE (). Jest to używane jako część instrukcji INSERT INTO / EXECUTE, tak że wyniki ze strony DBCC są wstawiane do tabeli (w tym przypadku używana jest tabela tymczasowa, chociaż można również użyć zmiennej table lub tabeli stałej). Istnieją trzy proste kroki do tego procesu:

  1. Utwórz tabelę (stałą / tymczasową) lub zmienną tabeli, aby utrzymać wynik.
  2. wstaw do tej tabeli wyniki instrukcji DBCC PAGE za pomocą INSERT INTO / EXECUTE.
  3. Wybierz dane, których szukasz z tabeli.

korzystając z kursora, możesz łatwo przeglądać wszystkie bazy danych na swojej instancji, aby uzyskać, Kiedy ostatnio pomyślnie wykonali DBCC CHECKDB. Poniżej wykorzystuje sp_MSforeachdb (który sam używa kursora do obracania się przez wszystkie bazy danych), aby to zrobić:

kod źródłowy
IF OBJECT_ID ('tempdb.dbo.#DBCCPAGE') nie jest tabelą null DROP # DBCCPAGE;jeśli OBJECT_ID ('tempdb.dbo.# CheckDBDates') nie jest tabelą null DROP # CheckDBDates;CREATE TABLE #DBCCPAGE ( ParentObject VARCHAR(255), VARCHAR(255), Field VARCHAR(255), VARCHAR(255));CREATE TABLE #CheckDBDates ( database_name sysname, LastCheckDB DATETIME); EXECUTE sp_MSforeachdb 'TRUNCATE TABLE #DBCCPAGE;INSERT INTO #DBCCPAGE EXECUTE (''DBCC PAGE (''''?'''', 1, 9, 3) WITH TABLERESULTS;'');INSERT INTO #CheckDBDatesSELECT ''?'', CONVERT(DATETIME, VALUE)FROM #DBCCPAGEWHERE Field = ''dbi_dbccLastKnownGood'';'; SELECT database_name, LastCheckDBFROM #CheckDBDates;

i tutaj mamy każdą bazę danych na Twojej instancji, i datę, kiedy DBCC CHECKDB został ostatnio pomyślnie uruchomiony przeciwko niemu-cóż, przynajmniej dla baz danych, których sp_MSforeachdb nie pominął (zobacz https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/, aby uzyskać więcej informacji na ten temat).

podsumowując, korzystając z opcji” WITH TABLERESULTS ” DBCC, możemy zautomatyzować procesy, które używają strony DBCC, zamiast wymagać ręcznej interwencji, aby przejść przez to.

w następnych kilku odsłonach przyjrzymy się innym zastosowaniom używania „WITH TABLERESULTS” do automatyzacji wyjścia DBCC.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.