SQL Server 2005 - nieudokumentowane polecenia DBCC

Opublikowano: 6 lutego 2007 | Zaktualizowano: 20 lutego 2007

W systemie zarządzania bazami danych Microsoft SQL Server 2005, podobnie jak w poprzednich wersjach tego systemu, administrator dysponuje ogromnym arsenałem składni i poleceń, spośród których niebagatelną rolę odgrywają polecenia z rodziny DBCC. Niniejszy artykuł pozwoli każdemu administratorowi odkryć ukryte przez twórców systemu składnie DBCC, które mogą znaleźć zastosowanie w pracy z systemem SQL Server.

Uwaga!

Firma Microsoft oraz autor artykułu nie odpowiadają w żaden sposób za wszelkie szkody powstałe w wyniku wykorzystania opisywanych w niniejszym artykule nieudokumentowanych poleceń. Wszelkie operacje użytkownik wykonuje na swoją własną odpowiedzialność.

*
Zawartość strony
WstępWstęp
Jak zobaczyć to, czego nie widaćJak zobaczyć to, czego nie widać
Wspomnienia z systemu Microsoft SQL Server 2000Wspomnienia z systemu Microsoft SQL Server 2000
Wybrane nieudokumentowane polecenia DBCC i ich zastosowaniaWybrane nieudokumentowane polecenia DBCC i ich zastosowania
PodsumowaniePodsumowanie
Dodatek A – Pełna lista poleceń DBCC (SQL Server 2005)Dodatek A – Pełna lista poleceń DBCC (SQL Server 2005)
Dodatek B – Pomoc dla poleceń DBCC (SQL Server 2005 i 2000)Dodatek B – Pomoc dla poleceń DBCC (SQL Server 2005 i 2000)

Wstęp

Polecenia DBCC (ang. DataBase Console Command) istnieją w systemie Microsoft SQL Server odkąd sięgam pamięcią. Znajdują zastosowanie zarówno w codziennych zadaniach administracyjnych (np. DBCC SHRINKFILE – polecenie służące do zmniejszania rozmiaru lub opróżniania wybranego pliku bazy danych), jak również w sytuacjach wyjątkowych lub problematycznych (np. DBCC CHECKDB – polecenie służące do sprawdzania integralności logicznej i fizycznej obiektów w bazie danych).

Na pierwszy rzut oka Microsoft SQL Server 2005 dysponuje ponad trzydziestoma poleceniami DBCC (a przynajmniej opisy tylu poleceń można znaleźć w Books Online, wersja z 17 lipca 2006). Okazuje się jednak, że liczba poleceń tego typu jest o wiele większa – jest ich dokładnie 109. Zdecydowana większość tych poleceń jest zatem nieudokumentowana przez firmę Microsoft. Dzieje się tak dlatego, że polecenia DBCC są wewnętrznymi poleceniami systemu SQL Server, wykorzystywanymi między innymi przez systemowe procedury składowane. Wykorzystywanie tych poleceń w sposób bezpośredni w środowiskach produkcyjnych niesie za sobą ryzyko utraty stabilności systemu lub stworzenia problemów, których usunięcie nie jest wspierane przez producenta systemu. Dlatego na samym początku pragnę wyraźnie zaznaczyć, że samo testowanie jakichkolwiek nieudokumentowanych - lub oznaczonych w oficjalnej dokumentacji jako „not supported” („nie wspierane”) - składni powinno odbywać się w dedykowanych środowiskach deweloperskich lub testowych (dobrym rozwiązaniem do tego celu jest też wykorzystanie wirtualizacji i programów, takich jak Microsoft Virtual Server 2005 R2).

Z uwagi na ilość nieudokumentowanych składni DBCC, w artykule nie znajdziesz opisu każdego z tych poleceń, a jedynie kilku z nich. Wybrałem te składnie, które udało mi się dotąd zastosować w środowiskach testowych i dla których znajduję zastosowania w różnych sytuacjach.

Do początku stronyDo początku strony

Jak zobaczyć to, czego nie widać

W systemie Microsoft SQL Server dostępne jest polecenie DBCC HELP, które pozwala wyświetlić pomoc (skrótowy opis składni) do wybranego polecenia DBCC lub listę wszystkich poleceń z tej rodziny. Jednak domyślnie polecenie DBCC HELP zwróci pomoc jedynie do tych poleceń, których opis znajduje się w oficjalnej dokumentacji systemu. Poniższy fragment kodu ilustruje, w jaki sposób można wyświetlić listę dostępnych poleceń DBCC oraz opis składni wybranego polecenia (w tym przypadku DBCC SQLPERF).

DBCC HELP('?')
DBCC HELP('SQLPERF')

Aby uzyskać dostęp do nieudokumentowanych poleceń DBCC, należy ustawić na poziomie sesji (sugerowane) lub serwera flagę 2588. Opisu tej flagi, podobnie jak opisu większości zaimplementowanych flag, nie znajdziesz w dokumentacji systemu. Poniższy fragment kodu pokazuje, w jaki sposób ustawić wspomnianą flagę na poziomie sesji.

DBCC TRACEON(2588)

Po ustawieniu flagi 2588 polecenie DBCC HELP działa również z nieudokumentowanymi poleceniami DBCC - to znaczy dołącza te polecenia do ogólnej listy dostępnych poleceń DBCC oraz pozwala uzyskać mini pomoc na temat każdego z tych poleceń. W materiałach dołączonych do artykułu znajdziesz skrypt, umożliwiający wygenerowanie pełnej listy opisów składni poleceń DBCC.

Nieudokumentowane flagi, podobnie jak nieudokumentowane polecenia DBCC, służą twórcom i testerom systemu Microsoft SQL Server do testowania różnych funkcjonalności systemu (często nie wspieranych w środowiskach produkcyjnych – przykładem jest flaga 1400 służąca do włączania obsługi funkcjonalności Database Mirroring w systemie Microsoft SQL Server 2005 bez zainstalowanego dodatku Service Pack 1), dokonywania wewnętrznych (często zaawansowanych) ustawień oraz zwracania pewnych (również najczęściej bardzo zaawansowanych i przy tym niepotrzebnych w codziennej administracji) informacji na temat działania systemu i baz danych.

Do początku stronyDo początku strony

Wspomnienia z systemu Microsoft SQL Server 2000

Zgodnie z oczekiwaniami, w porównaniu z poprzednią wersją systemu, Microsoft SQL Server 2005 dysponuje nieco inną gamą poleceń DBCC. Niektóre polecenia zostały całkowicie usunięte z systemu, inne można w systemie znaleźć, ale nie mają żadnego wpływu na system (nie działają z nową wersją systemu), jeszcze inne mają zmienioną składnię. Te ostatnie znajdziesz na liście w Dodatku A na końcu niniejszego artykułu.

Po pierwsze – inna flag

W systemie Microsoft SQL Server 2000 odpowiednikiem wspomnianej w artykule flagi 2588 z najnowszej wersji systemu jest flaga 2520. A zatem, by włączyć obsługę nieudokumentowanych poleceń DBCC przez polecenie DBCC HELP, w poprzedniej wersji systemu należy wykonać następujący fragment kodu:

DBCC TRACEON(2520)

Po drugie – usunięte polecenia DBCC

Jeśli używałeś lub nadal używasz poleceń DBCC w systemie Microsoft SQL Server 2000, musisz wiedzieć, że wiele spośród tych poleceń zostało usuniętych z najnowszej wersji systemu. W SQL Server 2005 nie znajdziesz poniższych poleceń DBCC (jeśli używałeś któregokolwiek z poniższych poleceń, musisz zmodyfikować swoje skrypty, by można je było wykorzystać w systemie SQL Server 2005):

DBCC ADDUSEROBJECT 
DBCC BALANCEFACTOR 
DBCC BUFCOUNT 
DBCC CHECKDBTS 
DBCC DES 
DBCC DROPUSEROBJECT 
DBCC GETVALUE 
DBCC IOTRACE 
DBCC LOCKOBJECTSCHEMA 
DBCC MATVIEW 
DBCC MEMOSPY
DBCC MEMUSAGE 
DBCC MONITOREVENTS 
DBCC NEWALLOC 
DBCC PERFLOG
DBCC PGLINKAGE 
DBCC PROCBUF
DBCC PSS
DBCC REBUILD_LOG 
DBCC ROW_LOCK 
DBCC SHRINKDB 
DBCC TAB 
DBCC TAPE_CONTROL 
DBCC TEXTALL 
DBCC TEXTALLOC 
DBCC UPGRADEDB 
DBCC USAGEGOVERNOR 
DBCC WAKEUP

Po trzecie – polecenia, które mają zamienniki lub nie działają

Niektóre polecenia DBCC z poprzedniej wersji systemu doczekały się swoich zamienników w nowej wersji. Stało się tak głównie za sprawą pojawienia się nowych składni języka Transact-SQL oraz nowych klas obiektów w bazach danych.

Koniec z DBCC SHOWCONTIG

Pierwszym poleceniem, które jest dostępne w systemie SQL Server 2005, ale istnieje już dla niego zamiennik zalecany przez firmę Microsoft, jest polecenie DBCC SHOWCONTIG. W SQL Server 2000 polecenie to służy do wykrywania fragmentacji indeksów (fragmentacja jest zjawiskiem nie zawsze korzystnym, ponieważ ze wzrostem fragmentacji danych, rośnie ilość stron, jaką musi przeszukiwać system w czasie wykonywania zapytań). W SQL Server 2005 zamiennikiem dla tego polecenia jest dynamiczna funkcja sys.dm_db_index_physical_stats. Przykład użycia tej funkcji prezentuje poniższy fragment kodu (dokładny opis funkcji znajdziesz w Books Online).

USE AdventureWorks
GO
SELECT * FROM sys.dm_db_index_physical_stats(
					db_id('AdventureWorks'),
					object_id('HumanResources.Department'),
					NULL,NULL,DEFAULT)

Niewątpliwą zaletą funkcji sys.dm_db_index_physical_stats w porównaniu z poleceniem DBCC SHOWCONTIG jest większa czytelność wyniku. Odczytując kolumnę avg_fragmentation_in_percent można podjąć decyzję, czy i jak dokonać defragmentacji.

ALTER INDEX zamiast poleceń DBCC

Po wykryciu za pomocą funkcji sys.dm_db_index_physical_stats stopnia fragmentacji indeksów można przystąpić do procesu defragmentacji.

Do defragmentacji indeksów w systemie SQL Server 2000 wykorzystywane były polecenia DBCC INDEXDEFRAG oraz DBCC DBREINDEX. W SQL Server 2005 pojawiło się nowe polecenie, które zastępuje oba wspomniane polecenia DBCC i dodatkowo powoduje, że składnie języka Transact-SQL są bardziej ujednolicone i czytelne. Poleceniem tym jest ALTER INDEX. Polecenie to może być wykonane z opcjami REORGANIZE oraz REBUILD. Opcja REORGANIZE służy do defragmentacji (reorganizacji) indeksów, czyli jest zamiennikiem dla polecenia DBCC INDEXDEFRAG. Poniższy fragment kodu jest przykładem użycia składni ALTER INDEX...REORGANIZE.

ALTER INDEX PK_Department_DepartmentID 
ON HumanResources.Department 
REORGANIZE

Z kolei opcja REBUILD zastępuje polecenie DBCC DBREINDEX i służy do przebudowy indeksu (usunięcia i stworzenia indeksu na nowo z takimi samymi ustawieniami). Firma Microsoft zaleca, by stosować tę opcję dla indeksów, których procentowa fragmentacja przekracza 30%. Poniższy fragment kodu jest przykładem użycia składni ALTER INDEX...REBUILD.

ALTER INDEX PK_Department_DepartmentID 
ON HumanResources.Department 
REBUILD

Obie operacje – reorganizacja i przebudowa indeksów – w systemie SQL Server 2005 mogą być wykonywane na pojedynczych partycjach (edycje Enterprise i Developer). Ponadto operacja przebudowy indeksów w edycji Enterprise może być wykonywana online (tzn. tabela, na której jest założony przebudowywany indeks, będzie dostępna dla użytkowników w trakcie przebudowy indeksu). Operacja reorganizacji jest zawsze wykonywana online.

Inne polecenia DBCC, o których należy zapomnieć

Poniższa tabela przedstawia polecenia DBCC, które albo nie działają, albo mają zamienniki w systemie SQL Server 2005.

Polecenie DBCCZamiennik / komentarz

DBCC DBREPAIR

DROP DATABASE

DBCC NEWALLOC

DBCC CHECKALLOC

DBCC PINTABLE
DBCC UNPINTABLE

Polecenia nie mają żadnego wpływu na działanie systemu.

DBCC TEXTALL
DBCC TEXTALLOC

DBCC CHECKDB
DBCC CHECKTABLE

Do początku stronyDo początku strony

Wybrane nieudokumentowane polecenia DBCC i ich zastosowania

Czas na przykłady nieudokumentowanych poleceń DBCC. Wybrałem zaledwie pięć poleceń spośród kilkudziesięciu. Zastosowania dla tych poleceń znalazłem zarówno w rozwiązywaniu rzeczywistych problemów, jak i na potrzeby szkoleniowe.

DBCC IND

Opis: wyświetla tabelę - listę stron używanych przez indeksy założone na określonej tabeli.
Zastosowanie: edukacja, precyzyjne określanie położenia danych w plikach.
Składnia: dbcc ind ( { 'dbname' | dbid }, { 'objname' | objid }, { indid | 1 | 0 | -1 | -2 } [, partition_number] )
Komentarz: trzecim argumentem jest ID indeksu (0 – sterta, 1 – indeks clustered, 2 lub więcej – indeks nonclustered); -1 i -2 to specjalne opcje – użycie pierwszej powoduje wyświetlenie informacji o wszystkich indeksach, użycie drugiej powoduje wyświetlenie tylko rekordów dotyczących stron IAM (ang. Index Allocation Map) dla wszystkich indeksów.

Przykład użycia:

DBCC IND(N'AdventureWorks',N'HumanResources.Department',-1)

DBCC PAGE

Opis: wyświetla wydruk ilustrujący strukturę wybranej strony danych.
Zastosowanie: edukacja, precyzyjne określanie położenia danych na stronach danych.
Składnia: dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Komentarz: czwartym argumentem jest styl wyświetlania – determinuje ilość wyświetlanych detali; przed użyciem polecenia DBCC PAGE niezbędne jest włączenie flagi 3604.

Przykład użycia:

DECLARE @dbid int
SET @dbid = DB_ID(N'AdventureWorks')
DBCC TRACEON(3604)
DBCC PAGE(@dbid,1,4301,1)

DBCC FLUSHPROCINDB

Opis: usuwa zawartość cache’u procedur dla wybranej bazy danych.
Zastosowanie: opróżnianie cache’u w czasie testów wydajnośćiowych zapytań i procedur składowanych (polecenie jest szczególnie przydatne, gdy jednocześnie na jednej instancji pracuje wiele osób w wielu bazach danych i zależy nam na tym, by nie czyścić cache’u wszystkich baz naraz).
Składnia: dbcc flushprocindb (dbid)
Komentarz: polecenie może być używane w środowiskach testowych jako zamiennik dla polecenia DBCC FREEPROCCACHE.

Przykład użycia:

DECLARE @dbid int
SET @dbid = DB_ID('AdventureWorks')
DBCC FLUSHPROCINDB(@dbid)

USE AdventureWorks
GO
SELECT sql FROM sys.syscacheobjects
WHERE dbid = @dbid

DBCC LOG

Opis: wyświetla zawartość dziennika transakcji (lub jego fragmentu) dla wybranej bazy danych.
Zastosowanie: edukacja, przeglądanie rodzajów i czasów wykonania operacji w bazie danych.
Składnia: dbcc log (dbname | dbid [,{0|1|2|3|4}[,['lsn','[0x]x:y:z']| ['numrecs',num]|['xdesid','x:y']|['extent','x:y']|['pageid','x:y']| ['objid',{x,'y'}]|['logrecs',{'lop'|op}...]|['output',x, ['filename','x']]...]]])
Komentarz: polecenie nie wyświetla składni Transact-SQL wykonywanych poleceń.

Przykład użycia:

DBCC LOG(N'AdventureWorks',3)

DBCC LOGINFO

Opis: wyświetla listę wirtualnych plików dziennika transakcji (VLF – ang. Virtual Log File) wybranej bazy danych.
Zastosowanie: edukacja, wykrywanie statusu wirtualnych plików dziennika transakcji.
Składnia: dbcc loginfo [({'dbname' | dbid})]
Komentarz: wynikowa kolumna Status pokazuje, czy dany wirtualny plik jest aktywny (Status=2), czy nie (Status=0); cykliczny zapis transakcji może nastąpić jedynie do nieaktywnego pliku wirtualnego; brak nieaktywnego pliku wirtualnego niesie za sobą powiększenie pliku dziennika transakcji albo wstrzymanie możliwości zapisu do bazy danych (jeśli plik dziennika transakcji osiągnął maksymalny rozmiar lub nie ustawiono opcji automatycznego powiększania pliku dziennika transakcji).

Przykład użycia:

DBCC LOGINFO(N'AdventureWorks')
Do początku stronyDo początku strony

Podsumowanie

Nieudokumentowane polecenia DBCC otwierają nowe możliwości lepszego poznania działania systemu Microsoft SQL Server 2005. Niewykluczone, że użyjesz niektórych z tych poleceń w środowiskach testowych, by uzyskać informacje, których nie da się zwrócić przy użyciu opisanych w dokumentacji składni lub by przetestować różnego rodzaju specyficzne zachowania systemu. Powtórzę jednak, że nie powinieneś używać tych poleceń w środowiskach produkcyjnych. Jeśli użyciem nieudokumentownego polecenia spowodujesz niestabilne działanie lub nawet awarię systemu, nie licz na to, że pracownicy wsparcia technicznego firmy Microsoft rozwiążą Twój problem. Nie są w żaden sposób do tego zobligowani. A więc jeszcze raz powtarzam – ostrożnie z tym, co domyślnie producent ukrywa przed użytkownikiem, ponieważ nigdy ukrywanie to nie jest bezcelowe i najczęściej ma po prostu chronić użytkownika nim samym. I na koniec – powodzenia w odkrywaniu funkcjonalności oferowanych przez nieudokumentowane polecenia DBCC! Może właśnie Ty opiszesz któreś z nich w innym artykule dla polskiej strony TechNet!?

Wszystkie wymienione w artykule (nie licząc dodatku) fragmenty kodu były testowane na systemie Microsoft SQL Server 2005 Developer Edition z dodatkiem SP2CTP (wersja systemu 9.00.3027).

Do początku stronyDo początku strony

Dodatek A – Pełna lista poleceń DBCC (SQL Server 2005)

Poniżej prezentuję listę poleceń DBCC, jakie są dostępne w systemie Microsoft SQL Server 2005. Polecenia zostały podzielone na następujące kategorie:

Udokumentowane polecenie DBCC, istniało w poprzedniej wersji systemu, składnia nie uległa zmianie*:

DBCC CHECKIDENT
DBCC CLEANTABLE
DBCC CONCURRENCYVIOLATION
DBCC DBREINDEX
DBCC DROPCLEANBUFFERS
DBCC FREE
DBCC FREEPROCCACHE
DBCC HELP
DBCC OPENTRAN
DBCC PINTABLE
DBCC PROCCACHE
DBCC SHOWCONTIG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
DBCC SQLPERF
DBCC TRACEOFF
DBCC TRACEON
DBCC TRACESTATUS
DBCC UNPINTABLE
DBCC UPDATEUSAGE
DBCC USEROPTIONS

Udokumentowane polecenie DBCC, istniało w poprzedniej wersji systemu, składnia uległa zmianie:

DBCC CHECKALLOC
DBCC CHECKCATALOG
DBCC CHECKCONSTRAINTS
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC DBREPAIR
DBCC INDEXDEFRAG
DBCC INPUTBUFFER
DBCC OUTPUTBUFFER
DBCC SHOW_STATISTICS

Udokumentowane polecenie DBCC, nie istniało w poprzedniej wersji systemu:

DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE

Nieudokumentowane polecenie DBCC, istniało w poprzedniej wersji systemu, składnia nie uległa zmianie:

DBCC ACTIVECURSORS
DBCC ADDEXTENDEDPROC
DBCC ADDINSTANCE
DBCC BUFFER
DBCC BYTES
DBCC CACHESTATS
DBCC CALLFULLTEXT
DBCC CHECKPRIMARYFILE
DBCC COLLECTSTATS
DBCC CONFIG
DBCC CURSORSTATS
DBCC DBINFO
DBCC DBRECOVER
DBCC DBTABLE
DBCC DEBUGBREAK
DBCC DELETEINSTANCE
DBCC DROPEXTENDEDPROC
DBCC DUMPTRIGGER
DBCC ERRORLOG
DBCC FILEHEADER
DBCC FLUSHPROCINDB
DBCC ICECAPQUERY
DBCC INCREMENTINSTANCE
DBCC INVALIDATE_TEXTPTR
DBCC INVALIDATE_TEXTPTR_OBJID
DBCC LATCH
DBCC LOCK
DBCC LOGINFO
DBCC MEMOBJLIST
DBCC MEMORYMAP
DBCC MEMORYSTATUS
DBCC NO_TEXTPTR
DBCC PERFMON
DBCC READPAGE
DBCC RENAMECOLUMN
DBCC RESOURCE
DBCC RULEOFF
DBCC RULEON
DBCC SETCPUWEIGHT
DBCC SETINSTANCE
DBCC SETIOWEIGHT
DBCC SHOWDBAFFINITY
DBCC SHOWFILESTATS
DBCC SHOWOFFRULES
DBCC SHOWONRULES
DBCC SHOWWEIGHTS
DBCC SQLMGRSTATS
DBCC THAW_IO
DBCC USEPLAN
DBCC WRITEPAGE

Nieudokumentowane polecenie DBCC, istniało w poprzedniej wersji systemu, składnia uległa zmianie:

DBCC AUDITEVENT
DBCC AUTOPILOT
DBCC CLEARSPACECACHES
DBCC DBREINDEXALL
DBCC DETACHDB
DBCC EXTENTINFO
DBCC FIXALLOCATION
DBCC FLUSH
DBCC FREEZE_IO
DBCC IND
DBCC LOG
DBCC PAGE
DBCC PRTIPAGE
DBCC SHOWTABLEAFFINITY
DBCC SHOWTEXT
DBCC STACKDUMP
DBCC TEC

Nieudokumentowane polecenie DBCC, nie istniało w poprzedniej wersji systemu:

DBCC CACHEPROFILE
DBCC FORCEGHOSTCLEANUP
DBCC MAPALLOCUNIT
DBCC METADATA
DBCC MOVEPAGE
DBCC OPTIMIZER_WHATIF
DBCC PERSISTSTACKHASH
DBCC SEMETADATA

* Pojawienie się lub brak opcji NO_INFOMSGS w opisie polecenia nie jest traktowane jako zmiana składni.

Do początku stronyDo początku strony

Dodatek B – Pomoc dla poleceń DBCC (SQL Server 2005 i 2000)

Pomoc dla poleceń DBCC w SQL Server 2005

dbcc activecursors [(spid)]

dbcc addextendedproc (function_name, dll_name)

dbcc addinstance (objectname, instancename)

dbcc auditevent (eventclass, eventsubclass, success, loginname, rolename, dbusername, loginid, objname, _ 
_ servername, providername)

dbcc autopilot (typeid [, dbid [, {maxQueryCost | tabid [, indid [, pages [, flag [, rowcounts]]]]} ]])

dbcc buffer ( {'dbname' | dbid} [, objid [, number [, printopt={0|1|2} ][, dirty | io | kept | rlock | _
_ ioerr | hashed ]]])

dbcc bytes ( startaddress, length )

dbcc cacheprofile ( actionid [, bucketid])

dbcc cachestats 

dbcc callfulltext  - system sp use only

dbcc checkalloc 
(
     [ { 'database_name' | database_id | 0 } ]
     [ , NOINDEX |
     { REPAIR_ALLOW_DATA_LOSS
     | REPAIR_FAST
     | REPAIR_REBUILD
     } ]
)
     [ WITH
         {
             [ ALL_ERRORMSGS ]
           	 [ , [ NO_INFOMSGS ] ]
           	 [ , [ TABLOCK ] ]
             [ , [ ESTIMATEONLY ] ]
         }
     ]

dbcc checkcatalog 
[
    ( { 'database_name' | database_id | 0 } )
]
    [ WITH NO_INFOMSGS ]

dbcc checkconstraints 
[
    ( { 'table_name' | table_id | 'constraint_name' | constraint_id } )
]
    [ WITH
        { ALL_CONSTRAINTS | ALL_ERRORMSGS }
        [ , [ NO_INFOMSGS ] ]
    ]

dbcc checkdb 
(
    { 'database_name' | database_id | 0 }
    [ , NOINDEX
    | { REPAIR_ALLOW_DATA_LOSS
    | REPAIR_FAST
    | REPAIR_REBUILD
    } ]
)
    [ WITH
        {
            [ ALL_ERRORMSGS ]
            [ , [ NO_INFOMSGS ] ]
            [ , [ TABLOCK ] ]
            [ , [ ESTIMATEONLY ] ]
            [ , [ PHYSICAL_ONLY ] ]
            [ , [ DATA_PURITY ] ]
        }
    ]

dbcc checkfilegroup 
(
    [ { 'filegroup_name' | filegroup_id | 0 } ]
    [ , NOINDEX ]
)
    [ WITH
        {
            [ ALL_ERRORMSGS ]
            [ , [ NO_INFOMSGS ] ]
            [ , [ TABLOCK ] ]
            [ , [ ESTIMATEONLY ] ]
        }
    ]

dbcc checkident 
(
    'table_name'
    [ , { NORESEED
        | { RESEED [ , new_reseed_value ] }
    } ]
)
    [ WITH NO_INFOMSGS ]

dbcc checkprimaryfile ( {'FileName'} [, opt={0|1|2|3} ])

dbcc checktable 
(
    { 'table_name' | 'view_name' }
    [ , NOINDEX
    | index_id
    | { REPAIR_ALLOW_DATA_LOSS
    | REPAIR_FAST
    | REPAIR_REBUILD
    } ]
)
    [ WITH
        {
            [ ALL_ERRORMSGS ]
            [ , [ NO_INFOMSGS ] ]
            [ , [ TABLOCK ] ]
            [ , [ ESTIMATEONLY ] ]
            [ , [ PHYSICAL_ONLY ] ]
        }
    ]

dbcc cleantable 
(
    { 'database_name' | database_id | 0 }
    , { 'table_name' | table_id | 'view_name' | view_id }
    [ , batch_size ]
)
    [ WITH NO_INFOMSGS ]

dbcc clearspacecaches ('dbname'|dbid, 'table_name'|table_id, 'index_name'|index_id [, partition_number])

dbcc collectstats (on | off)

dbcc concurrencyviolation ( reset | display | startlog | stoplog )

dbcc config 

dbcc cursorstats ([spid [,'clear']])

dbcc dbinfo [('dbname')]

dbcc dbrecover (dbname [, IgnoreErrors])

dbcc dbreindex 
(
    'table_name'
    [ , 'index_name' [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ]

dbcc dbreindexall (dbname|dbid[, type_bitmap])

dbcc dbrepair ('dbname', markdirty | {dropdevice, int} | {repairindex, int, int})

dbcc dbtable [({'dbname' | dbid})]

dbcc debugbreak 

dbcc deleteinstance (objectname, instancename)

dbcc detachdb ( 'dbname' [, fKeep_Fulltext_Index_File (0 | 1)] )

dbcc dropcleanbuffers [ WITH NO_INFOMSGS ]

dbcc dropextendedproc (function_name)

dbcc dumptrigger ({'BREAK', {0 | 1}} | 'DISPLAY' | {'SET', exception_number} | {'CLEAR', exception_number})

dbcc errorlog 

dbcc extentinfo [({'dbname'| dbid | 0} [, {'tablename' | tableid} [, {'indexname' | indexid | -1} _
_ [, partition_number]]])]

dbcc fileheader [( {'dbname' | dbid} [, fileid])

dbcc fixallocation [({'ADD' | 'REMOVE'}, {'PAGE' | 'SINGLEPAGE' | 'EXTENT' | 'MIXEDEXTENT'}, filenum, _ 
_ pagenum [, objectid, indexid, partitionid, allocUnitId])

dbcc flush ('data' | 'log', dbname | dbid)

dbcc flushprocindb (dbid)

dbcc forceghostcleanup [({'dbname' | dbid})]

dbcc dll_name( FREE ) [ WITH NO_INFOMSGS ]
e.g. dbcc xp_sample( FREE )

dbcc freeproccache [ WITH NO_INFOMSGS ]

dbcc freesessioncache 

dbcc freesystemcache 
(
    'ALL'
)
    [ WITH
        {
            [ MARK_IN_USE_FOR_REMOVAL ]
            [, [ NO_INFOMSGS ] ]
        }
    ]

dbcc freeze_io (dbname | dbid)

dbcc help 
(
    { 'dbcc_statement' | @dbcc_statement_var | '?' }
)
    [ WITH NO_INFOMSGS ]

dbcc icecapquery ('dbname' [, stored_proc_name [, #_times_to_icecap  (-1 infinite, 0 turns off)]])
Use 'dbcc icecapquery (printlist)' to see list of SP's to profile.
Use 'dbcc icecapquery (icecapall)' to profile all SP's.

dbcc incrementinstance (objectname, countername, instancename, value)

dbcc ind ( { 'dbname' | dbid }, { 'objname' | objid }, { nonclustered indid | 1 | 0 | -1 | -2 } _
_ [, partition_number] )

dbcc indexdefrag 
(
    { 'database_name' | database_id | 0 }
    , { 'table_name' | table_id | 'view_name' | view_id }
    , { 'index_name' | index_id }
    , { partition_number | 0 }
)
    [ WITH NO_INFOMSGS ]

dbcc inputbuffer 
(
    session_id [ , request_id ]
)
    [WITH NO_INFOMSGS ]

dbcc invalidate_textptr (textptr)

dbcc invalidate_textptr_objid (objid)

dbcc latch ( address [, 'owners'] [, 'stackdumps'])

dbcc lock ([{'DUMPTABLE' | 'DUMPSTATS' | 'RESETSTATS' | 'HASH'}]|[{'STALLREPORTTHESHOLD', stallthreshold}])

dbcc log (dbname | dbid [,{0|1|2|3|4}[,['lsn','[0x]x:y:z']|['numrecs',num]|['xdesid','x:y']| _ 
_ ['extent','x:y']|['pageid','x:y']|['objid',{x,'y'}]|['logrecs',{'lop'|op}...]|['output',x, _ 
_ ['filename','x']]...]]])

dbcc loginfo [({'dbname' | dbid})]

dbcc mapallocunit (I8AllocUnitId | {I4part, I2part})

dbcc memobjlist [(memory object)]

dbcc memorymap 

dbcc memorystatus 

dbcc metadata ({'print' [, printopt = {0 |1}] | 'drop' | 'clone' [, '<NewObjectName>' | ....]}, {'object' _
_ [, 'type',...}, {Id | Name}, [{Ownerid | Ownername}], [{Dbid | Dbname}]])

dbcc movepage ( {'dbname' | dbid}, src_filenum, src_pagenum [, des_filenum [, des_pagenum 
_ [, des_pagenum2]]]) [WITH NO_INFOMSGS]

dbcc no_textptr (table_id , max_inline)

dbcc opentran 
[
    ( [ { 'database_name' | database_id | 0 } ] )
]
    [ WITH
        {
            [ TABLERESULTS ]
            [ , [ NO_INFOMSGS ]
        }
    ]

dbcc optimizer_whatif property, value

dbcc outputbuffer 
(
    session_id [ , request_id ]
)
    [ WITH NO_INFOMSGS ]

dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])

dbcc perfmon 

dbcc persiststackhash (input_hashfile, BUFLATCH_TIMEOUT | ATTENTION | OUTOFLOCKS | LATCH_ATTN | _ 
_ OUTOFLOG | OUTOFMEM | SOS | NO_BUFFS [, SKIPLAST | INCLUDELAST] [,output_hashfile])

dbcc pintable (database_id, table_id)

dbcc proccache [ WITH NO_INFOMSGS ]

dbcc prtipage (dbname | dbid, objid | objname, indexid | indexname	[, partition_number [, level]]). _ 
_ No partition specified uses the first partition. No level specified prints root page.

dbcc readpage ({'dbname'|dbid}, fileid, pageid, formatstr [, printopt = { 0 | 1} ])

dbcc renamecolumn (object_name, old_name, new_name)

dbcc resource 

dbcc ruleoff ({ rulenum | rulestring } [, { rulenum | rulestring } ]+)

dbcc ruleon (  rulenum | rulestring } [, { rulenum | rulestring } ]+)

dbcc semetadata (object id | name, index id | name [, partition id])

dbcc setcpuweight (weight)

dbcc setinstance (objectname, countername, instancename, value)

dbcc setioweight (weight)

dbcc show_statistics 
(
    { 'table_name' | 'view_name' }
    , target
)
    [ WITH
        {
            [ NO_INFOMSGS ]
            < option > [ , n ]
        }
    ]
< option > ::=
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM

dbcc showcontig 
[ (
    { 'table_name' | table_id | 'view_name' | view_id }
    [ , { 'index_name' | index_id } ]
) ]
    [ WITH
        {
            [ ALL_INDEXES
            | FAST [ , ALL_INDEXES ]
            | TABLERESULTS [ , { ALL_INDEXES } ] ]
            [ , { FAST | ALL_LEVELS } ]
            [ , NO_INFOMSGS ]
        }
    ]

dbcc showdbaffinity 

dbcc showfilestats [(file_num)]

dbcc showoffrules 

dbcc showonrules 

dbcc showtableaffinity (table_id | table_name [, partition_number])

dbcc showtext ('dbname' | dbid, {textpointer | {fileid, pageid, slotid [,option]}})

dbcc showweights 

dbcc shrinkdatabase 
(
    { 'database_name' | database_id | 0 }
    [ , target_percent ]
    [ , { NOTRUNCATE | TRUNCATEONLY } ]
)
    [ WITH NO_INFOMSGS ]

dbcc shrinkfile 
(
    { 'file_name' | file_id }
    {
        [ , EMPTYFILE]
        | [ [, target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
    }
)
    [ WITH NO_INFOMSGS ]

dbcc sqlmgrstats 

dbcc sqlperf ( LOGSPACE ) [ WITH NO_INFOMSGS ]

({IOSTATS | LRUSTATS | NETSTATS | RASTATS [, CLEAR]} | {THREADS} | {LOGSPACE})

dbcc stackdump [( ['dump description',] {{uid[, spid [, batchid [, ecid]]} | {threadId, 'THREADID'}]} )]

dbcc tec [( uid[, spid[, batchid[, ecid]] )]

dbcc thaw_io (dbname | dbid)

dbcc traceoff 
(
    trace# [ , ...n ] [, -1]
)
    [ WITH NO_INFOMSGS ]

dbcc traceon 
(
    trace# [ , ...n ] [, -1]
)
    [ WITH NO_INFOMSGS ]

dbcc tracestatus 
(
    [ [ trace# [ , ...n ] ] [ , -1 ] ]
)
    [ WITH NO_INFOMSGS ]

dbcc unpintable (dbid, table_id)

dbcc updateusage 
(
    { 'database_name' | database_id | 0 }
    [ , { 'table_name' | 'view_name' | object_id }
    [ , { 'index_name' | index_id } ] ]
)
    [ WITH
        {
            [ NO_INFOMSGS ]
            [ , [ COUNT_ROWS ] ]
        }
    ]

dbcc useplan [(number_of_plan)]

dbcc useroptions [ WITH NO_INFOMSGS ]

dbcc writepage ({'dbname' | dbid}, fileid, pageid, offset, length, data)


Pomoc dla poleceń DBCC w SQL Server 2000

activecursors [(spid)]

addextendedproc (function_name, dll_name)

addinstance (objectname, instancename)

adduserobject (name)

auditevent (eventclass, eventsubclass, success, loginname, rolename, dbusername, loginid)

autopilot (typeid, dbid, tabid, indid, pages [,flag])

balancefactor (variance_percent)

bufcount [(number_of_buffers)]

buffer ( {'dbname' | dbid} [, objid [, number [, printopt={0|1|2} ][, dirty | io | kept | rlock | ioerr | _
_ hashed ]]])

bytes ( startaddress, length )

cachestats 

callfulltext  - system sp use only

checkalloc [('database_name'[, NOINDEX | REPAIR])] [WITH NO_INFOMSGS[, ALL_ERRORMSGS][, ESTIMATEONLY]]
Repair Options - REPAIR_ALLOW_DATA_LOSS (default) | REPAIR_REBUILD | REPAIR_FAST

checkcatalog [('database_name')] [WITH NO_INFOMSGS]

checkconstraints [( 'tab_name' | tab_id | 'constraint_name' | constraint_id )] [WITH ALL_CONSTRAINTS | _
_ ALL_ERRORMSGS]

checkdb [('database_name'[, NOINDEX | REPAIR])] [WITH NO_INFOMSGS[, ALL_ERRORMSGS][, PHYSICAL_ONLY] _ 
_ [, ESTIMATEONLY][, TABLOCK]]
Repair Options - REPAIR_ALLOW_DATA_LOSS (default) | REPAIR_REBUILD | REPAIR_FAST

checkdbts (dbid, newTimestamp)

checkfilegroup [( [ {'filegroup_name' | filegroup_id} ] [, NOINDEX] )] [WITH NO_INFOMSGS[, ALL_ERRORMSGS] _ 
_ [, PHYSICAL_ONLY][, ESTIMATEONLY][, TABLOCK]]

checkident ('table_name'[, { NORESEED | {RESEED [, new_reseed_value] } } ] )

checkprimaryfile ( {'FileName'} [, opt={0|1|2|3} ])

checktable ('table_name'[, {NOINDEX | index_id | REPAIR}]) [WITH NO_INFOMSGS[, ALL_ERRORMSGS] _
_ [, PHYSICAL_ONLY][, ESTIMATEONLY][, TABLOCK]]
Repair Options - REPAIR_ALLOW_DATA_LOSS (default) | REPAIR_REBUILD | REPAIR_FAST

cleantable ('database_name'|database_id, 'table_name'|table_id, [batch_size])

cacheprofile [( {actionid} [, bucketid])

clearspacecaches ('database_name'|database_id, 'table_name'|table_id, 'index_name'|index_id)

collectstats (on | off)

concurrencyviolation (reset | display | startlog | stoplog)

config 

cursorstats ([spid [,'clear']])

dbinfo [('dbname')]

dbrecover (dbname [, IgnoreErrors])

dbreindex ('table_name' [, index_name [, fillfactor ]]) [WITH NO_INFOMSGS]

dbreindexall (db_name/db_id, type_bitmap)

dbrepair ('dbname', DROPDB [, NOINIT])
DROP DATABASE is the preferred method of dropping a damaged database.
('dbname', readpage | writepage | repairindex | syscatfix | markdirty | dropdevice, int, int)

dbtable [({'dbname' | dbid})]

debugbreak 

deleteinstance (objectname, instancename)

des [( {'dbname' | dbid} [, {'objname' | objid} ])]

detachdb [( 'dbname' )]

dropcleanbuffers 

dropextendedproc (function_name)

dropuserobject ('object_name')

dumptrigger ({'BREAK', {0 | 1}} | 'DISPLAY' | {'SET', exception_number} | {'CLEAR', exception_number})

errorlog 

extentinfo [({'database_name'| dbid | 0} [, {'table_name' | table_id} [, {'index_name' | index_id | -1}]])]

fileheader [( {'dbname' | dbid} [, fileid])

fixallocation [({'ADD' | 'REMOVE'}, {'PAGE' | 'SINGLEPAGE' | 'EXTENT' | 'MIXEDEXTENT'}, filenum, pagenum _
_ [, objectid, indid])

flush ('data' | 'log', dbid)

flushprocindb (database)

free dll_name (FREE)
e.g. DBCC xp_sample (FREE)

freeproccache 

freeze_io (db)

getvalue (name)

help ('dbcc_command' | '?')

icecapquery ('dbname', stored_proc_name [, #_times_to_icecap  (-1 infinite, 0 turns off)])
Use 'dbcc icecapquery (printlist)' to see list of SP's to profile.
Use 'dbcc icecapquery (icecapall)' to profile all SP's.

incrementinstance (objectname, countername, instancename, value)

ind ( { 'dbname' | dbid }, { 'objname' | objid }, { indid | 0 | -1 | -2 } )

indexdefrag ({dbid | dbname | 0}, {tableid | tablename}, {indid | indname})

inputbuffer (spid)

invalidate_textptr (textptr)

invalidate_textptr_objid (objid)

iotrace ( { 'dbname' | dbid | 0 | -1 }, { fileid | 0 }, bufsize, [ { numIOs | -1 } [, { timeout (sec) _
_| -1 } [, printopt={ 0 | 1 }]]] )

latch ( address [, 'owners'] [, 'stackdumps'])

lock ([{'DUMPTABLE' | 'DUMPSTATS' | 'RESETSTATS' | 'HASH'}]|[{'STALLREPORTTHESHOLD', stallthreshold}])

lockobjectschema ('object_name')

log ([dbid[,{0|1|2|3|4}[,['lsn','[0x]x:y:z']|['numrecs',num]|['xdesid','x:y']|['extent','x:y']| _
_ ['pageid','x:y']|['objid',{x,'y'}]|['logrecs',{'lop'|op}...]|['output',x,['filename','x']]...]]])

loginfo [({'database_name' | dbid})]

memobjlist [(memory object)]

memorymap 

memorystatus 

memospy 

memusage ([IDS | NAMES], [Number of rows to output])

monitorevents ('sink' [, 'filter-expression'])

newalloc - please use checkalloc instead

no_textptr (table_id , max_inline)

opentran [({'dbname'| dbid})] [WITH TABLERESULTS[,NO_INFOMSGS]]

outputbuffer (spid)

page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ][, cache={0|1} ])

perflog 

perfmon 

pglinkage (dbid, startfile, startpg, number, printopt={0|1|2}, targetfile, targetpg, order={1|0})

pintable (database_id, table_id)

procbuf [({'dbname' | dbid}[, {'objname' | objid}[, nbufs[, printopt = { 0 | 1 } ]]] )]

proccache 

prtipage (dbid, objid, indexid [, [{{level, 0} | {filenum, pagenum}}] [,printopt]])

pss [(uid[, spid[, printopt = { 1 | 0 }]] )]

readpage ({ dbid, 'dbname' }, fileid, pageid, formatstr [, printopt = { 0 | 1} ])

rebuild_log (dbname [, filename])

renamecolumn (object_name, old_name, new_name)

resource 

row_lock (dbid, tableid, set) - Not Needed

ruleoff ({ rulenum | rulestring } [, { rulenum | rulestring } ]+)

ruleon (  rulenum | rulestring } [, { rulenum | rulestring } ]+)

setcpuweight (weight)

setinstance (objectname, countername, instancename, value)

setioweight (weight)

show_statistics ('table_name', 'target_name')

showcontig (table_id | table_name [, index_id | index_name] [WITH FAST, ALL_INDEXES, TABLERESULTS _
_ [,ALL_LEVELS]])

showdbaffinity 

showfilestats [(file_num)]

showoffrules 

showonrules 

showtableaffinity (table)

showtext ('dbname', {textpointer | {fileid, pageid, slotid [,option]}})

showweights 

shrinkdatabase ({dbid | 'dbname'}, [freespace_percentage [, {NOTRUNCATE | TRUNCATEONLY}]])

shrinkdb  is no longer supported. Please use shrinkdatabase instead

shrinkfile ({fileid | 'filename'}, [compress_size [, {NOTRUNCATE | TRUNCATEONLY | EMPTYFILE}]])

sqlmgrstats 

sqlperf (LOGSPACE)
({IOSTATS | LRUSTATS | NETSTATS | RASTATS [, CLEAR]} | {THREADS} | {LOGSPACE})

stackdump [( {uid[, spid[, ecid]} | {threadId, 'THREADID'}] )]

tab ( dbid, objid )

tape_control {'query' | 'release'}[,('\\.\tape<n>')]

tec [( uid[, spid[, ecid]] )]

textall [({'database_name'|database_id}[, 'FULL' | FAST] )]

textalloc ({'table_name'|table_id}[, 'FULL' | FAST])

thaw_io (db)

traceoff [( tracenum [, tracenum ... ] )]

traceon [( tracenum [, tracenum ... ] )]

tracestatus (trace# [, ...trace#])

unpintable (dbid, table_id)

updateusage ({'database_name'| 0} [, 'table_name' [, index_id]]) [WITH [NO_INFOMSGS] [,] COUNT_ROWS]

upgradedb (db)

usagegovernor (command, value)

useplan [(number_of_plan)]

useroptions 

wakeup (spid)

writepage ({ dbid, 'dbname' }, fileid, pageid, offset, length, data)


Paweł Potasiński

Paweł Potasiński (Microsoft Certified Trainer, Asseco Business Solutions S.A.)
Programista i konsultant w firmie Asseco Business Solutions S.A., gdzie kontynuuje odkrywanie tajników systemów SQL Server. Wcześniej od roku 2000 prace głównie przy projektach aplikacji webowych i serwerach baz danych (m.in. SQL Server 7.0/2000). W latach 2003-2007 pracował jako szkoleniowiec w ABC Data Centrum Edukacyjne. Posiada certyfikaty firmy Microsoft, m.in.: MCDBA, MCSE, MCSD, MCITP i MCT.


Do początku stronyDo początku strony