डिस्क स्थान और डेटाबेस आकार ईमेल अलर्ट
के बारे में
पिछला क्लाइंट अपने 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
कृपया ध्यान दें!
हमें ऊपर अपना कोड अनुकूलित करना पड़ा क्योंकि किसी ने पूरी प्रक्रिया की प्रतिलिपि बनाई और हमें पुर्तगाली में अपने डिस्क स्थान विवरण के साथ एक ईमेल भेजा, इसलिए सुनिश्चित करें कि आपने ईमेल पता ठीक से भर दिया है।