SQL Server 2000 ——DBCC命令

http://blog.163.com/ruifeng_00/blog/static/6904584200971291923462/

 

 

1、定義web

微軟當初從SYBASE將DBCC是做爲數據庫一致性檢查(Database Consistency Check)命令擴展過來的,但通過後來的擴展,DBCC命令的功能範圍增大,如今稱之爲數據庫控制檯命令(Database Console Command)。sql

2、公開的DBCC命令數據庫

2.1驗證類緩存

對數據庫、文件組、表、索引、數據庫頁的分配、系統目錄進行的驗證操做。服務器

 

DBCC CHECKDB架構

對索引結構和數據完整性進行檢查以外,它還包括對分配進行檢查、對數據存儲中使用的頁信息進行驗證。併發

彷彿是對數據庫執行 DBCC CHECKALLOC 語句和每一個表執行DBCC CHECKTABLE 語句。工具

 

DBCC CHECKFILEGROUP性能

對數據庫中的全部文件組執行 DBCC CHECKFILEGROUP 語句與運行單個 DBCC CHECKDB 語句相同。惟一的差異在於:若是表的索引在不一樣文件組上,則將屢次檢查該表和索引(對包含表或其索引的每一個文件組檢查一次)。學習

 

DBCC CHECKTABLE

對錶或索引視圖的數據、索引及 textntext 和 image 頁的完整性檢查。

包括:

索引和數據頁是否已正確連接。

索引是否按照正確的順序排列。

各指針是否一致。

每頁上的數據是否均合理。

頁面偏移量是否合理。

text、ntext 和 image 頁的連接及大小進行檢查。

 

DBCC CHECKALLOC

對數據庫中全部數據頁的分配進行驗證。

默認狀況下,DBCC CHECKALLOC 不獲取表鎖。相反,它獲取架構鎖,該鎖在 DBCC CHECKALLOC 正在執行時阻止對元數據(即DDL)進行更改,但容許更改數據(即DML)。

 

DBCC NEWALLOC

等同於 DBCC CHECKALLOC,爲了向後兼容。

 

注:

1)以上DBCC 語句收集信息,而後掃描日誌以查找所作的任何其它更改,並在掃描的結尾將兩組信息合併在一塊兒以產生數據的一致性檢查視圖;

2)DBCC每每大量佔用 CPU 及磁盤,由於 DBCC 必須讀取每一個數據頁,而這須要從磁盤到內存全都檢查一遍(除非數據頁已高速緩存到內存中)。當系統上有許多活動而運行 DBCC 時,系統活動和DBCC的性能都會被削弱。在SQL SERVER 2005之後,在執行這些 DBCC 命令之一時,數據庫引擎建立一個數據庫快照,並將其置於在事務上一致的狀態,以防止在執行這些命令時出現阻塞和併發問題。而後,DBCC 命令對該快照運行檢查。DBCC 命令完成後,將刪除該快照。(在沒法建立快照的狀況下,或指定了TABLOCK,則DBCC將獲取一個共享表鎖來得到所需的一致性,也就是說並不能保證DBCC徹底擺脫阻塞的可能。)

 

DBCC CHECKCATALOG

 syscolumns 中的每種數據類型在 systypes 中是否都有一個匹配項進行檢查,同時還對 sysobjects 中的每一個表和視圖在 syscolumns 中是否都至少有一列進行檢查。

 

DBCC CHECKCONSTRAINTS

對錶的全部外鍵約束和檢查約束的查詢(針對可經過ALTER TABLE啓用/禁用的約束)。

 

DBCC CHECKIDENT

檢查指定表的當前標識值,若有必要,還對標識值進行更正。

 

注:幾種標識列的維護方法

--重置爲1

DBCC CHECKIDENT('tablename',RESEED,1)

--清表後會自動回到原始

TRUNCATE TABLE tablename

--新增列

ALTER TABLE tablename ADD newcolname INT IDENTITY(1,1) not null

--設置選項就能夠insert自定義的id值了

SET IDENTITY_INSERT Tablename ON

 

2.二、查看類

DBCC OPENTRAN

查看日誌中的活動事務(即未COMMIT或ROLLBACK的TRAN)。

 

DBCC INPUTBUFFER

返回指定SESSION在SQL SERVER中的最後一條語句,這裏的BUFFER應該指的是BUFFER POOL中的PROC CACHE,即保存SQL語句、過程及執行計劃的地方。此返回結果可用於對某個會話的跟蹤。

 

DBCC OUTPUTBUFFER

以十六進制或 ASCII 格式返回指定的SESSION中最後一條語句的輸出數據(若是有輸出流的話,好比SELECT語句)。

 

DBCC PROCCACHE

以表格格式顯示有關過程緩存區的信息。SQL Server 性能監視器使用 DBCC PROCCACHE 以得到有關過程高速緩存的信息。

 

DBCC SHOWCONTIG

顯示指定的表的數據和索引的碎片信息。一般依此判斷是否須要對索引進行維護。在2005及之後的版本中請改用 sys.dm_db_index_physical_stats。

 

DBCC SHOW_STATISTICS

返回的統計結果指明索引的選擇性(所返回的密度越低,選擇性越大),並提供用於肯定索引對查詢優化器是否有用的基本信息。所返回的結果基於索引的分發步驟。若要查看更新統計的最近日期,請使用STATS_DATE()。

 

DBCC SQLPERF

返回當前實例中全部數據庫的日誌使用率。能夠本身根據每一個數據庫中sysfiles裏的size和maxsize算出這個比例。

 

DBCC TRACESTATUS

返回跟蹤標記號列和狀態列,指明跟蹤標記是 ON (1) 仍是 OFF (0)。

 

DBCC USEROPTIONS

返回當前會話的SET選項,每自定義一個SET在結果集中即爲返回,未返回的項表示未進行自定義設置,即便用默認設置。也可使用SESSIONPROPERTY()查詢會話中某個SET的設置。

 

DBCC CONCURRENCYVIOLATION

顯示有關在 SQL Server 2000 Desktop Engine 或 SQL Server 2000 我的版上併發執行 5 個以上批處理的次數的統計。

2005及之後此命令已經是無效命令。

 

2.三、維護類

DBCC INDEXDEFRAG

對錶或視圖上的索引的葉級進行碎片整理,以便頁的物理順序與葉節點從左到右的邏輯順序相匹配,從而提升索引掃描性能。

2005中使用ALTER INDEX的REORGANIZE選項代替此命令。

 

DBCC DBREINDEX

重建表的某個或所有索引。

2005中使用ALTER INDEX的REBUILD選項代替此命令。

 

DBCC SHRINKDATABASE

以每一個文件爲單位,對指定數據庫的全部數據和日誌文件收縮未使用空間:包括已刪除的數據、文件自動增加所未使用的空間及其一些不能被使用的碎片空間,這些未使用空間可經過sp_sapceused獲得。執行命令後將分配頁從文件末尾移動到文件前部的未分配頁,而後進行壓縮,只有指定了TRUNCATEONLY選項,纔會將空間釋放給操做系統。

 

注:

一、DBCC SHRINKDATABASE僅僅是將空間給收縮了,並無對數據或索引作碎片整理,因此並不會帶來性能上的改觀;

二、在產生許多未使用空間的操做(如截斷表、日誌或刪除表)後,執行收縮操做最有效,產生碎片較少。過分頻繁使用,不只影響數據庫的正常運行,還會增長數據庫的碎片程度。

 

DBCC SHRINKFILE

收縮相關數據庫的指定數據文件或日誌文件,一次一個。

 

DBCC DROPCLEANBUFFERS

從緩衝池中清除數據緩衝區中的內容,而不用關閉和從新啓動服務器。在進行查詢優化時,可用此方法來生成各類所需的執行計劃。

 

DBCC FREEPROCCACHE

從緩衝池中清除過程緩衝區中的內容,以強制執行計劃的重編譯。

 

DBCC UPDATEUSAGE

報告和更正sysindexes 表的不正確內容,可能會致使sp_spaceused 產生不正確的空間使用報表。

 

DBCC CLEANTABLE

收回用 ALTER TABLE DROP COLUMN 語句除去可變長度列或 text 列後的空間。而不收回固定長度列除去後的空間。

 

DBCC DBREPAIR

除去損壞的數據庫,爲了向後兼容,請使用DROP DATABASE來刪除。

 

2.四、其餘

DBCC ROWLOCK

對錶啓用插入行鎖定 (IRL) 操做。SQL SERVER默認啓用行級鎖定,並可能提高爲頁或表鎖定。

2000 及之後此命令已經是無效命令。

 

DBCC PINTABLE

將表標記爲駐留,當表中的頁由普通的 Transact-SQL 語句讀入到高速緩存中時,這些頁將標記爲內存駐留頁。

適用於將小的、常常引用的表保存在內存中。將小表的頁一次性讀入到內存中,未來對其數據的全部引用都不須要從磁盤讀入。

若是駐留大表,則該表在開始時會使用一大部分高速緩存,而不爲系統中的其它表保留足夠的高速緩存。若是所駐留的表比高速緩存大,則該表會填滿整個高速緩存。

查看哪一個表是否駐留在內存的方法是:

    select objectproperty(object_id('tablename'),‘tableispinned')

2005及之後此命令已經是無效命令。

 

DBCC UNPINTABLE

將表標記爲不在內存駐留,不會致使當即將表從數據高速緩存中清空。而指定若是須要空間以從磁盤中讀入新頁,高速緩存中的表的全部頁均可以清空。

2005及之後此命令已經是無效命令。

 

DBCC HELP

顯示DBCC命令的語法。

 

DBCC dllname (FREE)

當執行擴展存儲過程時,DLL 仍保持由 SQL Server 的實例加載,直到關閉服務器爲止。此語句容許從內存中卸載 DLL,而不用關閉 SQL Server。Dllname指定擴展存儲過程的dll文件名。執行 sp_helpextendedproc 以顯示當前由 SQL Server 裝載的 DLL 文件。

 

DBCC TRACEON

啓用指定的跟蹤標記。跟蹤標記用於臨時設置服務器的特定特徵或關閉特定行爲。

 

DBCC TRACEOFF

禁用指定的跟蹤標記。

3、未公開的DBCC命令

注:

既然是未公開的,那麼就不要在開發環境中使用,沒有人會對可能出現的問題負責。但做爲對於SQL SERVER的學習工具,仍是能夠一用的。

 

3.一、性能

事實上咱們能夠經過性能監視器來得到相似的信息,但可能沒有結果集來得更具體。

DBCC SQLPERF

如下是SQLPERF的一些Undocumented的參數:

DBCC SQLPERF(UMSSTATS) 提供有關sql server 線程管理狀況的統計信息,能夠用來檢查是否CPU使用達到瓶頸,最關鍵的一個參考數據num runnable,代表當前有多少個線程再等待運行,若是大於等於2,考慮CPU達到瓶頸

DBCC SQLPERF(WAITSTATS):提供有關SQL Server read-ahead activity的信息

DBCC SQLOERF(IOSTATS):提供主要的SQL server讀和寫的信息

DBCC SQLPERF(RASTATS):提供SQL Server read-ahead 活動的信息

DBCC SQLPERF(THREADS):提供每一個SQL Server線程的I/O,CPU及內存使用狀況的信息。

 

DBCC CACHESTATS

顯示SQL Server緩衝區的統計信息,如命中率、使用內存頁數等

 

DBCC CURSORSTATS

顯示SQL Server遊標使用時的統計信息

 

DBCC MEMORYSTATUS

列出一個詳細分類,分類中顯示SQL SERVER緩存如何分配,包括緩存的活動。

 

DBCC SQLMGRSTATS

顯示SQL SERVER緩衝中先讀和預讀準備的SQL語句

 

3.二、存儲引擎

詳見:Some Useful Undocumented SQL Server 7.0 and 2000 DBCC Commands

 

如下DBCC命令須要打開3604標記,不然命令運行成功,但不會看到結果。

DBCC TRACEON (3604)

 

DBCC ERRORLOG

初始化SQL Server的錯誤日誌文件,使用這個命令,能夠截斷當前的服務器日誌(不要理解成數據庫日誌文件),主要是生成一個新的服務器日誌。能夠考慮設置一個調度任務,每週執行這個命令自動截斷服務器日誌。

使用存儲過程sp_cycle_errorlog也能夠達到一樣的目的。

 

DBCC PSS (user,spid,1)

顯示當前鏈接到SQL Server服務器的進程信息

 

DBCC RESOURCE

顯示服務器當前使用的資源狀況

 

DBCC DBINFO (db_name)

顯示數據庫的結構信息

 

DBCC DBTABLE

顯示管理數據的表(數據字典)信息

 

DBCC IND (db_name,table_name,index_id)

查看某個索引頁面信息,事實上查看聚焦索引頁面就是查看數據頁面

 

DBCC PRTIPAGE

查看某個索引頁面的每行指向的頁面號

 

DBCC PAGE(db_name,pagenum)

查看某個數據頁面信息

 

DBCC TAB (db_id,object_id)

查看某個表的全部數據頁面的信息

 

DBCC LOG (db_name,3)  (-1~4)

查看某個數據庫使用的事物日誌信息

 

DBCC REBUILDLOG

重建SQL Server事務日誌文件,能夠用在還原無日誌數據文件時重建一個初始日誌

 

DBCC BUFFER (db_name,object_name,int(要查看的緩衝區個數))

顯示緩衝區的頭部信息和頁面信息

 

DBCC PROCBUF

顯示過程緩衝池中的緩衝區頭和存儲過程頭

 

DBCC FLUSHPROCINDB (db_id)

清除SQL Server服務器內存中的某個數據庫的存儲過程緩存內容

 

DBCC BYTES ( startaddress, length )

從給定的內存地址清空指定長度的字節數,這個功能仍是不要用的比較好。