a DBCC oldal automatizálása

2006-ban Paul Randal dokumentálta a DBCC oldalt a Microsoft blogjában a https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx címen. Az ő post, akkor veszi észre, hogy annak érdekében, hogy visszatérjen a kimenet DBCC oldal a képernyőn, akkor engedélyeznie kell trace flag 3604 első. A fenti blogbejegyzés néhány példát mutat be az eredményekről, és felhasználja őket további műveletekhez. Sajnos ez a módszer kézi beavatkozást igényel, hogy megkapja a szükséges adatokat az oldalról, hogy tovább dolgozzon vele.

tudod, az biztos, hogy jó lenne, ha a kézi beavatkozás lehet távolítani, és teljesen automatizálni a feladatot, amit keres. Ez a blogbejegyzés megmutatja, hogyan lehet ezt megtenni, és néhány példát ad erre.

az utolsó blogbejegyzésemben egy opcionális beállítást vezettem be több DBCC parancshoz: a TABLERESULTS segítségével. Ez a kimenetet táblázatos formátumban adja vissza, oly módon, hogy lehetővé tegye a kimenet fogyasztását. Mint kiderült, ez az opcionális beállítás a DBCC oldallal is működik. Ezt a törzsadatbázis adatbázis-információs oldalának (9. oldal) vizsgálatával láthatja:

forráskód
DBCC oldal ('master', 1, 9, 3) TABLEREDMÉNY;

ez az utasítás, amely a nyomkövetési jelző nélkül futtatható, az oldalon lévő adatokat 4 oszlopban adja vissza: ParentObject, Object, Field and VALUE. Mint kiderült, minden adatbázis ezen az oldalán sok érdekes információ található. Automatizáljuk egy adott információ megragadását ezen az oldalon:

forráskód
ha OBJECT_ID ('tempdb.dbo.#DBCCPAGE') nem nulla csepp táblázat #DBCCPAGE;Táblázat létrehozása #DBCCPAGE ( ParentObject VARCHAR(255), VARCHAR(255), mező VARCHAR(255), VARCHAR(255));helyezze be a #DBCCPAGEEXECUTE ('DBCC oldal ("mester", 1, 9, 3) A TABLERESULTS;'); válassza ki a LastGoodDBCCDate = CONVERT(DATETIME, VALUE)FROM #dbccpagewhere field = 'DBI_DBCCLASTKNOWNGOOD';

ez a csodálatos kódrészlet visszaadja az utolsó alkalommal, amikor egy sikeres DBCC CHECKDB-t futtattak a fő adatbázis ellen. Hát nem édes? Ha olyan kiszolgálót fedez fel, ahol a CHECKDB feladat kudarcot vallott addig a pontig, hogy a feladat csak sikertelen bejegyzéseket tartalmaz a feladatelőzményekben, akkor most megtudhatja, hogy mennyi idő telt el az utolsó sikeres futtatása óta.

ennek a munkának a “trükkje” az, hogy a DBCC parancsot karakterláncként beágyazza, és meghívja az EXECUTE () függvénnyel. Ezt egy INSERT INTO / EXECUTE utasítás részeként használják, így a DBCC oldal eredményei beillesztésre kerülnek egy táblázatba (ebben az esetben egy ideiglenes táblát használnak, bár egy táblázat változó vagy állandó tábla is használható). Ennek a folyamatnak három egyszerű lépése van:

  1. hozzon létre egy táblát (állandó / ideiglenes) vagy tábla változót a kimenet megtartásához.
  2. helyezze be ebbe a táblázatba a DBCC oldal utasítás eredményeit az INSERT INTO / EXECUTE paranccsal.
  3. válassza ki a keresett adatokat a táblázatból.

segítségével a kurzor, akkor könnyen spin az összes adatbázist a példány, hogy mikor utoljára volt egy sikeres DBCC CHECKDB fut ellenük. A következő az sp_MSforeachdb-t használja (amely maga is egy kurzort használ az összes adatbázis átforgatásához), hogy ezt megtegye:

forráskód
ha OBJECT_ID ('tempdb.dbo.#DBCCPAGE') Nem NULL DROP TABLE #DBCCPAGE;ha OBJECT_ID('tempdb.dbo.#CheckDBDates') nem nulla csepp táblázat #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;

és itt van minden adatbázis a példány, és a dátum, hogy DBCC CHECKDB utoljára fut sikeresen ellene – nos, legalábbis az adatbázisok sp_MSforeachdb nem hagyja ki (lásd https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/ További információ erről).

összefoglalva, a DBCC “a TABLERESULTS” opciójának felhasználásával automatizálhatjuk a DBCC oldalt használó folyamatokat, ahelyett, hogy kézi beavatkozásra lenne szükség ahhoz, hogy ezen keresztül haladjon.

a következő néhány részletben megvizsgáljuk a “With TABLERESULTS” használatának egyéb felhasználásait a DBCC kimenet automatizálására.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.