DBCC CHECKDB este o comandă T-SQL care verifică integritatea logică și fizică a tuturor obiectelor din baza de date specificată. Majoritatea administratorilor de baze de date (DBA) probabil nu se gândesc la regularitatea executării DBCC CHECKDB - până când bazele lor de date devin foarte mari.
Infrastructura IT pentru întreprinderea dvs.
DBCC CHECKDB este o comandă T-SQL care verifică integritatea logică și fizică a tuturor obiectelor din baza de date specificată. Majoritatea administratorilor de baze de date (DBA), probabil, nu se gândesc la regularitatea executării DBCC CHECKDB - până când bazele lor de date devin foarte mari. Într-un anumit moment, când dimensiunea bazei dvs. de date crește semnificativ, veți începe să întâlniți diverse probleme atunci când executați DBCC CHECKDB. De exemplu, timpul necesar pentru finalizarea procesului DBCC CHECKDB poate fi un obstacol real. În plus, este posibil să nu existe suficient spațiu liber pentru instantanee create în timpul execuției DBCC CHECKDB.
Listarea 1 conține un script pentru întreținerea zilnică a serverului numit ServerDailyMaintenance.txt. Când executați acest script, creați sarcina Admin Job pentru serviciul SQL Server Agent. Această sarcină administratorului este singura sarcină care este de fapt planificată să ruleze, dar generează sau modifică și, de fapt, începe executarea sarcinii pentru interpret.
Figura 1 prezintă etapa principală a scriptului Admin Job, care execută procedura memorată msdb.dbo.mnt_DBCC.
Listă 2 conține o descriere a procedurii memorate mnt_DBCC. Această procedură identifică bazele de date disponibile și continuă să construiască lucrarea către executor, Maintenance_DBCC_CHECKDB.
Figura 2 prezintă parametrii procedurii mnt_DBCC și valorile posibile ale acestora, inclusiv informații despre scopul fiecărei valori.
Sarcina este creată și lansată de la job la administrator (Admin Job) și numită Maintenance_DBCC_CHECKDB. Fiecare pas al lucrării artistului conține etapa ulterioară de verificare a erorilor. Figura 4 prezintă un exemplu de executare a unui anumit pas de sarcină pentru executorul de execuție pentru baza de date AdventureWorks, pentru care valoarea @VLDB a fost 1, iar valoarea zilelor @ a fost de 7.
Aplicarea conceptului de Admin / Worker Job implică faptul că fiecare slujbă de locuri de muncă este generată dinamic, cu o modificare de noapte. Nu veți pierde istoricul posturilor pentru Worker Job, deoarece această sarcină este actualizată de fiecare dată, dar nu este ștersă și creată din nou.
Cum funcționează parametrul @VLDB?
Dacă valoarea acestui parametru este setată la 0, Worker Job lansează un proces DBCC CHECKDB simplu. "Magic" se va întâmpla dacă faci @ VLDB egal cu 1. Determinați pentru mediul dvs. o valoare adecvată pentru parametrul @days va ajuta la selecție și testare.
Atunci când parametrul este setat la 1 @VLDB stocate mnt_DBCC efectuează apelul de procedură mnt_DBCC_VLDB care inspectează toate tabelele de utilizator, tabelele de sistem, reprezentare indexată într-o bază de date tabele interne și stabilește dimensiunea fiecărui. După aceea, toate tabelele sunt împărțite în grupuri N, numărul cărora coincide cu valoarea specificată în parametrul @days. Scopul a fost de a distribui mesele în grupuri cât mai uniform posibil pentru a compensa încărcarea de noapte pe server. Fiecare grup de tabele își primește numărul (VLDB_GROUP), în funcție de valoarea parametrului @days. Numărul grupului cu care ar trebui să lucrați astăzi este determinat de formula:
Această formulă înseamnă că orice grup următor va fi procesat indiferent de momentul în care lucrarea a început. Sarcina întotdeauna "cunoaște" numerele de grup care au trecut deja și care vor fi în continuare în funcțiune, astfel încât nu este nevoie să salvați nici un fel de date în tabel.
Pentru a arăta cum funcționează parametrul @VLDB, luați în considerare exemplul.
Să presupunem că aveți 10 mese și setați valoarea @ zile la 2. Procedura stocată localizează tabelele și determină dimensiunile lor; apoi pune cea mai mare masă din grup cu numărul (VLDB_Group = 0); următorul cel mai mare este grupul 1 (VLDB_Group = 1), apoi ne întoarcem la grup și astfel, ciclic, până când toate tabelele sunt grupate. Când executați interogarea
în consecință, se va primi 0 sau 1. Dacă astăzi este 0, atunci mâine va fi 1, a doua zi după mâine - 0 și așa mai departe. Fiecare grup de tabele va fi procesat, fără a stoca informații despre grupurile în care aparțin tabelele. Și ce se întâmplă dacă cea de-a doua masă cea mai mare astăzi crește și devine cea mai mare masă mâine? Acest tabel va fi omis, deoarece mâine se va muta la grupul 0. Ce se întâmplă dacă tabelele 1 și 2 cresc sau scad în același timp, dar dimensiunile relative rămân aceleași? În acest caz, ambele tabele vor fi procesate în timp util. Cel mai adesea, cea mai mare masă va fi întotdeauna cea mai mare; al doilea cel mai mare va rămâne al doilea și așa mai departe; astfel, nici un tabel nu va fi omis, deoarece dimensiunile relative ale tabelelor nu se modifică. Dacă doriți să vă asigurați că niciunul dintre tabele nu este omis în ciclul de procesare, trebuie să modificați codul cu numele salvat în unele tabele speciale. Salvați, de exemplu, grupuri în prima zi a ciclului și consultați acest tabel pentru întreaga perioadă. În plus, va trebui să verificați dacă nu s-au șters sau s-au adăugat tabele de la selectarea primei zile. Schimbarea dimensiunii tabelelor nu este o problemă (inclusiv dacă cea mai mare masă de astăzi este mâna a doua cea mai mare).
Cu parametrul @VLDB setat la 1, este creată și o lucrare de execuție, care, la fiecare pornire, execută și comenzile DBCC CHECKALLOC și DBCC CHECKCATALOG (după cum se arată în ecranul 4).
Instrucțiuni de utilizare
Funcția DBCC CHECKDB, folosind metoda descrisă de Admin / Worker Job, pare destul de rezonabilă, flexibilă și nu necesită întreținere suplimentară: o puteți executa într-o bază de date de orice dimensiune. Sarcina este executată automat cu toate bazele de date pe care le-ați adăugat, cu excepția celor șterse anterior. În plus, codul postului identifică bazele de date - oglinzile oglinzite și cele care sunt offline din alt motiv. Puteți determina dacă lucrarea ar trebui efectuată numai pentru sistem sau numai pentru bazele de date fizice. Și, cel mai important, puteți implementa sarcina DBCC CHECKDB pentru orice număr de zile care urmează să fie setat.
Listing 1 ServerDailyMaintenance.txt
Listing 1 ServerDailyMaintenance.txt (sfârșit)
Listarea 2 mnt_DBCC.txt
Listarea 2 mnt_DBCC.txt (continuare)
Listing 2 mnt_DBCC.txt (sfârșit)
Listarea 3 mnt_DBCC_VLDB.txt
Listing 3 mnt_DBCC_VLDB.txt (sfârșit)