sqlserver 巡檢指令碼

datapeng發表於2014-06-03
--1.檢視資料庫版本資訊  
select @@version  
--2.檢視所有資料庫名稱及大小  
exec sp_helpdb  
--3.檢視資料庫所在機器的作業系統引數  
exec master..xp_msver  
--4.檢視資料庫啟動的引數  
exec sp_configure  
--5.檢視資料庫啟動時間  
select convert(varchar(30),login_time,120)  
from master..sysprocesses where spid=1  
--6.檢視資料庫伺服器名  
select 'Server Name:'+ltrim(@@servername)  
--7.檢視資料庫例項名  
select 'Instance:'+ltrim(@@servicename)   
--8.資料庫的磁碟空間呢使用資訊  
exec sp_spaceused  
--9.日誌檔案大小及使用情況  
dbcc sqlperf(logspace)  
--10.表的磁碟空間使用資訊  
exec sp_spaceused 'tablename'  
--11.獲取磁碟讀寫情況  
select   
@@total_read [讀取磁碟次數],  
@@total_write [寫入磁碟次數],  
@@total_errors [磁碟寫入錯誤數],  
getdate() [當前時間]  
--12.獲取I/O工作情況  
select @@io_busy [自上次啟動的I/O操作毫秒數],  
@@timeticks [每個時鐘週期對應的微秒數],  
@@io_busy*@@timeticks [I/O操作毫秒數],  
getdate() [當前時間]  
--13.檢視CPU活動及工作情況  
select  
@@cpu_busy [自上次啟動CPU的工作時間毫秒數],  
@@timeticks [每個時鐘週期對應的微秒數],  
@@cpu_busy*cast(@@timeticks as float)/1000 [CPU工作時間(秒)],  
@@idle*cast(@@timeticks as float)/1000 [CPU空閒時間(秒)],  
getdate() [當前時間]  
--14.檢查鎖與等待  
exec sp_lock  


--15.檢測死鎖和阻塞
declare @spid int,@bl int,
@intTransactionCountOnEntry     int,
@intRowcount             int,
@intCountProperties         int,
@intCounter             int
create table #tmp_lock_who (
id int identity(1,1),
spid smallint,
bl smallint)
IF @@ERROR<>0 print @@ERROR
insert into #tmp_lock_who(spid,bl) select  0 ,blocked
from (select * from sysprocesses where  blocked>0 ) a
where not exists(select * from (select * from sysprocesses
where  blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where  blocked>0
IF @@ERROR<>0 print @@ERROR
-- 找到臨時表的記錄數
select     @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 print @@ERROR
if    @intCountProperties=0
select '現在沒有阻塞和死鎖資訊' as message
-- 迴圈開始
while @intCounter <= @intCountProperties
begin
-- 取第一條記錄
select     @spid = spid,@bl = bl
from #tmp_lock_who where Id = @intCounter
begin
if @spid =0
select '引起資料庫死鎖的是: '+ CAST(@bl AS VARCHAR(10))
+ '程式號,其執行的SQL語法如下'
else
select '程式號SPID:'+ CAST(@spid AS VARCHAR(10))+ '被'
+ '程式號SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其當前程式執行的SQL語法如下'
DBCC INPUTBUFFER (@bl )
end
-- 迴圈指標下移
set @intCounter = @intCounter + 1
end
/
  
--16.使用者和程式資訊  
exec sp_who  
exec sp_who2  
  
--17.活動使用者和程式的資訊  
exec sp_who 'active'  




  
--19.檢視所有資料庫使用者登入資訊  
exec sp_helplogins   
  
--20.檢視所有資料庫使用者所屬的角色資訊  
exec sp_helpsrvrolemember  
  
--21.檢視連結伺服器  
exec sp_helplinkedsrvlogin  
  
--22.檢視遠端資料庫使用者登入資訊  
exec sp_helpremotelogin  
   
--23.獲取網路資料包統計資訊  
select   
@@pack_received [輸入資料包數量],  
@@pack_sent [輸出資料包數量],  
@@packet_errors [錯誤包數量],  
getdate() [當前時間]  
  
--24.檢查資料庫中的所有物件的分配和機構完整性是否存在錯誤  
dbcc checkdb  
  
--25.查詢檔案組和檔案  
select   
    df.[name],df.physical_name,df.[size],df.growth,   
    f.[name][filegroup],f.is_default   
from sys.database_files df join sys.filegroups f   
on df.data_space_id = f.data_space_id   
  
--26.檢視資料庫中所有表的條數  
select  b.name as tablename ,    
        a.rowcnt as datacount    
from    sysindexes a ,    
        sysobjects b    
where   a.id = b.id    
        and a.indid < 2    
        and objectproperty(b.id, 'IsMSShipped') = 0   
  
--27.得到最耗時的前10條T-SQL語句  
;with maco as     
(       
    select top 10    
        plan_handle,    
        sum(total_worker_time) as total_worker_time ,    
        sum(execution_count) as execution_count ,    
        count(1) as sql_count    
    from sys.dm_exec_query_stats group by plan_handle    
    order by sum(total_worker_time) desc    
)    
select  t.text ,    
        a.total_worker_time ,    
        a.execution_count ,    
        a.sql_count    
from    maco a    
        cross apply sys.dm_exec_sql_text(plan_handle) t   
  
--28. 檢視SQL Server的實際記憶體佔用  
select * from sysperfinfo where counter_name like '%Memory%'  
  
  
--29.顯示所有資料庫的日誌空間資訊  
dbcc sqlperf(logspace)  
  
--30.收縮資料庫  
dbcc shrinkdatabase(databaseName)  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1175013/,如需轉載,請註明出處,否則將追究法律責任。

相關文章