join the MSSQLTips community

Today's Site Sponsor


 

SQL Compare quickly and easily compares and synchronizes SQL Server database schemas
 



I generated better data in only seconds...

Determine Free Disk Space in SQL Server with T-SQL Code

Written By: Jeremy Kadlec -- 3/12/2009 -- read/post comments -- print -- Bookmark and Share

Rating: (not rated yet) Rate

Problem
At our organization we need to check for a minimum amount of free space before proceeding with some processes that run on SQL Server 2000, 2005 and 2008 SQL Server instances. Do you know of a way to find out the free disk space and then fail the process if it does not meet the minimum requirements?  Can you provide some sample code?

Solution
Checking for free disk space before proceeding with a process is a wise move if disk space is tight or a high percentage of the drive is needed for the process.  It is disconcerting to have a process run for hours only to fail towards the end of the process due to insufficient disk space.  Although a few different options are available to check for disk space (CLR, WMI, PowerShell, etc.) in SQL Server, let's see how we can use the xp_fixeddrives extended stored procedure which is available in SQL Server 2000 to 2008.


Sample Stored Procedure to Assess the Free Disk Space on a SQL Server Disk Drive

In the sample stored procedure below, it is accepting a parameter for the minimum amount of megabytes (MB) free on a specific disk drive, then executing the master.sys.xp_fixeddrives extended stored procedure into a temporary table.  Once the data is in the temporary table the current amount of free disk space is compared to the minimum amount of free disk space to determine if the process should continue or raise an error.

One item to keep in mind is that between SQL Server 2000 and SQL Server 2005/2008 the owner for the xp_fixeddrives extended stored procedure changed.  In SQL Server 2000, xp_fixeddrives was owned by dbo and in SQL Server 2005/2008 the owner is sys.  Due to this ownership change, two stored procedures are provided below.  One for SQL Server 2005/2008 and a second for SQL Server 2000.

*** NOTE *** - SQL Server 2008 and 2005 Version
CREATE PROCEDURE dbo.spExec_SufficientDiskSpace @MinMBFree int, @Drive char(1) AS
/*
----------------------------------------------------------------------------
-- Object Name: dbo.spExec_SufficientDiskSpace
-- Project: Admin Scripts
-- Business Process: Monthly Sales Reports
-- Purpose: Validate sufficient disk space
-- Detailed Description: Validate sufficient disk space based on based on the 
-- @MBfree and @Drive parameters 
-- Database: Admin
-- Dependent Objects: master.sys.xp_fixeddrives
-- Called By: Admin Scripts
-- Upstream Systems: Unknown
-- Downstream Systems: Unknown
-- 
--------------------------------------------------------------------------------------
-- Rev | CMR | Date Modified | Developer | Change Summary
--------------------------------------------------------------------------------------
-- 001 | N\A | 03.05.2009 | MSSQLTips | Original code
--
*/

SET NOCOUNT ON
-- 1 - Declare variables DECLARE @MBfree int DECLARE @CMD1 varchar(1000)
-- 2 - Initialize variables SET @MBfree = 0 SET @CMD1 = ''
-- 3 - Create temp tables CREATE TABLE #tbl_xp_fixeddrives (Drive varchar(2) NOT NULL, [MB free] int NOT NULL)
-- 4 - Populate #tbl_xp_fixeddrives INSERT INTO #tbl_xp_fixeddrives(Drive, [MB free]) EXEC master.sys.xp_fixeddrives
-- 5 - Initialize the @MBfree value SELECT @MBfree = [MB free] FROM #tbl_xp_fixeddrives WHERE Drive = @Drive
-- 6 - Determine if sufficient fre space is available IF @MBfree > @MinMBFree BEGIN RETURN END ELSE BEGIN RAISERROR ('*** ERROR *** - Insufficient disk space.', 16, 1) END
-- 7 - DROP TABLE #tbl_xp_fixeddrives DROP TABLE #tbl_xp_fixeddrives
SET NOCOUNT OFF GO

 

*** NOTE *** - SQL Server 2000 Version
CREATE PROCEDURE dbo.spExec_SufficientDiskSpace @MinMBFree int, @Drive char(1) AS
/*
----------------------------------------------------------------------------
-- Object Name: dbo.spExec_SufficientDiskSpace
-- Project: Admin Scripts
-- Business Process: Monthly Sales Reports
-- Purpose: Validate sufficient disk space
-- Detailed Description: Validate sufficient disk space based on based on the 
-- @MBfree and @Drive parameters 
-- Database: Admin
-- Dependent Objects: master.sys.xp_fixeddrives
-- Called By: Admin Scripts
-- Upstream Systems: Unknown
-- Downstream Systems: Unknown
-- 
--------------------------------------------------------------------------------------
-- Rev | CMR | Date Modified | Developer | Change Summary
--------------------------------------------------------------------------------------
-- 001 | N\A | 03.05.2009 | MSSQLTips | Original code
--
*/
SET NOCOUNT ON
-- 1 - Declare variables DECLARE @MBfree int DECLARE @CMD1 varchar(1000)
-- 2 - Initialize variables SET @MBfree = 0 SET @CMD1 = ''
-- 3 - Create temp tables CREATE TABLE #tbl_xp_fixeddrives (Drive varchar(2) NOT NULL, [MB free] int NOT NULL)
-- 4 - Populate #tbl_xp_fixeddrives INSERT INTO #tbl_xp_fixeddrives(Drive, [MB free]) EXEC master.dbo.xp_fixeddrives
-- 5 - Initialize the @MBfree value SELECT @MBfree = [MB free] FROM #tbl_xp_fixeddrives WHERE Drive = @Drive
-- 6 - Determine if sufficient fre space is available IF @MBfree > @MinMBFree BEGIN RETURN END ELSE BEGIN RAISERROR ('*** ERROR *** - Insufficient disk space.', 16, 1) END
-- 7 - DROP TABLE #tbl_xp_fixeddrives DROP TABLE #tbl_xp_fixeddrives
SET NOCOUNT OFF GO

 

Next Steps

Readers Who Read This Tip Also Read Free Live Webcast Comment or Ask Questions About This Tip


Sponsor Information
Free SQL Server performance monitoring dashboard – Idera SQL check

Free trial: Red Gate SQL Response for no-nonsense monitoring & alerting of SQL Server health & activity. Download now.

You don't know, what you don't know about SQL Server... Customized Consulting and Training

Stop here to prepare for your next SQL Server interview!

Free whitepaper - How to Achieve 40:1 Backup Compression with LiteSpeed® for SQL Server’s


Get Our Tips Newsletter

We keep 50,000+ SQL Server professionals informed.

Red Gate Software - SQL Data Generator

Test your database until it cries… “Red Gate’s SQL Data Generator has overnight become the principal tool we use for loading test data to run our performance and load tests.” Grant Fritchey, FM Global.

Download now!



More SQL Server Tools
SQL Compare

SQL Data Generator

SQL defrag manager

SQL compliance manager

SQL Prompt




Copyright (c) 2006-2010 Edgewood Solutions, LLC All rights reserved
privacy statement | disclaimer | copyright | advertise | write for mssqltips | feedback | about
Some names and products listed are the registered trademarks of their respective owners.


CareerQandA.com | MSSharePointTips.com | MSSQLTips.com