Automatizace DBCC Stránky

Cesta zpět v roce 2006, Paul Randal zdokumentovány DBCC STRÁNKY na jeho blogu společnosti Microsoft na adrese https://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/10/625659.aspx. Ve svém příspěvku si všimnete, že chcete-li vrátit výstup ze stránky DBCC na obrazovku, musíte nejprve povolit trace flag 3604. Výše uvedený blogový příspěvek ukazuje několik příkladů výsledků a jejich využití pro další akce. Tato metoda bohužel vyžaduje ruční zásah, aby se ze stránky získaly potřebné údaje, aby se s ní dále pracovalo.

Víte, určitě by bylo hezké, kdyby ruční zásah mohl být odstraněn a zcela automatizovat úkol, který hledáte. Tento blogový příspěvek vám ukáže, jak toho lze dosáhnout, a uvede několik příkladů.

v mém posledním blogu jsem představil volitelné nastavení několika příkazů DBCC: s TABLERESULTS. Tím se výstup vrátí v tabulkovém formátu způsobem, který umožňuje spotřebu výstupu. Jak se ukazuje, toto volitelné nastavení funguje také se stránkou DBCC. Můžete vidět tím, že zkoumá databáze informace o stránce (page 9) databáze master:

Zdrojový kód
DBCC STRÁNKY ('master', 1, 9, 3) S TABLERESULTS;

Toto prohlášení, které lze spustit bez příznak trasování, vrátí data na stránce 4 sloupce: nadřazeného objektu, Objekt, Pole a HODNOTU. Jak se ukazuje, tato konkrétní stránka každé databáze má na sobě spoustu zajímavých informací. Pojďme automatizovat popadl konkrétní informace z této stránky:

Zdrojový kód
POKUD OBJECT_ID('tempdb.dbo.#DBCCPAGE') IS not NULL DROP TABLE #DBCCPAGE;CREATE TABLE #DBCCPAGE ( nadřazeného objektu VARCHAR(255), VARCHAR(255), Pole VARCHAR(255), VARCHAR(255));INSERT INTO #DBCCPAGEEXECUTE ('DBCC STRÁNKY ("master", 1, 9, 3) S TABLERESULTS;'); VYBERTE LastGoodDBCCDate = CONVERT(DATETIME, HODNOTA)Z #DBCCPAGEWHERE Pole = 'dbi_dbccLastKnownGood';

tento nádherný úryvek kódu se vrací Naposledy úspěšný DBCC CHECKDB byl spuštěn proti Hlavní databázi. Whoa … jak milé to je? Když objevíte server, kde úloha CHECKDB selhala do té míry, že úloha selhala pouze v historii úlohy, nyní můžete zjistit, jak dlouho to bylo od posledního úspěšného spuštění.

„trik“ k provedení této práce je zapouzdřit příkaz DBCC jako řetězec a zavolat jej pomocí funkce EXECUTE (). Používá se jako součást příkazu INSERT INTO / EXECUTE, takže výsledky ze stránky DBCC jsou vloženy do tabulky (v tomto případě je použita Dočasná tabulka, i když lze také použít proměnnou tabulky nebo trvalou tabulku). K tomuto procesu existují tři jednoduché kroky:

  1. vytvořte tabulku (trvalou / dočasnou) nebo proměnnou tabulky pro udržení výstupu.
  2. vložte do této tabulky výsledky příkazu stránky DBCC pomocí INSERT INTO / EXECUTE.
  3. vyberte z tabulky hledaná data.

pomocí kurzoru můžete snadno procházet všemi databázemi ve vaší instanci, abyste se dostali, když naposledy měli proti nim úspěšný CHECKDB DBCC. Následující od sp_MSforeachdb (který sám používá kurzor točit přes všechny databáze) se dělat jen to:

Zdrojový kód
POKUD OBJECT_ID('tempdb.dbo.#DBCCPAGE') není NULL DROP TABLE #DBCCPAGE; pokud OBJECT_ID ('tempdb.dbo.#CheckDBDates') není 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;

A tady máme všechny databáze v instanci, a datum, které DBCC CHECKDB byl naposledy spuštěn úspěšně proti tomu – no, alespoň pro databáze, které sp_MSforeachdb neměl vynechat (viz https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/ pro více informací o tomto).

stručně řečeno, využitím „S TABLERESULTS“ možnost DBCC, můžeme automatizovat procesy, které pomocí DBCC STRÁNKY, namísto nutnosti ručního zásahu do práce si cestu přes tento.

v příštích několika splátkách se podíváme na další použití použití „s TABLERESULTS“ pro automatizaci výstupu DBCC.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.