Advertisements
The script will notify the low disk space of SQL server drives based on the threshold.
Table:
use DBAdata
drop table DBA_All_Server_Space
CREATE TABLE [dbo].[DBA_All_Server_Space](
[DRIVE] [char](1) NULL,
[FREE_SPACE_IN_MB] [int] NULL,
[SERVER_NAME] [varchar](50) NULL
)
/*=====================================*/
CREATE TABLE [dbo].[tbl_Error_handling](
[Server_name] [varchar](50) NULL,
[Module_name] [varchar](50) NULL,
[Error_Line] [int] NULL,
[Error_Number] [bigint] NULL,
[Error_Severity] [int] NULL,
[Error_State] [int] NULL,
[Error_Message] [varchar](1000) NULL,
[Upload_Date] [datetime] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DBA_ALL_OPERATORS](
[NAME] [varchar](25) NULL,
[EMAIL_ADDRESS] [nvarchar](100) NULL,
[STATUS] [int] NULL,
[Mail_copy] [varchar](5) NULL
) ON [PRIMARY]
select * from DBA_ALL_OPERATORS
insert into DBA_ALL_OPERATORS values ('Muthu','muthukkumaran.kaliyamoorthy@abcd.com',1,'CC')
/*=====================================*/
use [DBAdata_Archive]
CREATE TABLE [dbo].[DBA_All_Server_Space](
[DRIVE] [char](1) NULL,
[FREE_SPACE_IN_MB] [int] NULL,
[SERVER_NAME] [varchar](50) NULL,
[Upload_date] [datetime] NULL
)
SP:
/*
use DBAdata
drop table DBA_All_Server_Space
CREATE TABLE [dbo].[DBA_All_Server_Space](
[DRIVE] [char](1) NULL,
[FREE_SPACE_IN_MB] [int] NULL,
[SERVER_NAME] [varchar](50) NULL
)
/*=====================================*/
CREATE TABLE [dbo].[tbl_Error_handling](
[Server_name] [varchar](50) NULL,
[Module_name] [varchar](50) NULL,
[Error_Line] [int] NULL,
[Error_Number] [bigint] NULL,
[Error_Severity] [int] NULL,
[Error_State] [int] NULL,
[Error_Message] [varchar](1000) NULL,
[Upload_Date] [datetime] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DBA_ALL_OPERATORS](
[NAME] [varchar](25) NULL,
[EMAIL_ADDRESS] [nvarchar](100) NULL,
[STATUS] [int] NULL,
[Mail_copy] [varchar](5) NULL
) ON [PRIMARY]
select * from DBA_ALL_OPERATORS
insert into DBA_ALL_OPERATORS values ('Muthu','muthukkumaran.kaliyamoorthy@abcd.com',1,'CC')
/*=====================================*/
use [DBAdata_Archive]
CREATE TABLE [dbo].[DBA_All_Server_Space](
[DRIVE] [char](1) NULL,
[FREE_SPACE_IN_MB] [int] NULL,
[SERVER_NAME] [varchar](50) NULL,
[Upload_date] [datetime] NULL
)
*/
-- DROP PROC [USP_DBA_GETSERVERSPACE]
-- Exec DBAdata.[dbo].[USP_DBA_GETSERVERSPACE] @Free_Space_threshold = 25 -- less than 25600 MB alert
USE DBAdata
GO
alter PROCEDURE [dbo].[USP_DBA_GETSERVERSPACE]
/*
Summary: Space Utilization findings
Contact: Muthukkumaran Kaliyamoorthy SQL DBA
Description: Space Utilization findings, alert for low space threshold
ChangeLog:
Date Coder Description
2013-jan-21 Muthukkumaran Kaliyamoorthy Updated the 2012 functionality
*/
--WITH ENCRYPTION
(@Free_Space_threshold int)
AS
BEGIN
-- select * from DBADATA.DBO.DBA_ALL_SERVER_SPACE
TRUNCATE TABLE DBADATA.DBO.DBA_ALL_SERVER_SPACE
CREATE TABLE #TEMPSPACE
(
DRIVE VARCHAR(20),
SPACE INT
)
DECLARE @SERVER_NAME VARCHAR(200)
DECLARE @DESC VARCHAR(200)
--** PUT LOCAL SERVER FIRST.
INSERT INTO DBA_ALL_SERVER_SPACE
SELECT null,Null,null
INSERT INTO #TEMPSPACE
EXEC XP_FIXEDDRIVES
INSERT INTO DBA_ALL_SERVER_SPACE
SELECT *,@@servername AS SERVERNAME FROM #TEMPSPACE
--PRINT @@SERVERNAME +' COMPLETED.'
DECLARE ALLSERVER CURSOR
FOR
SELECT SERVERNAME, [DESCRIPTION] FROM DBADATA.DBO.DBA_ALL_SERVERS
WHERE svr_status ='running'
OPEN ALLSERVER
FETCH NEXT FROM ALLSERVER INTO @SERVER_NAME,@DESC
WHILE @@FETCH_STATUS=0
BEGIN
BEGIN TRY
TRUNCATE TABLE #TEMPSPACE
INSERT INTO DBA_ALL_SERVER_SPACE
SELECT null,Null,null
EXEC ('EXEC [' + @SERVER_NAME+'].MASTER.DBO.USP_TEMPSPACE_POP')
EXEC ('INSERT INTO #TEMPSPACE SELECT * FROM [' + @SERVER_NAME+'].MASTER.DBO.tempSpace')
INSERT INTO DBA_ALL_SERVER_SPACE
SELECT *,@DESC AS SERVERNAME FROM #TEMPSPACE
--PRINT 'SERVER ' +@SERVER_NAME+' COMPLETED.'
END TRY
BEGIN CATCH
--SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage;
insert into tbl_Error_handling
SELECT @SERVER_NAME,'Drive',[Error_Line] = ERROR_LINE(),[Error_Number] = ERROR_NUMBER(),
[Error_Severity] = ERROR_SEVERITY(),[Error_State] = ERROR_STATE(),
[Error_Message] = ERROR_MESSAGE(),GETDATE()
--PRINT 'SERVER ['+@SERVER_NAME+']is not COMPLETED.'
END CATCH
FETCH NEXT FROM ALLSERVER INTO @SERVER_NAME,@DESC
END
CLOSE ALLSERVER
DEALLOCATE ALLSERVER
DROP TABLE #TEMPSPACE
----------------------------------------------------
-- May be its time to send the report to my DBA
DECLARE @SERVERNAME VARCHAR(500)
DECLARE @DRIVE VARCHAR(200)
DECLARE @SPACE VARCHAR(200)
if exists
(
select 1 from dbadata.dbo.DBA_ALL_SERVER_SPACE
where (
(FREE_SPACE_IN_MB<@Free_Space_threshold AND DRIVE NOT IN ('Q','P'))
)
)
begin
DECLARE SPACECUR CURSOR FOR
SELECT SERVER_NAME,DRIVE, FREE_SPACE_IN_MB FROM [DBA_ALL_SERVER_SPACE]
where (
(FREE_SPACE_IN_MB<@Free_Space_threshold AND DRIVE NOT IN ('Q','P'))
)
--and ((SERVER_NAME not IN ('abcd','aa','bb','cc') and DRIVE ='c' and FREE_SPACE_IN_MB<4000))
order by SERVER_NAME
OPEN SPACECUR
FETCH NEXT FROM SPACECUR
INTO @SERVERNAME,@DRIVE,@SPACE
DECLARE @BODY1 VARCHAR(max)
SET @BODY1= '<font size=2 color=#C35817 face=''verdana''><B>FOLLOWINGS ARE LOW DISK SPACE INFO FOR PROD SERVERS:</b> </font>
<P>
<font size=1 color=#FF00FF face=''verdana''>
<Table border=0 width=500 bgcolor=#ECE5B6 cellpadding=1 style="color:#7E2217;font-face:verdana;font-size:12px;">
<b> <tr bgcolor=#8A4117 align=center style="color:#FFFFFF;font-weight:bold">
<td width=350 color=white>SERVER</td>
<td width=150 color=white>DRIVE</td>
<td width=150 color=white>SPACE MB</td> </b>
</tr>'
WHILE @@FETCH_STATUS=0
BEGIN
SET @BODY1= @BODY1 +'<tr>
<td>'+ISNULL(@SERVERNAME,' ')+'</td>'+
'<td align=center>'+ISNULL(@DRIVE+':',' ')+'</td>'
+
case when @SPACE< 1024 then '<td align=center style="color:#FF0000;font-weight:bold">'+ISNULL(@SPACE,' ')+'</td>'
else '<td align=center >'+ISNULL(@SPACE,' ')+'</td>' end
FETCH NEXT FROM SPACECUR
INTO @SERVERNAME,@DRIVE,@SPACE
END
SET @BODY1=@BODY1+'</Table> </p>
<p>
<font style="color:#7E2217;font-face:verdana;font-size:9px;"> Generated on '
+convert(varchar(30),getdate(),100)+'. </BR>
This is an auto generated mail by DBA TEAM. If you receive this email by mistake please contact us.
</br>
© Property of DBA Team.
</font>'
CLOSE SPACECUR
DEALLOCATE SPACECUR
DECLARE @EMAILIDS VARCHAR(500)
SELECT @EMAILIDS=
COALESCE(@EMAILIDS+';','')+EMAIL_ADDRESS FROM DBAdata.DBO.DBA_ALL_OPERATORS
WHERE STATUS =1
DECLARE @EMAILIDS1 VARCHAR(500)
SELECT @EMAILIDS1=
COALESCE(@EMAILIDS1+';','')+EMAIL_ADDRESS FROM DBAdata.DBO.DBA_ALL_OPERATORS
WHERE STATUS =1 and Mail_copy='CC'
EXEC MSDB.DBO.SP_SEND_DBMAIL @RECIPIENTS=@EMAILIDS,
@SUBJECT = 'DBA: DISK SPACE INFO',
@BODY = @BODY1,
@copy_recipients=@EMAILIDS1,
@BODY_FORMAT = 'HTML' ,@PROFILE_NAME='muthu';
--select @BODY1
-------------------------------------------------------
end
--select * from DBAdata_Archive.dbo.DBA_ALL_SERVER_SPACE
insert into DBAdata_Archive.dbo.DBA_ALL_SERVER_SPACE
select *,GETDATE() from DBA_ALL_SERVER_SPACE
END
Image:
