SQLServer DBCC用法

轉載自:http://www.hongkexy.com/index.php/archives/1572

 

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 完成的所有修復,包括需要較長時間的修復(如重建索引),執行這些修復時不會有丟失數據的危險。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章