فضای دیسک و اندازه پایگاه داده هشدارهای ایمیل
در باره
مشتری قبلی با وجود فضای دیسک در یکی از سرورهای SQL خود دست و پنجه نرم می کرد. ما می خواستیم به موقع از جایی که ممکن است خطاهای احتمالی ایجاد شود ، دسترسی داشته باشیم و به دنبال یافتن نمونه هایی از اینترنت هستیم که ما را به سمت این دو مقاله سوق می دهد.
مقاله MSDNمقاله مرکزی SQL Server
کد سازگار ما هشدار کم بودن فضای زمین ، بیانیه ای از فضای درایو و لیستی از اندازه پایگاه داده را برای شما ارسال می کند ، سپس آن را به عنوان بخشی از کار برنامه ریزی کردیم تا در ساعات مختلف روز اجرا شود.
شما باید یک حساب ایمیل برای سرور خود ایجاد کنید تا از آن استفاده کند ، من سعی می کنم مقاله ای برای این موضوع اضافه کنم اما در این مدت نگاهی به این مقاله توسط Pinal Dave در SQL Authority.com یا این مقاله MSDN بیندازید.
SQL Code
GO
CREATE PROCEDURE [maint].[DiskFreeSpaceAlert]
@DriveCBenchmark int= 1024,
@OtherDataDriveBenchmark int= 10240,
@ProfileName sysname='DatabaseEmailProfileName',
@Recipients NVARCHAR(1000)='youremail@yourdomain'
AS BEGIN
IF EXISTS(SELECT * FROM tempdb..sysobjects
WHERE id =object_id(N'[tempdb]..[##disk_free_space]'))
DROP TABLE ##disk_free_space
CREATE TABLE ##disk_free_space(
DriveLetter CHAR(1) NOT NULL,
FreeMB INTEGER NOT NULL)
DECLARE @DiskFreeSpace INT
DECLARE @DriveLetter CHAR(1)
DECLARE @AlertMessage VARCHAR(500)
DECLARE @MailSubject VARCHAR(100)
INSERT INTO ##disk_free_space
EXEC 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 sysname
CREATE TABLE ##TempDBNames(
DatabaseName sysname,
DATABASE_SIZE int,
REMARKS varchar(254))
INSERT INTO ##TempDBNames
EXEC sp_databases
CREATE TABLE ##DBInfo(
dbName sysname,
name sysname,
filepath sysname,
dbType VARCHAR(10),
dbSize INT,
DataModified DATETIME
)
DECLARE dbs CURSOR FOR
SELECT DatabaseName FROM ##TempDBNames
open dbs
fetch next from dbs into @dbName
WHILE (@@FETCH_STATUS= 0)
Begin
EXEC ('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 @dbName
End
close dbs
deallocate 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 ##DBInfo
DROP TABLE ##TempDBNames
/* End get dbsizes */
IF @DiskFreeSpace < @DriveCBenchmark
Begin
SET @MailSubject ='Drive C free space is low on '+@@SERVERNAME
SET @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 = @AlertMessage
End
DECLARE DriveSpace CURSOR FAST_FORWARD FOR
select DriveLetter, FreeMB from ##disk_free_space where DriveLetter not in('C')
open DriveSpace
fetch next from DriveSpace into @DriveLetter,@DiskFreeSpace
WHILE (@@FETCH_STATUS= 0)
Begin
if @DiskFreeSpace <@OtherDataDriveBenchmark
Begin
set @MailSubject ='Drive '+ @DriveLetter +' free space is low on '+@@SERVERNAME
set @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 = @AlertMessage
End
fetch next from DriveSpace into @DriveLetter,@DiskFreeSpace
End
close DriveSpace
deallocate DriveSpace
DROP TABLE ##disk_free_space
END
لطفا توجه داشته باشید!
ما مجبور شدیم کد خود را در بالا تطبیق دهیم زیرا کسی کل مراحل کار را کپی کرده و با جزئیات فضای دیسک خود به زبان پرتغالی ایمیلی برای ما ارسال کرده است ، بنابراین مطمئن شوید که آدرس ایمیل را به درستی پر کرده اید.