automatisera DBCC sida

långt tillbaka i 2006 dokumenterade Paul Randal DBCC sida på sin Microsoft blogg på https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx. I sitt inlägg kommer du att märka att för att returnera utmatningen från DBCC-sidan till skärmen måste du aktivera trace flag 3604 först. Ovanstående blogginlägg visar några exempel på resultaten och använder dem för ytterligare åtgärder. Tyvärr kräver denna metod manuellt ingripande för att få nödvändiga data från sidan för att kunna arbeta med det vidare.

du vet, det skulle säkert vara trevligt om det manuella ingreppet kunde tas bort och att helt automatisera den uppgift du letar efter. Detta blogginlägg kommer att visa dig hur detta kan göras, och det kommer att ge några exempel på att göra det.

i mitt senaste blogginlägg introducerade jag en valfri inställning till flera DBCC-kommandon: med TABELLRESULTAT. Detta returnerar utmatningen i tabellformat, på ett sätt som gör att utmatningen kan konsumeras. Som det visar sig fungerar den här valfria inställningen också med DBCC-sidan. Du kan se detta genom att undersöka databasinformationssidan (sidan 9) i huvuddatabasen:

källkod
DBCC-sida ('master', 1, 9, 3) med TABELLRESULTAT;

detta uttalande, som kan köras utan spårflaggan, Returnerar data på sidan i 4 kolumner: ParentObject, Object, Field and VALUE. Som det visar sig har den här sidan i varje Databas mycket intressant information om den. Låt oss Automatisera att ta en specifik information från den här sidan:

källkod
om OBJECT_ID ('tempdb.dbo.#DBCCPAGE') är inte NULL DROP tabell #DBCCPAGE;Skapa tabell #DBCCPAGE ( ParentObject VARCHAR(255), Varchar(255), fält VARCHAR(255), varchar(255));infoga i #DBCCPAGEEXECUTE ('DBCC-sida ("master", 1, 9, 3) med TABLEERESULTS;'); välj LastGoodDBCCDate = konvertera(DATETIME, värde)från # DBCCPAGEWHERE field = 'DBI_DBCCLASTKNOWNGOOD';

denna underbara kodavsnitt returnerar sista gången en framgångsrik DBCC CHECKDB kördes mot huvuddatabasen. Hur sött är det? När du upptäcker en server där CHECKDB jobbet har misslyckats till den grad att jobbet bara har misslyckats poster i jobbhistoriken, kan du nu ta reda på hur länge det har varit sedan det senast kördes framgångsrikt.

”tricket” för att göra detta arbete är att inkapsla DBCC-kommandot som en sträng och att kalla det med funktionen EXECUTE (). Detta används som en del av en INSERT INTO / EXECUTE-sats, så att resultaten från DBCC-sidan infogas i en tabell (i detta fall används en tillfällig tabell, även om en tabellvariabel eller permanent tabell också kan användas). Det finns tre enkla steg till denna process:

  1. skapa en tabell (permanent / tillfällig) eller tabellvariabel för att hålla utmatningen.
  2. infoga i denna tabell resultaten av DBCC sida uttalande med hjälp av infoga i / EXECUTE.
  3. Välj de data du letar efter från tabellen.

genom att använda en markör kan du enkelt snurra igenom alla databaser på din instans för att få när de senast hade en framgångsrik DBCC CHECKDB-körning mot dem. Följande använder sp_MSforeachdb (som själv använder en markör för att snurra genom alla databaser) för att göra just detta:

källkod
om OBJECT_ID ('tempdb.dbo.#DBCCPAGE') är inte NULL DROP TABLE #DBCCPAGE;om OBJECT_ID('tempdb.dbo.# CheckDBDates' ) är inte NULL DROP TABLE #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;

och här har vi varje databas på din instans, och det datum då DBCC CHECKDB senast kördes framgångsrikt mot det – ja, åtminstone för de databaser som sp_MSforeachdb inte hoppade över (se https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/ för mer information om detta).

Sammanfattningsvis, genom att använda alternativet” med TABELLRESULTAT ” i DBCC, kan vi automatisera processer som använder DBCC-sidan, istället för att behöva manuellt ingripande för att arbeta dig igenom detta.

i de närmaste avbetalningarna tittar vi på andra användningar av att använda ”med TABELLRESULTAT” för att automatisera DBCC-utdata.

Lämna ett svar

Din e-postadress kommer inte publiceras.