笔记322 部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程)也能帮助用户了解和监控SQLSERVER的运行情况 2013-7-14

笔记322 部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程)也能帮助用户了解和监控SQLSERVER的运行情况  2013-7-14

  1 --部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程)也能帮助用户了解和监控SQLSERVER的运行情况  2013-7-14
  2 
  3 --DBCC语句,DBCC语句是SQL2005的数据库控制台命令
  4 --DBCC语句不仅能检查数据库的性能和活动,还能检查数据库的物理和逻辑一致性
  5 --许多DBCC语句能够对检测到的问题进行修复,例如
  6 
  7 1DBCC CHECKTABLE
  8 --检查组成表或索引视图的所有页和结构的完整性
  9 --例如,检查AdventureWorks数据库中的HumanResources.Employee表的数据页完整性
 10 --请执行
 11 USE [AdventureWorks]
 12 GO
 13 DBCC CHECKTABLE('HumanResources.Employee')
 14 --如果发现有错误可以运行下面这句尝试修复
 15 DBCC CHECKTABLE('HumanResources.Employee',REPAIR_ALLOW_DATA_LOSS)
 16 
 17 
 18 --当使用DBCC 语句验证表、数据库文件甚至整个数据库的完整性时,如果报告了任何错误,可以重新
 19 --执行DBCC命令,并且使用REPAIR_ALLOW_DATA_LOSS 参数尝试修复报告的所有错误,但是这些修复可能
 20 --会导致某些数据丢失
 21 
 22 --http://social.technet.microsoft.com/Forums/zh-CN/a0774905-2353-46ad-981c-695f280c2472/sql-server2000-select-823-2421-
 23 --安装SQL Server 2000的服务器有次突然宕机了,重启后select *查询某张表时出现报错信息“服务器:消息 823,级别 24,状态2,行1”,
 24 --请问该如何解决?现在web应用页面查询报错,无法显示数据。
 25 --报错服务器:消息 823,级别 24,状态2,行1,连接中断
 26 
 27 --823错误属于硬件错误,这个时候就可以使用下面sql语句修复那一张表
 28 DBCC CHECKTABLE('HumanResources.Employee',REPAIR_ALLOW_DATA_LOSS
 29 
 30 
 31 2DBCC CHECKALLOC
 32 --DBCC CHECKALLOC将检查数据库中所有页的分配,而不管其所属的页类型或对象类型。他还可以验证各种内部结构,这些
 33 --结构可用于跟踪这些页和他们之间的关系
 34 --DBCC CHECKALLOC报告了任何错误,建议通过数据库备份来还原数据库,而不是运行修复。如果备份不存在,则运行修复
 35 --也可纠正报告的错误;但是,纠正这些错误时可能需要删除某些页,进而删除数据
 36 DBCC CHECKALLOC('AdventureWorks')
 37 GO
 38 
 39 
 40 3DBCC CHECKDB
 41 --检查指定数据库中所有对象的分配、结构和逻辑完整性。下面示例将对当前数据库执行DBCC CHECKDB
 42 DBCC CHECKDB('AdventureWorks')
 43 --如果发现有错误,可以尝试使用下面sql语句来修复错误
 44 ---------------------------------------------------------
 45 --设置单用户模式
 46 ALTER DATABASE [GPOSDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
 47 GO
 48 --先使用下面这句
 49 DBCC checkdb([GPOSDB],REPAIR_REBUILD)
 50 --如果上面那句修复不了错误,再使用下面这句
 51 DBCC checkdb([GPOSDB],REPAIR_ALLOW_DATA_LOSS)
 52 --设置多用户模式
 53 ALTER DATABASE [GPOSDB] SET MULTI_USER
 54 GO
 55 -------------------------------------------------------------
 56 --运行DBCC CHECKDB命令,相当于依次运行下面DBCC检查语句
 57 --(1)对数据库运行DBCC CHECKALLOC
 58 --(2)对数据库中的每个表和视图运行DBCC CHECKTABLE
 59 --(3)验证数据库中的Service Broker数据
 60 --(4)对数据库运行DBCC CHECKCATALOG
 61 --(5)验证数据库中每个索引视图的内容
 62 
 63 
 64 --这意味着无须再运行DBCC CHECKTABLE、DBCC CHECKALLOC、DBCC CHECKCATALOG
 65 --如果DBCC CHECKDB报告了任何错误,建议从数据看备份还原数据库,而不运行具有repair选项
 66 --的修复语句。如果不存在备份,则运行修复将更正报告的错误。
 67 --但是,使用REPAIR_ALLOW_DATA_LOSS修复错误可能会导致某些数据丢失
 68 
 69 
 70 4DBCC OPENTRAN
 71 --显示指定数据库内最早的活动事务和最旧的分布,以及非分布式复制事务相关的信息
 72 --该语句可以用来查找长时间活动的事务
 73 
 74 5DBCC SQLPERF()
 75 --显示自上次SQLSERVER服务器以来的相关统计信息。
 76 DBCC SQLPERF(LOGSPACE)   --显示所有数据库事务日志的使用情况
 77 DBCC SQLPERF(IOSTATS)    --显示磁盘I/O情况
 78 DBCC SQLPERF(NETSTATS)   --显示网络的活动情况
 79 
 80 --全局函数
 81 --SQLSERVER提供了多个全局变量来记录系统的状态,全局变量为函数形式,作为全局函数引用
 82 --例如:
 83 
 84 SELECT @@MAX_CONNECTIONS  --返回SQLSERVER实例允许同时进行的最大用户连接数
 85 
 86 SELECT @@CONNECTIONS  --显示自上次启动SQLSERVER以来登录或试图登录的次数
 87 
 88 SELECT @@ERROR  --显示TSQL语句的错误代码
 89 
 90 SELECT @@SPID   --显示当前用户的服务器进程标识符id
 91 
 92 SELECT @@PROCID   --显示当前过程的存储过程标识符id
 93 
 94 SELECT @@ROWCOUNT  --显示受上一语句影响的行数
 95 
 96 SELECT @@SERVERNAME  --返回本地SQLSERVER实例名称
 97 
 98 SELECT @@VERSION  --显示SQLSERVER安装日期、版本、处理器类型、Windows操作系统版本号
 99 
100 
101 --系统存储过程
102 --下列SQLSERVER系统存储过程可以作为多监视任务的一种功能强大的备选方法。
103 1EXEC [sys].[sp_monitor]
104 --显示SQLSERVER统计信息,如总的处理事件、读写次数、登录或试图登录SQLSERVER次数
105 
106 
107 2EXEC [sys].[sp_who] @loginame = NULL -- sysname
108 --报告有关当前SQLSERVER用户和进程的快照信息,包括当前正在执行的语句,以及该语句是否被阻塞
109 --[sp_who]结果集将安装spid值升序排序。如果是并行处理,则会为特定的SPID创建子线程。主线程
110 --用spid=xxx和ecid=0标示。其他子线程具有相同的spid=xxx,但ecid>0。因此,该spid号将有多行返回
111 --而且这些行都放置在该spid在整个列表中的所在处。子线程将随机排列,但父线程除外(ecid=0);
112 --在该spid中,父线程首先列出
113 
114 
115 3EXEC [sys].[sp_lock]
116 --用来报告数据库中有关锁的信息
117 --各个列的解释
118 --spid:请求锁的进程的数据库进程id spid号
119 --dbid:数据库标识号
120 --objid:对象标识号。可以在相关数据库中使用object_name()函数来标识对象。值为99时是一种特殊情况,表示
121 --用于记录数据库中页分配的其中一个系统页的锁
122 --indid:索引的索引标识号
123 --type:锁的类型
124 --resource:标识被锁定的资源的值。值的格式取决于type列标识的资源类型
125 --mode:请求的锁模式
126 --status:锁的请求状态,GRANT表示已获取锁;WAIT表示锁被另一个持有锁(模式相冲突)的进程阻塞
127 --;CNVRT表示锁正在从另一种模式进行转换,但是转换被另一个持有锁(模式相冲突)的进程阻塞
128 
129 4EXEC [sys].[sp_spaceused] @objname = N'', -- nvarchar(776)
130     @updateusage = '' -- varchar(5)
131 --显示保留的磁盘空间以及当前数据库中的表、索引视图或Service Broker队列所使用的磁盘空间,或显示
132 --由整个数据库保留和使用的磁盘空间
133 
134 
135 5EXEC [sys].[sp_help] @objname = N'' -- nvarchar(776)
136 --报告有关数据库对象(syssysobjects兼容视图中列出的所有对象)、用户定义数据类型或SQLSERVER2005
137 --提供的数据类型信息
138 --[sp_help]返回的结果集取决于@objname 参数。如果未指定@objname 参数,则[sp_help]将列出当前数据库
139 --中所有对象的对象名称、所有者和对象类型。
140 
141 --例如:列出有关master数据库中每个对象的信息
142 USE master
143 GO
144 EXEC [sys].[sp_help]
145 
146 
147 --例如:显示有关Person.Contact表的信息
148 USE [AdventureWorks]
149 GO
150 EXEC [sys].[sp_help] @objname = N'Person.Contact' -- nvarchar(776)
151 GO

 

posted @ 2013-08-04 21:49 桦仔 阅读(...) 评论(...) 编辑 收藏