рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдХрд╛рд░ рдИрдореЗрд▓ рдЕрд▓рд░реНрдЯ
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд┐рдЫрд▓рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдкрдиреЗ SQL рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЬрд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд╣рдо рдЙрд╕рдХреА рд╢реАрдШреНрд░ рджреГрд╢реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдФрд░ рдХреБрдЫ рдирдореВрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдЦреЛрдЬ рдХреА, рдЬреЛ рд╣рдореЗрдВ рдЗрди рджреЛ рд▓реЗрдЦреЛрдВ рддрдХ рд▓реЗ рдЧрдП;
рдПрдордПрд╕рдбреАрдПрди рд▓реЗрдЦSQL рд╕рд░реНрд╡рд░ рдХреЗрдВрджреНрд░реАрдп рд▓реЗрдЦ
рд╣рдорд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдЖрдкрдХреЛ рдХрдо рд╕реНрдерд╛рди, рдбреНрд░рд╛рдЗрд╡ рд╕реНрдерд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЕрд▓рд░реНрдЯ рднреЗрдЬреЗрдЧрд╛, рдлрд┐рд░ рд╣рдордиреЗ рдЗрд╕реЗ рджрд┐рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдордп рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдИрдореЗрд▓ рдЦрд╛рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВ рд╕реНрд╡рдпрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЦ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ SQL Authority.com рдпрд╛ рдЗрд╕ MSDN рдЖрд▓реЗрдЦ рдкрд░ рдкрд┐рдирд▓ рдбреЗрд╡ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдЖрд▓реЗрдЦ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
SQL Code
USE [utilities]GOCREATE PROCEDURE [maint].[DiskFreeSpaceAlert]@DriveCBenchmark int= 1024,@OtherDataDriveBenchmark int= 10240,@ProfileName sysname='DatabaseEmailProfileName',@Recipients NVARCHAR(1000)='youremail@yourdomain'AS BEGIN IF EXISTS(SELECT * FROM tempdb..sysobjectsWHERE id =object_id(N'[tempdb]..[##disk_free_space]'))DROP TABLE ##disk_free_spaceCREATE TABLE ##disk_free_space( DriveLetter CHAR(1) NOT NULL, FreeMB INTEGER NOT NULL) DECLARE @DiskFreeSpace INTDECLARE @DriveLetter CHAR(1)DECLARE @AlertMessage VARCHAR(500)DECLARE @MailSubject VARCHAR(100) INSERT INTO ##disk_free_spaceEXEC master..xp_fixeddrives SELECT @DiskFreeSpace = FreeMB FROM ##disk_free_space where DriveLetter ='C' SET @MailSubject =''+@@SERVERNAME+' Disk Analysis'EXEC msdb..sp_send_dbmail @profile_name=@ProfileName,@recipients = @Recipients,@subject = @MailSubject,@query=N'SELECT DriveLetter,CAST(CAST(CAST(FreeMB ASDECIMAL(18,2))/CAST(1024 AS DECIMAL(18,2)) AS DECIMAL(18,2)) AS VARCHAR(20)) +'' GB '' SpaceAvailable FROM ##disk_free_space' /* Get db sizes */DECLARE @dbName sysnameCREATE TABLE ##TempDBNames(DatabaseName sysname,DATABASE_SIZE int,REMARKS varchar(254))INSERT INTO ##TempDBNamesEXEC sp_databases CREATE TABLE ##DBInfo(dbName sysname,name sysname,filepath sysname,dbType VARCHAR(10),dbSize INT,DataModified DATETIME) DECLARE dbs CURSOR FORSELECT DatabaseName FROM ##TempDBNames open dbsfetch next from dbs into @dbNameWHILE (@@FETCH_STATUS= 0)BeginEXEC ('USE '+ @dbName +' INSERT INTO ##DBInfo SELECT '''+ @dbName +''',name,physical_name,type_desc,size,(SELECTMAX(modify_date) FROM sys.tables) LastModified FROM sys.database_files')fetch next from dbs into @dbNameEndclose dbsdeallocate dbs SET @MailSubject =''+@@SERVERNAME+' Database Analysis'EXEC msdb..sp_send_dbmail @profile_name=@ProfileName,@recipients = @Recipients,@subject = @MailSubject,@query=N'SELECT dbName,dbType,(dbSize*8)/1024dbSize,DataModified FROM ##DBInfo' DROP TABLE ##DBInfoDROP TABLE ##TempDBNames/* End get dbsizes */ IF @DiskFreeSpace < @DriveCBenchmarkBeginSET @MailSubject ='Drive C free space is low on '+@@SERVERNAMESET @AlertMessage ='Drive C on '+@@SERVERNAME+' has only '+ CAST(@DiskFreeSpace AS VARCHAR)+' MB left. Please freeup space on this drive. C drive usually has OS installed on it. Lower space onC could slow down performance of the server' EXEC msdb..sp_send_dbmail @profile_name=@ProfileName,@recipients = @Recipients,@subject = @MailSubject,@body = @AlertMessageEnd DECLARE DriveSpace CURSOR FAST_FORWARD FORselect DriveLetter, FreeMB from ##disk_free_space where DriveLetter not in('C') open DriveSpacefetch next from DriveSpace into @DriveLetter,@DiskFreeSpace WHILE (@@FETCH_STATUS= 0)Beginif @DiskFreeSpace <@OtherDataDriveBenchmarkBeginset @MailSubject ='Drive '+ @DriveLetter +' free space is low on '+@@SERVERNAMEset @AlertMessage = @DriveLetter +' has only '+cast(@DiskFreeSpace as varchar)+' MB left. Please increase free space for thisdrive immediately to avoid production issues' EXEC msdb..sp_send_dbmail @profile_name=@ProfileName,@recipients = @Recipients,@subject = @MailSubject,@body = @AlertMessageEndfetch next from DriveSpace into @DriveLetter,@DiskFreeSpaceEndclose DriveSpacedeallocate DriveSpaceDROP TABLE ##disk_free_spaceEND
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ!
рд╣рдореЗрдВ рдКрдкрд░ рдЕрдкрдирд╛ рдХреЛрдб рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдФрд░ рд╣рдореЗрдВ рдкреБрд░реНрддрдЧрд╛рд▓реА рдореЗрдВ рдЕрдкрдиреЗ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрд╛, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдИрдореЗрд▓ рдкрддрд╛ рдареАрдХ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рд╣реИред