Dela via


DBCC (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Det Transact-SQL programmeringsspråket innehåller DBCC-instruktioner som fungerar som databaskonsolkommandon för SQL Server.

Kommandoinstruktionerna för databaskonsolen grupperas i följande kategorier.

Kommandokategori Utföra
Underhåll Underhållsaktiviteter för en databas, ett index eller en filgrupp.
Diverse Diverse uppgifter som att aktivera spårningsflaggor eller ta bort en DLL från minnet.
Informativt Uppgifter som samlar in och visar olika typer av information.
Validering Valideringsåtgärder på en databas, tabell, index, katalog, filgrupp eller allokering av databassidor.

DBCC-kommandon tar indataparametrar och returnerar värden. Alla DBCC-kommandoparametrar kan acceptera både Unicode- och DBCS-literaler.

Databasögonblicksbildanvändning i DBCC

Följande DBCC-kommandon fungerar på en intern skrivskyddad databasögonblicksbild som databasmotorn skapar. Ögonblicksbilden förhindrar blockerings- och samtidighetsproblem när dessa kommandon körs. Mer information finns i Database Snapshots (SQL Server).

  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE

När du kör ett av dessa DBCC-kommandon skapar databasmotorn en ögonblicksbild av databasen och ger den ett transaktionsmässigt konsekvent tillstånd. DBCC-kommandot kör sedan kontrollerna mot den här ögonblicksbilden. När DBCC-kommandot har slutförts tas den här ögonblicksbilden bort.

Ibland krävs ingen intern databasögonblicksbild eller kan inte skapas. När detta inträffar körs DBCC-kommandot mot den faktiska databasen. Om databasen är online använder DBCC-kommandot tabelllåsning för att säkerställa konsekvensen för de objekt som den kontrollerar. Det här beteendet är detsamma som om alternativet WITH TABLOCK angavs.

En intern databasögonblicksbild skapas inte när ett DBCC-kommando körs:

  • Mot den master databasen och instansen av SQL Server körs i enanvändarläge.
  • Mot en annan databas än master, men databasen har försatts i enanvändarläge med hjälp av instruktionen ALTER DATABASE.
  • Mot en skrivskyddad databas.
  • Mot en databas som har angetts i nödläge med hjälp av instruktionen ALTER DATABASE.
  • Mot tempdb. I det här fallet kan en ögonblicksbild av databasen inte skapas på grund av interna begränsningar.
  • Använd alternativet WITH TABLOCK. I det här fallet respekterar DBCC begäran genom att inte skapa en ögonblicksbild av databasen.

DBCC-kommandona använder tabelllås i stället för de interna databasögonblicksbilderna när kommandot körs mot följande:

  • En skrivskyddad filgrupp
  • Ett FAT-filsystem
  • En volym som inte stöder namngivna strömmar
  • En volym som inte stöder alternativa strömmar

Not

Om du försöker köra DBCC CHECKALLOC, eller motsvarande del av DBCC CHECKDB, med hjälp av alternativet WITH TABLOCK krävs ett databasexkluderande lås (X). Det här databaslåset kan inte ställas in på tempdb eller master och kommer förmodligen att misslyckas på alla andra databaser.

Not

DBCC CHECKDB misslyckas när den körs mot master om det inte går att skapa en intern databasögonblicksbild.

Förloppsrapportering för DBCC-kommandon

Katalogvyn sys.dm_exec_requests innehåller information om förloppet och den aktuella fasen av körningen av kommandona DBCC CHECKDB, CHECKFILEGROUPoch CHECKTABLE. Kolumnen percent_complete anger procent färdigt kommando, och kolumnen command rapporterar den aktuella fasen av körningen av kommandot.

Definitionen av en förloppsenhet beror på den aktuella fasen av körningen av DBCC-kommandot. Ibland rapporteras förloppet på en databassidas kornighet, i andra faser rapporteras det vid kornigheten för en enskild databas eller allokeringsreparation. I följande tabell beskrivs varje fas av körningen och den kornighet där kommandot rapporterar förlopp.

Körningsfas Beskrivning Förloppsrapporteringskornighet
DBCC TABLE CHECK Den logiska och fysiska konsekvensen för objekten i databasen kontrolleras under den här fasen. Förlopp rapporteras på databassidans nivå.

Förloppsrapporteringsvärdet uppdateras för varje 1 000 databassidor som kontrolleras.
DBCC TABLE REPAIR Databasreparationer utförs under den här fasen om REPAIR_FAST, REPAIR_REBUILDeller REPAIR_ALLOW_DATA_LOSS anges och det finns objektfel som måste repareras. Förlopp som rapporterats på den enskilda reparationsnivån.

Räknaren uppdateras för varje reparation som har slutförts.
DBCC ALLOC CHECK Allokeringsstrukturer i databasen kontrolleras under den här fasen.

Obs!DBCC CHECKALLOC utför samma kontroller.
Förloppet rapporteras inte
DBCC ALLOC REPAIR Databasreparationer utförs under den här fasen om REPAIR_FAST, REPAIR_REBUILDeller REPAIR_ALLOW_DATA_LOSS anges och det finns allokeringsfel som måste repareras. Förloppet rapporteras inte.
DBCC SYS CHECK Databassystemtabeller kontrolleras under den här fasen. Förlopp rapporteras på databassidans nivå.

Förloppsrapporteringsvärdet uppdateras för varje 1 000 databassidor som kontrolleras.
DBCC SYS REPAIR Databasreparationer utförs under den här fasen om REPAIR_FAST, REPAIR_REBUILDeller REPAIR_ALLOW_DATA_LOSS har angetts och det finns systemtabellfel som måste repareras. Förlopp som rapporterats på den enskilda reparationsnivån.

Räknaren uppdateras för varje reparation som har slutförts.
DBCC SSB CHECK SQL Server Service Broker-objekt kontrolleras under den här fasen.

Obs! Den här fasen körs inte när DBCC CHECKTABLE körs.
Förloppet rapporteras inte.
DBCC CHECKCATALOG Konsekvensen för databaskataloger kontrolleras under den här fasen.

Obs! Den här fasen körs inte när DBCC CHECKTABLE körs.
Förloppet rapporteras inte.
DBCC IVIEW CHECK Den logiska konsekvensen för alla indexerade vyer som finns i databasen kontrolleras under den här fasen. Förlopp som rapporteras på nivån för den enskilda databasvy som kontrolleras.

Informationsinstruktioner

Valideringsuttryck

Underhållsinstruktioner

Diverse instruktioner