By: Brady Upton | Bijgewerkt: 2016-07-26 | Comments (2) | Related: Meer > Database Console Commando’s DBCCs
- Probleem
- Oplossing
- Wat is SQL Server DBCC CHECKDB
- Hoe kan SQL Server DBCC CHECKDB mij helpen?
- Hoe gebruik ik SQL Server DBCC CHECKDB?
- SQL Server DBCC CHECKDB
- SQL Server DBCC CHECKDB Opties
- Hoe vaak moet ik controleren op SQL Server corruptie?
- Moet ik DBCC CHECKDB draaien in mijn produktie omgeving?
- Nu DBCC CHECKDB is geconfigureerd en draait, waar moet ik naar zoeken?
- Hoe repareer ik een SQL Server database
- Ik heb hier een goed gevoel over, maar wat kan ik nog meer gebruiken om mijn SQL-instances te beschermen?
- Volgende stappen
- Over de auteur
Probleem
SQL Server database corruptie kan een probleem zijn en kan ernstige schade toebrengen aan een database. Als je een ervaren DBA bent, dan heb je waarschijnlijk al voorzorgsmaatregelen genomen om dit te detecteren, maar in de loop der jaren heb ik honderden SQL Servers gezien zonder enige detectiemethode en dat is een probleem. Er zijn een paar manieren om database corruptie op te sporen, maar deze tip zal zich meer richten op DBCC CHECKDB.
Oplossing
U kunt wel of niet gehoord hebben vanDBCC (database console commando’s) statements. Deze statements worden gebruikt om verschillende bewerkingen in uw database uit te voeren en kunnen worden onderverdeeld in vier categorieën: Onderhoud, Diversen, Informaties en Validaties. Ik gebruik sommige DBCC-statements dagelijks, maar geen enkele meer dan DBCC CHECKDB.
Wat is SQL Server DBCC CHECKDB
DBCC CHECKDB, van Microsoft MSDN Library, controleert de logische en fysieke integriteit van alle objecten in de gespecificeerde database door het uitvoeren van de volgende operaties:
- Uitvoeren DBCC CHECKALLOC op de database – Controleert de consistentie van de schijfruimte-toewijzingsstructuren voor een gespecificeerde database.
- Uitvoeren DBCC CHECKTABLE op elke tabel en elk overzicht in de database – Controleert de integriteit van alle pagina’s en structuren waaruit de tabel of het geïndexeerde overzicht is opgebouwd.
- Loopt DBCC CHECKCATALOG op de database uit – Controleert de consistentie van de catalogus in de database.
- Valideert de inhoud van elke geïndexeerde view in de database.
- Valideert de consistentie op koppelingsniveau tussen tabelmetagegevens en directory’s en bestanden van het bestandssysteem bij opslag van varbinary (max) gegevens in het bestandssysteem met behulp vanFILESTREAM.
- Valideert de Service Broker gegevens in de database
Als u ooit DBCC CHECKDB hebt uitgevoerd, weet u dat het enige tijd kost voor grote databases.Nu u alle stappen kent die worden uitgevoerd, kunt u zien waarom het tijd kost om te voltooien.
Hoe kan SQL Server DBCC CHECKDB mij helpen?
Corruptie van gegevens is slecht. Het kan allerlei problemen in de database veroorzaken, zoals onjuiste gegevensresultaten, mislukte SQL-statements en in sommige gevallen kan het de hele SQL-instance platleggen. DBCC CHECKDB waarschuwt u voor corruptie, zodat u het kunt repareren voordat het (hopelijk) te erg wordt.
Hoe gebruik ik SQL Server DBCC CHECKDB?
DBCC CHECKDB is vrij eenvoudig. Er zijn een paar opties die u kunt gebruiken met het statement en we zullen er een paar bespreken in de volgende sectie, maar de basistaal ziet er als volgt uit:
DBCC CHECKDB ('DatabaseName')
Pretty simple.
SQL Server DBCC CHECKDB
Het is duidelijk dat u niet elke ochtend wilt inloggen en dit statement op elke database wilt uitvoeren, dus u kunt dit proces op een paar verschillende manieren automatiseren:
- SQL Server Onderhoudsplannen -Onderhoudsplannen maken standaard deel uit van SQL Server (tenzij u ExpressEdition gebruikt). Ik gebruik onderhoudsplannen meestal niet graag, maar ik vind het niet erg om ze voor dit soort taken te gebruiken. In de Maintenance Plan toolbox moet je de Check Database Integrity taak gebruiken. De enige configureerbare optie is om indexen op te nemen, dus het is niet echt gebruikersvriendelijk, maar in sommige gevallen is dit alles wat je nodig hebt. We zullen het in het volgende gedeelte over andere opties hebben.
- Aangepaste scripts – Aangepaste scripts zijn meestal wat ik gebruik en bieden de meeste flexibiliteit wat betreft het toevoegen van de opties die u wilt. Mijn go-toscripts zijn al gemaakt en gratis te gebruiken door Ola Hallengren. Hij heeft geweldig werk verricht door deze te maken en te delen met de wereld. Bedankt Ola!
- Kijk eens naar de scripts op MSSQLTips.com:
- Onderhoud uitvoeren met SQL Server Databases in Full Recovery mode
- SQL Server Database Onderhoudsplannen en Backup Bestandsbeheer
- Het uitvoeren van SQL Server Onderhoud zonder Onderhoudsvenster
- NOINDEX – Geeft aan dat intensieve controles van niet-geclusterde indexen voor gebruikerstabellen niet moeten worden uitgevoerd. Dit vermindert de overallexecutie tijd. NOINDEX heeft geen invloed op systeemtabellen omdat integriteitscontroles altijd op systeemtabelindexen worden uitgevoerd.
- NO_INFOMSGS – Onderdrukt alle informatieberichten.
- PHYSICAL_ONLY – Beperkt de controle tot de integriteit van de fysieke structuur van de pagina- en recordkoppen en de toewijzingsconsistentie van de database. Deze controle is ontworpen om een kleine overheadcontrole van de fysieke consistentie van de database te bieden, maar kan ook gescheurde pagina’s, checksumfouten en veelvoorkomende hardwarefouten detecteren die de gegevens van een gebruiker kunnen compromitteren.
- TABLOCK – Zorgt ervoor dat DBCC CHECKDB vergrendelingen verkrijgt in plaats van een interne snapshot van de database te gebruiken. Dit omvat een kortetermijn-exclusief (X-)slot op de database. TABLOCK zorgt ervoor dat DBCC CHECKDB sneller draait op een database onder zware belasting, maar verlaagt de beschikbare concurrency op de database terwijlDBCC CHECKDB draait.
- DATA_PURITY – Zorgt ervoor dat DBCC CHECKDB de database controleert op kolomwaarden die niet geldig zijn of buiten het bereik vallen. Bijvoorbeeld, DBCC CHECKDB detecteert kolommen met datum en tijd waarden die groter of kleiner zijn dan het aanvaardbare bereik voor het datetime data type; of decimale of benaderend-numerieke data type kolommen met schaal of precisie waarden die niet geldig zijn.
- REPAIR_ALLOW_DATA_LOSS – Probeert alle gemelde fouten te repareren. Deze reparaties kunnen enig gegevensverlies veroorzaken.
- REPAIR_REBUILD – Voert reparaties uit die geen mogelijkheid tot gegevensverlies bieden. Dit kunnen snelle reparaties zijn, zoals het repareren van ontbrekende rijen in niet-geclusterde indexen, en meer tijdrovende reparaties, zoals het herbouwen van een index.
- SQL Server Agent Alerts – Brian Kelley schreef hier een leuke tip over dit onderwerp.
- Pagina verificatie – Zorg ervoor dat uw databases gebruik maken vanCHECKSUM pagina verificatie. Als u nog SQL 2005 of lager gebruikt is dit niet beschikbaar, maar zorg ervoor dat u deze instelling wijzigt na de upgrade. Om de paginaverificatie-instellingen te zien, gebruikt u het volgende statement:
- Bekijk zeker deMSDN Library voor meer diepgaande details over DBCC CHECKDB
- MSSQLTips.com heeft een mooie verzameling tips overDatabase Consistency Checks die ook nuttig kunnen zijn.
- Meer SQL Server DBA Tips…
SQL Server DBCC CHECKDB Opties
Er zijn een paar opties om te gebruiken met DBCC CHECKDB en ik zal hier een paar van de populairdere opties bespreken:
We zullen een aantal van de REPAIR opties in een andere sectie hieronder bespreken.
Hoe vaak moet ik controleren op SQL Server corruptie?
Elke minuut van elke dag. Grapje.
Als je een dagelijks onderhoudsvenster hebt, zou het leuk zijn om dagelijks te controleren op data corruptie. Hoe sneller je het kunt vinden, hoe minder schade het kan aanrichten. Ik heb gemerkt dat veel mensen dit in het weekend doen, vooral met grotere databases. Er is niets goeds of fouts aan, zorg er alleen voor dat je het periodiek inplant.
Moet ik DBCC CHECKDB draaien in mijn produktie omgeving?
Nee, nou ja, ja. Zoiets.
Om te controleren op datacorruptie heeft het geen zin om DBCC CHECKDB op uw testomgeving te draaien… ZONDER dat u een kopie van uw productieomgeving terugzet om te testen en het dan uitvoert. BRILIANT!
Je vraagt je misschien af of sommige HA opties geschikt zijn, zoals AlwaysOn, LogShipping, etc.? Nee, u moet uw *live* productieomgeving controleren.
Nu DBCC CHECKDB is geconfigureerd en draait, waar moet ik naar zoeken?
Gefeliciteerd! U hebt DBCC CHECKDB geautomatiseerd en draaiend, maar wat nu? Als u eenSQL ServerAgent Job hebt ingesteld, zorg er dan voor dat uDatabase Mail,een operator en een notificatie op de job instelt. Als de job slaagt, ga dan verder met je mooie dag. Als de job mislukt, dan hebben we wat werk te doen.
U kunt een fout zien zoals deze:
of dit:
Raak ten eerste niet in paniek. Ten tweede, controleer back-ups. DBCC CHECKDB fouten vertellen u meestal wat er gedaan moet worden.
Voor de eerste fout zal een DBCC UPDATEUSAGE de pagina en rijtelling onnauwkeurigheden in de catalogus views corrigeren. Vrij onschuldig.
De tweede fout meldt datacorruptie. De fout vermeldt het gebruik van repair_allow_data_loss als het minimum reparatie niveau. Dit betekent dat je het statement met dit argument kunt uitvoeren, maar je kunt gegevens verliezen. Dit is waarom ik altijd aanraad om terug te zetten naar een backup als dat kan. U moet er zeker van zijn dat de backup geen corrupte data bevat en u wilt er zeker van zijn dat er geen data verlies is.
Hoe repareer ik een SQL Server database
Als u geen backup heeft, kan het nodig zijn om DBCC CHECKDB met een reparatie optie te gebruiken.Hier zijn de reparatie opties die beschikbaar zijn om te gebruiken. Deze kunnen wel of niet werken en moeten als laatste redmiddel worden gebruikt:
Zoals ik hierboven al zei, het is erg belangrijk om up to datebackups te hebben om te herstellen van corruptie. Corruptie maakt niet uit hoeveel gegevens je hebt, welke versie van SQL je draait, of hoe luxe uw datacenter is.
Ik heb hier een goed gevoel over, maar wat kan ik nog meer gebruiken om mijn SQL-instances te beschermen?
DBCC CHECKDB moet worden uitgevoerd op elke SQL-instance die je hebt, maar er zijn een paar andere manieren die kunnen helpen bij het detecteren/voorkomen van datacorruptie.
select name, page_verify_option_desc from sys.databases
Volgende stappen
Last bijgewerkt: 2016-07-26
Over de auteur
Bekijk al mijn tips