msdn:http://msdn.microsoft.com/zh-cn/library/ms188796.aspx
DBCC是SQL Server提供的一組控制台命令,功能很強大,掌握一些必要的語句,對操作資料庫有不少協助,所以決定整理一下,發現已有不少類似的整理,減少了不少工作,歸類如下:
一、DBCC 協助類命令
* DBCC HELP('?')
查詢所有的DBCC命令
* DBCC HELP('命令')
查詢指定的DBCC命令的文法說明
* DBCC USEROPTIONS
返回當前串連的活動(設定)的SET選項
二、DBCC 檢查驗證類命令
* DBCC CHECKALLOG ('資料庫名稱')
檢查指定資料庫的磁碟空間分配結構的一致性
* DBCC CHECKCATALOG ('資料庫名稱')
檢查指定資料庫的系統資料表內和系統資料表間的一致性
* DBCC CHECKCONSTAINTS ('tablename')
檢查指定表上的指定約束或所有約束的完整性
* DBCC CHECKDB
檢查資料庫中的所有對象的分配和結構完整性
* DBCC CHECKFILEGROUP
檢查指定檔案組中所有表在當前資料庫中的分配和結構完整性
* DBCC CHECKTABLE
檢查指定表或索引檢視表的資料、索引及test、ntest和image頁的完整性
* DBCC CHECKIDENT
檢查指定的當前標識值
* DBCC SQLPERF(UMSSTATS) undocumented in BOL
可以用來檢查是否CPU使用達到瓶頸
最關鍵的一個參考資料num runnable,表明當前有多少個線程再等待運行
如果大於等於2,考慮CPU達到瓶頸
三、DBCC 維護類命令
* DBCC CLEANTABLE ('db_name','table_name')
回收Alter table drop column語句刪除可變長度列或text
* DBCC DBREINDEX
重建指定資料庫的一個或多個索引
* DBCC INDEXDEFRAG
對錶或視圖上的索引和非叢集索引進行磁碟重組
* DBCC PINTABLE (db_id,object_id)
將表資料駐留在記憶體中
查看哪些表駐留在記憶體的方法是:
select objectproperty(object_id('tablename'),‘tableispinned')
* DBCC UNPINTABLE (db_id,object_id)
撤消駐留在記憶體中的表
* DBCC SHRINKDATABASE(db_id,int)
收縮指定資料庫的資料檔案和記錄檔大小
* DBCC SHRINKFILE(file_name,int)
收縮相關資料庫的指定資料檔案和記錄檔大小
四、DBCC 效能調節命令
* DBCC dllname(FREE)
sp_helpextendedproc 查看載入的擴充PROC
在記憶體中卸載指定的擴充過程動態連結程式庫(dll)
* DBCC DROPCLEANBUFFERS
從緩衝池中刪除所有緩衝區
* DBCC FREEPROCCACHE
從過程緩衝區刪除所有元素
* DBCC INPUTBUFFER
顯示從客戶機發送到伺服器的最後一個語句
* DBCC OPENTRAN (db_name)
查詢某個資料庫執行時間最久的事務,由哪個程式擁有
* DBCC SHOW_STATISTICS
顯示指定表上的指定目標的當前分布統計資訊
* DBCC SHOWCONTIG
顯示指定表的資料和索引的片段資訊
* DBCC SQLPERF
(logspace) 查看各個DB的日誌情況
(iostats) 查看IO情況
(threads) 查看線程消耗情況
返回多種有用的統計資訊
* DBCC CACHESTATS
顯示SQL Server 2000記憶體的統計資訊
* DBCC CURSORSTATS
顯示SQL Server 2000遊標的統計資訊
* DBCC MEMORYSTATS
顯示SQL Server 2000記憶體是如何細分的
* DBCC SQLMGRSTATS
顯示緩衝中先讀和預讀準備的SQL語句
五、DBCC 未公開的命令
* DBCC ERRLOG
初始化SQL Server 2000的錯誤記錄檔檔案
* DBCC FLUSHPROCINDB (db_id)
清除SQL Server 2000伺服器記憶體中的某個資料庫的預存程序緩衝內容
* DBCC BUFFER (db_name,object_name,int(緩衝區個數))
顯示緩衝區的頭部資訊和頁面資訊
* DBCC DBINFO (db_name)
顯示資料庫的結構資訊
* DBCC DBTABLE
顯示管理資料的表(資料字典)資訊
* DBCC IND (db_name,table_name,index_id)
查看某個索引使用的頁面資訊
* DBCC REBUILDLOG
重建SQL Server 2000交易記錄檔
* DBCC LOG (db_name,3) (-1--4)
查看某個資料庫使用的事物日誌資訊
* DBCC PAGE
查看某個資料庫資料頁面資訊
* DBCC PROCBUF
顯示過程緩衝池中的緩衝區頭和預存程序頭
* DBCC PRTIPAGE
查看某個索引頁面的每行指向的頁面號
* DBCC PSS (user,spid,1)
顯示當前串連到SQL Server 2000伺服器的進程資訊
* DBCC RESOURCE
顯示伺服器當前使用的資源情況
* DBCC TAB (db_id,object_id)
顯示資料頁面的結構
六、DBCC跟蹤標記
跟蹤標記用於臨時設定伺服器的特定特徵或關閉特定行為,常用於診斷效能問題或調試預存程序或複雜的電腦系統
* DBCC TRACEON (3604)
開啟跟蹤標記
* DBCC TRACEOFF
關閉跟蹤標記
* DBCC TRACESTATS
查看跟蹤標記狀態
七、使用 DBCC 結果集輸出
許多 DBCC 命令可以產生表格格式的輸出(使用 WITH TABLERESULTS 選項)。該資訊可裝載到表中以便將來使用。以下顯示一個樣本指令碼:
CREATE TABLE DBCCResult (
DBCCFlag INT,
Result INT
)
INSERT INTO DBCCResult
EXEC ('DBCC TRACESTATUS (-1) WITH NO_INFOMSGS')
SELECT *
FROM DBCCResult
八、官方使用DBCC的建議
1、在系統使用率較低時運行 CHECKDB。
2、請確保未同時執行其它磁碟 I/O 操作,例如磁碟備份。
3、將 tempdb 放到單獨的磁碟系統或快速磁碟子系統中。
4、允許 tempdb 在磁碟機上有足夠的擴充空間。 使用帶有 ESTIMATE ONLY 的 DBCC
估計 tempdb 將需要多少空間。
5、避免運行佔用大量 CPU 的查詢或批次工作。
6、在 DBCC 命令運行時,減少活動事務。
7、使用 NO_INFOMSGS 選項顯著減少處理和 tempdb 的使用。
8、考慮使用帶有 PHYSICAL_ONLY 選項的 DBCC CHECKDB 來檢查頁和記錄首部
的物理結構。當硬體導致的錯誤被置疑時,這個操作將執行快速檢查。
在發布,訂閱複製時要用伺服器實名時可以這樣:
select * from sysservers (可以找到原來伺服器的名稱)
exec sp_dropserver 'jmsql9' (刪除原來的伺服器名)
exec sp_addserver 'jmSQL9' ,LOCAL (改為新的伺服器名)
ALTER DATABASE [jm] SET SINGLE_USER (改為單一使用者模式)
DBCC CHECKDB("databasename",REPAIR_REBUILD) WITH TABLOCK (修複資料庫)
DBCC CHECKTABLE("tablename",repair_rebuild) with tablock (修複表)
DBCC DBREINDEX ('t_icitem' , ' ') 修複此表所有的索引。
ALTER DATABASE [jm] SET MULTI_USER (改為多使用者模式)
REPAIR_ALLOW_DATA_LOSS:執行由REPAIR_REBUILD 完成的所有修複,包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文字物件。這些修複可能會導致一些資料丟失。修複操作可以在使用者事務下完成以允許使用者復原所做的更改。如果復原修複,則資料庫仍會含有錯誤,應該從備份進行恢複。如果由於所提供修複等級的緣故遺漏某個錯誤的修複,則將遺漏任何取決於該修複的修複。修複完成後,備份資料庫。
REPAIR_FAST 進行小的、不耗時的修複操作,如修複非叢集索引中的附加鍵。這些修複可以很快完成,並且不會有遺失資料的危險。
REPAIR_REBUILD 執行由REPAIR_FAST 完成的所有修複,包括需要較長時間的修複(如重建索引),執行這些修複時不會有遺失資料的危險。