Automating DBCC Page

in 2006 documenteerde Paul Randal DBCC PAGE op zijn Microsoft blog op https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx. In zijn bericht, zult u merken dat om de uitvoer van DBCC pagina terug te keren naar het scherm, moet u trace vlag 3604 eerst inschakelen. De bovenstaande blog post toont een paar voorbeelden van de resultaten en het gebruik ervan voor verdere acties. Helaas, deze methode vereist handmatige interventie om de nodige gegevens van de pagina te krijgen om verder te werken met het.

Weet je, het zou zeker leuk zijn als de handmatige interventie kon worden verwijderd en om de taak die u zoekt volledig te automatiseren. Deze blogpost gaat u laten zien hoe dit kan worden gedaan, en het zal een paar voorbeelden van te doen geven.

in mijn laatste blogpost heb ik een optionele instelling geïntroduceerd voor verschillende DBCC commando ‘ s: met TABLERESULTS. Dit geeft de uitvoer in tabelvorm terug, op een manier die het mogelijk maakt de uitvoer te verbruiken. Zoals blijkt, deze optionele instelling werkt ook met DBCC pagina. U kunt dit zien door het onderzoeken van de database-informatie op (pagina 9) van de master database:

Broncode
DBCC-PAGINA ('master', 1, 9, 3) MET TABLERESULTS;

Deze verklaring, die kan worden uitgevoerd zonder de traceringsvlag, retourneert de gegevens op de pagina in 4 kolommen: ParentObject, Object -, Veld-en WAARDE. Het blijkt dat deze specifieke pagina van elke database veel interessante informatie bevat. Laten we automatiseren grijpen van een specifiek stukje informatie uit deze pagina:

broncode:
 IF OBJECT_ID ('tempdb.dbo.#DBCCPAGE') is geen NULL DROP TABLE #DBCCPAGE;CREATE TABLE #DBCCPAGE ( Parenttobject 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_dbcclast KNOWNGOOD";

dit prachtige fragment van code geeft de laatste keer dat een succesvolle DBCC CHECKDB werd uitgevoerd tegen de master database. Hoe lief is dat? Wanneer u een server ontdekt waar de CHECKDB-taak heeft gefaald tot het punt dat de taak alleen mislukte items in de taakgeschiedenis, kunt u nu achterhalen hoe lang het is geleden dat het voor het laatst succesvol werd uitgevoerd.

de “truc” om dit te laten werken is om het DBCC commando als een string in te kapselen, en het aan te roepen met de EXECUTE () functie. Dit wordt gebruikt als onderdeel van een INSERT INTO / EXECUTE statement, zodat de resultaten van DBCC pagina worden ingevoegd in een tabel (in dit geval wordt een tijdelijke tabel gebruikt, hoewel een tabel variabele of permanente tabel ook kan worden gebruikt). Er zijn drie eenvoudige stappen om dit proces:

  1. Maak een tabel (permanent / tijdelijk) of tabel variabele om de uitvoer te houden.
  2. voeg in deze tabel de resultaten van het DBCC-PAGINASTATEMENT in door invoegen in / Uitvoeren te gebruiken.
  3. Selecteer de gegevens die u zoekt in de tabel.

door gebruik te maken van een cursor, kunt u eenvoudig door alle databases op uw instantie draaien om te zien wanneer ze voor het laatst een succesvolle DBCC CHECKDB tegen hen hebben uitgevoerd. Het volgende maakt gebruik van sp_MSforeachdb (die zelf een cursor gebruikt om door alle databases te draaien) om dit te doen:

broncode:
 IF OBJECT_ID ('tempdb.dbo.#DBCCPAGE' ) is geen NULL DROP TABLE #DBCCPAGE; IF OBJECT_ID ('tempdb.dbo.#CheckDBDates') IS geen 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;

en hier hebben we elke database op uw instantie, en de datum dat DBCC CHECKDB voor het laatst succesvol werd uitgevoerd – goed, tenminste voor de databases die sp_MSforeachdb niet oversloeg (zie https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/ voor meer informatie hierover).

samengevat, door gebruik te maken van de “WITH TABLERESULTS” optie van DBCC, kunnen we processen automatiseren die DBCC pagina gebruiken, in plaats van handmatige interventie nodig te hebben om hier doorheen te werken.

In de volgende afleveringen zullen we kijken naar andere toepassingen van het gebruik van” WITH TABLERESULTS ” om DBCC uitvoer te automatiseren.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.