DBCC (Transact-SQL)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Die Programmiersprache Transact-SQL stellt DBCC-Anweisungen bereit, die als Datenbankkonsolenbefehle (Database Console Commands, DBCC) für SQL Server dienen.
DBCC-Anweisungen sind in die folgenden Kategorien eingeteilt.
Befehlskategorie | Funktion |
---|---|
Wartung | Aufgaben zur Verwaltung von Datenbanken, Indizes und Dateigruppen. |
Sonstiges | Verschiedene Aufgaben wie das Aktivieren von Ablaufverfolgungsflags oder das Entfernen einer DLL aus dem Arbeitsspeicher. |
Informational | Aufgaben zum Sammeln und Anzeigen verschiedener Arten von Informationen. |
Überprüfen | Überprüfungsvorgänge für Datenbanken, Tabellen, Indizes, Kataloge, Dateigruppen oder das Zuordnen von Datenbankseiten. |
DBCC-Befehle akzeptieren Eingabeparameter und geben Werte zurück. Alle Parameter für DBCC-Befehle nehmen sowohl Unicode- als auch DBCS-Literale (Double-Byte Character Set, Doppelbyte-Zeichensatz) an.
Verwenden einer internen Datenbankmomentaufnahme mit DBCC
Die folgenden DBCC-Befehle werden für eine von Datenbank-Engine erstellte interne schreibgeschützte Datenbank-Momentaufnahme ausgeführt. Die Momentaufnahme verhindert Blockierungs- und Parallelitätsprobleme beim Ausführen dieser Befehle. Weitere Informationen finden Sie unter Datenbankmomentaufnahmen (SQL Server).
DBCC CHECKALLOC
DBCC CHECKCATALOG
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
Wenn Sie einen dieser DBCC-Befehle ausführen, erstellt Datenbank-Engine eine Datenbankmomentaufnahme und versetzt diese hinsichtlich der Transaktionen in einen konsistenten Status. Der DBCC-Befehl führt die Überprüfungen dann auf dieser Momentaufnahme durch. Wenn die Ausführung des DBCC-Befehls abgeschlossen ist, wird die Momentaufnahme gelöscht.
Manchmal ist eine interne Datenbankmomentaufnahme nicht erforderlich oder kann nicht erstellt werden. In diesem Fall wird der DBCC-Befehl für die aktuelle Datenbank ausgeführt. Wenn die Datenbank online ist, verwendet der DBCC-Befehl Tabellensperren, um die Konsistenz der zu überprüfenden Objekte sicherzustellen. Dieses Verhalten ist identisch mit der WITH TABLOCK
-Option.
Es wird keine interne Datenbankmomentaufnahme erstellt, wenn unter folgenden Bedingungen ein DBCC-Befehl ausgeführt wird:
- Der Befehl wird für die
master
-Datenbank ausgeführt, und die Instanz von SQL Server wird im Einzelbenutzermodus ausgeführt. - Der Befehl wird für eine andere Datenbank als
master
ausgeführt, aber die Datenbank wurde mit derALTER DATABASE
-Anweisung in den Einzelbenutzermodus versetzt. - Der Befehl wird für eine schreibgeschützte Datenbank ausgeführt.
- Der Befehl wird für eine Datenbank ausgeführt, für die mithilfe der
ALTER DATABASE
-Anweisung der Notfallmodus festgelegt wurde. - Der Befehl wird für
tempdb
ausgeführt. In diesem Fall kann aufgrund interner Einschränkungen keine Datenbankmomentaufnahme erstellt werden. - Der Befehl wird mithilfe der Option
WITH TABLOCK
ausgeführt. In diesem Fall berücksichtigt DBCC die Anforderung und erstellt keine Datenbankmomentaufnahme.
Die DBCC-Befehle verwenden Tabellensperren anstelle der internen Datenbankmomentaufnahmen, wenn der Befehl für folgende Komponenten ausgeführt wird:
- Eine schreibgeschützte Dateigruppe
- Ein FAT-Dateisystem
- Ein Volume, das keine benannten Datenströme unterstützt
- Ein Volume, das keine alternativen Datenströme unterstützt
Hinweis
Wird DBCC CHECKALLOC
oder der entsprechende Teil von DBCC CHECKDB
mithilfe der WITH TABLOCK
-Option ausgeführt, muss hierfür die Datenbank exklusiv gesperrt (X
) werden. Diese Datenbanksperre kann nicht für die tempdb
- oder master
-Datenbank festgelegt werden und erzeugt wahrscheinlich bei allen anderen Datenbanken einen Fehler.
Hinweis
Der DBCC CHECKDB
-Befehl erzeugt einen Fehler, wenn er für eine master
-Datenbank ausgeführt wird und keine interne Datenbankmomentaufnahme erstellt werden kann.
Statusmeldungen für DBCC-Befehle
Die sys.dm_exec_requests
-Katalogsicht enthält Informationen zum Fortschritt und zur aktuellen Ausführungsphase der Befehle DBCC CHECKDB
, CHECKFILEGROUP
und CHECKTABLE
. In der Spalte percent_complete
wird der Fortschritt des Befehls in Prozent angezeigt, die command
-Spalte meldet die aktuelle Ausführungsphase des Befehls.
Die Definition einer Statuseinheit hängt von der aktuellen Ausführungsphase des DBCC-Befehls ab. Manchmal wird der Status mit der Granularität einer Datenbankseite angezeigt, in anderen Phasen wird er mit der Granularität einer einzelnen Datenbank oder Zuordnungsreparatur gemeldet. In der folgenden Tabelle werden die einzelnen Ausführungsphasen beschrieben sowie die Granularität, mit der der Status der Befehlsausführung gemeldet wird.
Ausführungsphase | BESCHREIBUNG | Granularität der Statusmeldungen |
---|---|---|
DBCC TABLE CHECK |
Während dieser Phase wird die logische und physische Konsistenz der Objekte in der Datenbank geprüft. | Der Status wird auf Datenbankseitenebene angezeigt. Der Wert der Statusmeldung wird nach jeweils 1000 geprüften Datenbankseiten aktualisiert. |
DBCC TABLE REPAIR |
Während dieser Phase werden Datenbankreparaturen vorgenommen, sofern REPAIR_FAST , REPAIR_REBUILD oder REPAIR_ALLOW_DATA_LOSS angegeben ist und Objektfehler vorliegen, die behoben werden müssen. |
Der Status wird auf der Ebene einzelner Reparaturvorgänge angezeigt. Der Zähler wird für jeden abgeschlossenen Reparaturvorgang aktualisiert. |
DBCC ALLOC CHECK |
Während dieser Phase werden Zuordnungsstrukturen in der Datenbank geprüft. Hinweis: Mit DBCC CHECKALLOC werden die gleichen Überprüfungen ausgeführt. |
Der Status wird nicht angezeigt. |
DBCC ALLOC REPAIR |
Während dieser Phase werden Datenbankreparaturen vorgenommen, sofern REPAIR_FAST , REPAIR_REBUILD oder REPAIR_ALLOW_DATA_LOSS angegeben ist und Zuordnungsfehler vorliegen, die behoben werden müssen. |
Der Status wird nicht angezeigt. |
DBCC SYS CHECK |
Während dieser Phase werden die Datenbanksystemtabellen geprüft. | Der Status wird auf Datenbankseitenebene angezeigt. Der Wert der Statusmeldung wird nach jeweils 1000 geprüften Datenbankseiten aktualisiert. |
DBCC SYS REPAIR |
Während dieser Phase werden Datenbankreparaturen vorgenommen, sofern REPAIR_FAST , REPAIR_REBUILD oder REPAIR_ALLOW_DATA_LOSS angegeben ist und Systemtabellenfehler vorliegen, die behoben werden müssen. |
Der Status wird auf der Ebene einzelner Reparaturvorgänge angezeigt. Der Zähler wird für jeden abgeschlossenen Reparaturvorgang aktualisiert. |
DBCC SSB CHECK |
Während dieser Phase werden SQL Server Service Broker-Objekte geprüft. Hinweis: Wenn DBCC CHECKTABLE ausgeführt wird, erfolgt diese Phase nicht. |
Der Status wird nicht angezeigt. |
DBCC CHECKCATALOG |
Während dieser Phase wird die Konsistenz der Datenbankkataloge überprüft. Hinweis: Wenn DBCC CHECKTABLE ausgeführt wird, erfolgt diese Phase nicht. |
Der Status wird nicht angezeigt. |
DBCC IVIEW CHECK |
Während dieser Phase wird die logische Konsistenz aller in der Datenbank vorhandenen indizierten Sichten geprüft. | Der Status wird auf Ebene der einzelnen geprüften Datenbanksichten gemeldet. |
Informative Anweisungen
- DBCC INPUTBUFFER
- DBCC SHOWCONTIG
- DBCC OPENTRAN
- DBCC OUTPUTBUFFER
- DBCC PROCCACHE
- DBCC SHOW_STATISTICS
- DBCC SQLPERF
- DBCC TRACESTATUS
- DBCC USEROPTIONS
Überprüfungsanweisungen
- DBCC CHECKALLOC
- DBCC CHECKCATALOG
- DBCC CHECKCONSTRAINTS
- DBCC CHECKDB
- DBCC CHECKFILEGROUP
- DBCC CHECKIDENT
- DBCC CHECKTABLE
Verwaltungsanweisungen
- DBCC CLEANTABLE
- DBCC DBREINDEX
- DBCC DROPCLEANBUFFERS
- DBCC FREEPROCCACHE
- DBCC INDEXDEFRAG
- DBCC SHRINKDATABASE
- DBCC SHRINKFILE
- DBCC UPDATEUSAGE
Verschiedene Anweisungen
- DBCC dllname (FREE)
- DBCC HELP
- DBCC FLUSHAUTHCACHE
- DBCC TRACEOFF
- DBCC FREESESSIONCACHE
- DBCC TRACEON
- DBCC FREESYSTEMCACHE
- DBCC CLONEDATABASE (Gilt für: SQL Server 2014 (12.x) Service Pack 2 und höher)