automatisoimalla DBCC-sivua

jo vuonna 2006 Paul Randal dokumentoi DBCC-sivua Microsoft-blogissaan osoitteessa https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx. Hänen postitse, huomaat, että jotta palauttaa lähtö DBCC sivun näyttöön, sinun täytyy ottaa trace flag 3604 ensimmäinen. Yllä olevassa blogikirjoituksessa on muutamia esimerkkejä tuloksista ja niiden hyödyntämisestä jatkotoimissa. Valitettavasti tämä menetelmä vaatii manuaalista toimintaa, jotta saat tarvittavat tiedot sivulta, jotta voit työskennellä sen kanssa.

tiedättehän, olisi varmasti mukavaa, jos manuaalisen väliintulon voisi poistaa ja automatisoida täysin etsimänsä tehtävän. Tämä blogikirjoitus näyttää, miten tämä voidaan tehdä, ja se antaa muutamia esimerkkejä näin.

viimeisessä blogikirjoituksessani esittelin valinnaisen asetuksen useille DBCC-komennoille: TABLERESULTEILLA. Tämä palauttaa tuotoksen taulukkomuodossa tavalla, joka mahdollistaa tuotoksen kuluttamisen. Kuten on käynyt ilmi, tämä valinnainen asetus toimii myös DBCC-sivulla. Voit nähdä tämän tutkimalla tietokantatietosivua (sivu 9) master database:

lähdekoodi
DBCC-sivu ("master", 1, 9, 3) tables-tuloksineen;

tämä lausunto, joka voidaan suorittaa ilman trace-lippua, palauttaa tiedot sivulla 4 sarakkeissa: ParentObject, Object, Field and VALUE. Kuten on käynyt ilmi, tällä sivulla jokaisessa tietokannassa on paljon mielenkiintoista tietoa siitä. Automatisoidaan nappaamalla tietynlainen tieto tältä sivulta.:

lähdekoodi
IF OBJECT_ID ("tempdb.dbo.#DBCCPAGE') ei ole null DROP TABLE #DBCCPAGE;Luo taulukko #Dbccpage ( ParentObject VARCHAR(255), VARCHAR(255), Field VARCHAR(255), VARCHAR(255));siirry kohtaan #DBCCPAGEEXECUTE ('DBCC PAGE ("master", 1, 9, 3) with TABLERESULTS;'); valitse LastGoodDBCCDate = CONVERT(DATETIME, VALUE)FROM #dbccpagewhere field = "DBI_DBCCLASTKNOWNGOOD";

tämä ihana pätkä koodia palauttaa viime kerralla onnistunut DBCC CHECKDB ajettiin vastaan master tietokanta. Eikö olekin suloista? Kun löydät palvelimen, jossa CHECKDB-työ on epäonnistunut siinä määrin, että työssä on vain epäonnistuneita merkintöjä työhistoriassa, voit nyt selvittää, kuinka kauan siitä on kulunut, kun se viimeksi suoritettiin onnistuneesti.

”temppu” tämän tekemiseen on kapseloida DBCC-komento merkkijonoksi ja kutsua sitä EXECUTE () – funktiolla. Tätä käytetään osana lisää / Suorita lauseke, niin että tulokset DBCC sivu lisätään taulukkoon (tässä tapauksessa käytetään väliaikaista taulukkoa, vaikka taulukon muuttuja tai pysyvä taulukko voidaan käyttää myös). Tähän prosessiin on kolme yksinkertaista vaihetta:

  1. Luo taulukko (pysyvä / tilapäinen) tai taulukkomuuttuja pitämään tulostetta.
  2. lisää tähän taulukkoon DBCC: n SIVULAUSEKKEEN tulokset käyttämällä INSERT INTO / EXECUTE.
  3. Valitse haluamasi tiedot taulukosta.

kursoria käyttämällä voit helposti pyörittää kaikki instanssisi tietokannat läpi saadaksesi, milloin viimeksi niitä vastaan on suoritettu onnistunut DBCC CHECKDB. Seuraavat käyttää sp_msforeachdb (joka itse käyttää kursoria spin läpi kaikki tietokannat) tehdä juuri tämän:

lähdekoodi
IF OBJECT_ID ("tempdb.dbo.#DBCCPAGE') ei ole NULL DROP TABLE #DBCCPAGE;IF OBJECT_ID ("tempdb.dbo.#CheckDBDates') ei ole 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;

ja tässä meillä on jokainen tietokanta instanssistasi, ja päivämäärä, jolloin DBCC CHECKDB Viimeksi ajettiin onnistuneesti sitä vastaan-no, ainakin niiden tietokantojen osalta, joita sp_MSforeachdb ei ohittanut (katso https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/ lisätietoja tästä).

yhteenvetona voidaan todeta, että käyttämällä DBCC: n ”TABLERESULTS” – vaihtoehtoa voimme automatisoida prosesseja, jotka käyttävät DBCC: n sivua, sen sijaan, että tarvitsisimme manuaalista väliintuloa toimiaksemme tämän läpi.

seuraavissa erissä tarkastelemme muita käyttötarkoituksia käyttää ”TABLERESULTTEJA” DBCC-ulostulon automatisointiin.

Vastaa

Sähköpostiosoitettasi ei julkaista.