SQL Server 数据库巡检脚本

 
  1. --1.查看数据库版本信息 
  2. select @@version 
  3. --2.查看所有数据库名称及大小 
  4. select sp_helpdb 
  5. --3.查看数据库所在机器的操作系统参数 
  6. exec master..xp_msver 
  7. --4.查看数据库启动的参数 
  8. exec sp_configure 
  9. --5.查看数据库启动时间 
  10. select convert(varchar(30),login_time,120) 
  11. from master..sysprocesseswhere spid=1 
  12. --6.查看数据库服务器名 
  13. select 'Server Name:'+ltrim(@@servername) 
  14. --7.查看数据库实例名 
  15. select 'Instance:'+ltrim(@@servicename)  
  16. --8.数据库的磁盘空间呢使用信息 
  17. exec sp_spaceused 
  18. --9.日志文件大小及使用情况 
  19. dbcc sqlperf(logspace) 
  20. --10.表的磁盘空间使用信息 
  21. exec sp_spaceused 'tablename' 
  22. --11.获取磁盘读写情况 
  23. select  
  24. @@total_read [读取磁盘次数], 
  25. @@total_write [写入磁盘次数],
  26. @@total_errors [磁盘写入错误数], 
  27. getdate() [当前时间] 
  28. --12.获取I/O工作情况 
  29. select @@io_busy, 
  30. @@timeticks [每个时钟周期对应的微秒数], 
  31. @@io_busy*@@timeticks [I/O操作毫秒数], 
  32. getdate() [当前时间] 
  33. --13.查看CPU活动及工作情况 
  34. select 
  35. @@cpu_busy, 
  36. @@timeticks [每个时钟周期对应的微秒数], 
  37. @@cpu_busy*cast(@@timeticksas float)/1000 [CPU工作时间(秒)], 
  38. @@idle*cast(@@timeticks asfloat)/1000 [CPU空闲时间(秒)], 
  39. getdate() [当前时间] 
  40. --14.检查锁与等待 
  41. exec sp_lock 
  42. --15.检查死锁 
  43. exec sp_who_lock --自己写个存储过程即可 
  44. /* 
  45. create procedure sp_who_lock 
  46. as 
  47. begin 
  48.     declare @spid int,@blint
  49.     @intTransactionCountOnEntry int
  50.     @intRowcount int
  51.     @intCountProperties int
  52.     @intCounter int 
  53.     create table #tmp_lock_who (idint identity(1,1),spid smallint,blsmallint
  54.     IF @@ERROR<>0 RETURN @@ERROR 
  55.     insert into #tmp_lock_who(spid,bl)select 0 ,blocked 
  56.     from (select *from sysprocesses where blocked>0 ) a  
  57.     where not exists(select *from (select *from sysprocesses where blocked>0 ) b  
  58.     where a.blocked=spid) 
  59.     union select spid,blockedfrom sysprocesses where blocked>0 
  60.     IF @@ERROR<>0 RETURN @@ERROR 
  61.         -- 找到临时表的记录数 
  62.         select @intCountProperties =Count(*),@intCounter = 1 
  63.         from #tmp_lock_who 
  64.     IF @@ERROR<>0 RETURN @@ERROR 
  65.     if @intCountProperties=0 
  66.     select '现在没有阻塞和死锁信息'as message 
  67.     -- 循环开始 
  68.     while @intCounter <= @intCountProperties 
  69.     begin 
  70.     -- 取第一条记录 
  71.     select @spid = spid,@bl = bl 
  72.     from #tmp_lock_who where id = @intCounter  
  73.     begin 
  74.     if @spid =0  
  75.         select '引起数据库死锁的是: '+CAST(@bl ASVARCHAR(10)) + '进程号,其执行的SQL语法如下' 
  76.     else 
  77.         select '进程号SPID:'+CAST(@spid ASVARCHAR(10))+ '被' +'进程号SPID:'+ CAST(@blAS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' 
  78.     DBCC INPUTBUFFER (@bl ) 
  79.     end 
  80.     -- 循环指针下移 
  81.     set @intCounter = @intCounter + 1 
  82.     end 
  83.     drop table #tmp_lock_who 
  84.     return
  85. end 
  86. */ 
  87.  
  88. --16.用户和进程信息 
  89. exec sp_who 
  90. exec sp_who2 
  91.  
  92. --17.活动用户和进程的信息 
  93. exec sp_who 'active' 
  94.  
  95. --18.查看进程中正在执行的SQL 
  96. dbcc inputbuffer(进程号) 
  97. exec sp_who3 
  98.  
  99. --19.查看所有数据库用户登录信息 
  100. exec sp_helplogins  
  101.  
  102. --20.查看所有数据库用户所属的角色信息 
  103. exec sp_helpsrvrolemember 
  104.  
  105. --21.查看链接服务器 
  106. exec sp_helplinkedsrvlogin 
  107.  
  108. --22.查看远端数据库用户登录信息 
  109. exec sp_helpremotelogin 
  110.   
  111. --23.获取网络数据包统计信息 
  112. select  
  113. @@pack_received [输入数据包数量], 
  114. @@pack_sent [输出数据包数量], 
  115. @@packet_errors [错误包数量], 
  116. getdate() [当前时间] 
  117.  
  118. --24.检查数据库中的所有对象的分配和机构完整性是否存在错误 
  119. dbcc checkdb 
  120.  
  121. --25.查询文件组和文件 
  122. select  
  123.     df.[name],df.physical_name,df.[size],df.growth,  
  124.     f.[name][filegroup],f.is_default  
  125. from sys.database_files dfjoin sys.filegroups f  
  126. on df.data_space_id = f.data_space_id  
  127.  
  128. --26.查看数据库中所有表的条数 
  129. select  b.nameas tablename ,   
  130.         a.rowcnt as datacount   
  131. from    sysindexes a ,   
  132.         sysobjects b   
  133. where   a.id = b.id   
  134.         and a.indid < 2   
  135.         and objectproperty(b.id,'IsMSShipped') = 0  
  136.  
  137. --27.得到最耗时的前10条T-SQL语句 
  138. ;with maco as    
  139. (      
  140.     select top 10   
  141.         plan_handle,   
  142.         sum(total_worker_time) as total_worker_time ,   
  143.         sum(execution_count)as execution_count ,   
  144.         count(1) as sql_count   
  145.     from sys.dm_exec_query_statsgroup by plan_handle   
  146.     order bysum(total_worker_time) desc   
  147. )   
  148. select  t.text ,   
  149.         a.total_worker_time ,   
  150.         a.execution_count ,   
  151.         a.sql_count   
  152. from    maco a   
  153.         cross apply sys.dm_exec_sql_text(plan_handle) t  
  154.  
  155. --28. 查看SQL Server的实际内存占用 
  156. select * from sysperfinfowhere counter_name like'%Memory%' 
  157.  
  158.  
  159. --29.显示所有数据库的日志空间信息 
  160. dbcc sqlperf(logspace) 
  161.  
  162. --30.收缩数据库 
  163. dbcc shrinkdatabase(databaseName) 

 

转自:http://blog.csdn.net/maco_wang/article/details/8719546

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一种重要的关系型数据库管理系统,SQL Server数据库的稳定性和可靠性对于企业的正常运营至关重要。针对企业使用的SQLServer数据库,定期进行数据库巡检是非常必要和重要的,以便及时发现和解决问题,并确保数据库的高效运行和安全性。 SQLServer数据库巡检脚本是一种自动化程序,能够检查数据库的各个方面,从而检测性能劣化、安全漏洞、数据错误等问题,提高数据库的稳定性和性能。 SQLServer数据库巡检脚本首先需要建立可信赖的检查项目,包括数据库的硬件设备配置、数据库的网络状况、数据读写性能等各项指标。检查项目要针对企业实际情况进行调整和优化,确保其能够真实反映数据库的实际状况。然后就是编写脚本,以SQL语句为主,用于检查数据库的各项指标。可以设置警告阈值或自动恢复机制,确保在数据库出现问题时能够及时进行报警和处理。 数据库巡检过程中,除了运行脚本外,还需要对原始数据进行收集和分析,以发现潜在问题并提出解决方案。根据检查结果,对数据库的配置、应用程序代码和数据模型进行评估和优化,避免数据库出现性能瓶颈和安全漏洞。最后,将检查结果和分析报告进行整理和输出,以文档形式记录,供数据库管理员和其他相关人员查阅和分析。 综上所述,SQLServer数据库巡检脚本是企业Database管理的关键实践之一,有利于及时发现和解决问题,提高数据库的稳定性、安全性和性能。同时,在实施巡检过程中,需要理性、全面进行设置和优化,保证其产生的检查结果和分析报告的准确性和实用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值