文章出處

部分具有統計功能的TSQL語句(例如DBCC語句,全局函數,系統存儲過程)

這些功能也能幫助用戶了解和監控SQLSERVER的運行情況 

DBCC語句,DBCC語句是SQL2005的數據庫控制臺命令

DBCC語句不僅能檢查數據庫的性能和活動,還能檢查數據庫的物理和邏輯一致性

許多DBCC語句能夠對檢測到的問題進行修復,例如

1 1DBCC CHECKTABLE
2 --檢查組成表或索引視圖的所有頁和結構的完整性
3 --例如,檢查AdventureWorks數據庫中的HumanResources.Employee表的數據頁完整性
4 --請執行
5 USE [AdventureWorks]
6 GO
7 DBCC CHECKTABLE('HumanResources.Employee')
8 --如果發現有錯誤可以運行下面這句嘗試修復
9 DBCC CHECKTABLE('HumanResources.Employee',REPAIR_ALLOW_DATA_LOSS) 

當使用DBCC 語句驗證表、數據庫文件甚至整個數據庫的完整性時,如果報告了任何錯誤,可以重新執行DBCC命令,并且使用REPAIR_ALLOW_DATA_LOSS 參數嘗試修復

報告的所有錯誤,但是這些修復可能會導致某些數據丟失

論壇上有一個帖子句出現這個情況

http://social.technet.microsoft.com/Forums/zh-CN/a0774905-2353-46ad-981c-695f280c2472/sql-server2000-select-823-2421-

安裝SQL Server 2000的服務器有次突然宕機了,重啟后select *查詢某張表時出現報錯信息“服務器:消息 823,級別 24,狀態2,行1”,

請問該如何解決?現在web應用頁面查詢報錯,無法顯示數據。報錯服務器:消息 823,級別 24,狀態2,行1,連接中斷

1 --823錯誤屬于硬件錯誤,這個時候就可以使用下面sql語句修復那一張表
2 DBCC CHECKTABLE('HumanResources.Employee',REPAIR_ALLOW_DATA_LOSS

2、DBCC CHECKALLOC

DBCC CHECKALLOC將檢查數據庫中所有頁的分配,而不管其所屬的頁類型或對象類型。他還可以驗證各種內部結構,

這些結構可用于跟蹤這些頁和他們之間的關系

DBCC CHECKALLOC報告了任何錯誤,建議通過數據庫備份來還原數據庫,而不是運行修復。如果備份不存在,則運行修復也可糾正報告的錯誤;

但是,糾正這些錯誤時可能需要刪除某些頁,進而刪除數據

1 DBCC CHECKALLOC('AdventureWorks')
2 GO

3、DBCC CHECKDB

檢查指定數據庫中所有對象的分配、結構和邏輯完整性。下面示例將對當前數據庫執行DBCC CHECKDB

1 DBCC CHECKDB('AdventureWorks')


如果發現有錯誤,可以嘗試使用下面sql語句來修復錯誤

 1 ---------------------------------------------------------
 2 --設置單用戶模式
 3 ALTER DATABASE [GPOSDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
 4 GO
 5 --先使用下面這句
 6 DBCC checkdb([GPOSDB],REPAIR_REBUILD)
 7 --如果上面那句修復不了錯誤,再使用下面這句
 8 DBCC checkdb([GPOSDB],REPAIR_ALLOW_DATA_LOSS)
 9 --設置多用戶模式
10 ALTER DATABASE [GPOSDB] SET MULTI_USER 
11 GO
12 -------------------------------------------------------------

運行DBCC CHECKDB命令,相當于依次運行下面DBCC檢查語句

(1)對數據庫運行DBCC CHECKALLOC

(2)對數據庫中的每個表和視圖運行DBCC CHECKTABLE

(3)驗證數據庫中的Service Broker數據

(4)對數據庫運行DBCC CHECKCATALOG

(5)驗證數據庫中每個索引視圖的內容

這意味著無須再運行DBCC CHECKTABLE、DBCC CHECKALLOC、DBCC CHECKCATALOG

如果DBCC CHECKDB報告了任何錯誤,建議從數據看備份還原數據庫,而不運行具有repair選項的修復語句。

如果不存在備份,則運行修復將更正報告的錯誤。 但是,使用REPAIR_ALLOW_DATA_LOSS修復錯誤可能會導致某些數據丟失

 

4、DBCC OPENTRAN

顯示指定數據庫內最早的活動事務和最舊的分布,以及非分布式復制事務相關的信息 ,該語句可以用來查找長時間活動的事務

 

5、DBCC SQLPERF()

顯示自上次SQLSERVER服務器以來的相關統計信息。

1 DBCC SQLPERF(LOGSPACE)   --顯示所有數據庫事務日志的使用情況
2 DBCC SQLPERF(IOSTATS)    --顯示磁盤I/O情況
3 DBCC SQLPERF(NETSTATS)   --顯示網絡的活動情況

全局函數

SQLSERVER提供了多個全局變量來記錄系統的狀態,全局變量為函數形式,作為全局函數引用

例如:

 1 SELECT @@MAX_CONNECTIONS  --返回SQLSERVER實例允許同時進行的最大用戶連接數
 2 
 3 SELECT @@CONNECTIONS  --顯示自上次啟動SQLSERVER以來登錄或試圖登錄的次數
 4 
 5 SELECT @@ERROR  --顯示TSQL語句的錯誤代碼
 6 
 7 SELECT @@SPID   --顯示當前用戶的服務器進程標識符id
 8 
 9 SELECT @@PROCID   --顯示當前過程的存儲過程標識符id
10 
11 SELECT @@ROWCOUNT  --顯示受上一語句影響的行數
12 
13 SELECT @@SERVERNAME  --返回本地SQLSERVER實例名稱
14 
15 SELECT @@VERSION  --顯示SQLSERVER安裝日期、版本、處理器類型、Windows操作系統版本號

 

系統存儲過程

下列SQLSERVER系統存儲過程可以作為多監視任務的一種功能強大的備選方法。

1 EXEC [sys].[sp_monitor]

顯示SQLSERVER統計信息,如總的處理事件、讀寫次數、登錄或試圖登錄SQLSERVER次數

 

1 EXEC [sys].[sp_who] @loginame = NULL -- sysname

報告有關當前SQLSERVER用戶和進程的快照信息,包括當前正在執行的語句,以及該語句是否被阻塞[sp_who]結果集將安裝spid值升序排序。

如果是并行處理,則會為特定的SPID創建子線程。主線程用spid=xxx和ecid=0標示。其他子線程具有相同的spid=xxx,但ecid>0。

因此,該spid號將有多行返回,而且這些行都放置在該spid在整個列表中的所在處。子線程將隨機排列,但父線程除外(ecid=0);

在該spid中,父線程首先列出

 

1 EXEC [sys].[sp_lock]

用來報告數據庫中有關鎖的信息

各個列的解釋

spid:請求鎖的進程的數據庫進程id spid號

dbid:數據庫標識號

objid:對象標識號。可以在相關數據庫中使用object_name()函數來標識對象。值為99時是一種特殊情況,表示用于記錄數據庫中頁分配的其中一個系統頁的鎖

indid:索引的索引標識號

type:鎖的類型

resource:標識被鎖定的資源的值。值的格式取決于type列標識的資源類型

mode:請求的鎖模式

status:鎖的請求狀態,GRANT表示已獲取鎖;WAIT表示鎖被另一個持有鎖(模式相沖突)的進程阻塞;

CNVRT表示鎖正在從另一種模式進行轉換,但是轉換被另一個持有鎖(模式相沖突)的進程阻塞

 

 

1 EXEC [sys].[sp_spaceused] @objname = N'', -- nvarchar(776)
2     @updateusage = '' -- varchar(5)

顯示保留的磁盤空間以及當前數據庫中的表、索引視圖或Service Broker隊列所使用的磁盤空間,或顯示由整個數據庫保留和使用的磁盤空間

 

1 EXEC [sys].[sp_help] @objname = N'' -- nvarchar(776)

報告有關數據庫對象(syssysobjects兼容視圖中列出的所有對象)、用戶定義數據類型或SQLSERVER2005提供的數據類型信息

[sp_help]返回的結果集取決于@objname 參數。如果未指定@objname 參數,則[sp_help]將列出當前數據庫中所有對象的對象名稱、所有者和對象類型。

 1 --例如:列出有關master數據庫中每個對象的信息
 2 USE master
 3 GO
 4 EXEC [sys].[sp_help] 
 5 
 6 
 7 --例如:顯示有關Person.Contact表的信息
 8 USE [AdventureWorks]
 9 GO
10 EXEC [sys].[sp_help] @objname = N'Person.Contact' -- nvarchar(776)
11 GO

 

如有不對的地方,歡迎大家拍磚o(∩_∩)o


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()