/************************************************************** Name: sGetDBMaintInfo Description: Gather the data and log space for all databases on the system and insert the information into DBMaintInfo. The following databases are not added to DBMaintInfo: pubs Northwind model tempdb Author: Rollin Burr **************************************************************/ CREATE PROCEDURE sGetDBMaintInfo AS -- IF DBMaintInfo table does not yet exist, create it. IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[DBMaintInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) BEGIN CREATE TABLE [dbo].[DBMaintInfo] ( [DatabaseName] [varchar] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [DataSpaceUsed_MB] [real] NULL , [DataSpaceFree_MB] [real] NULL , [TLogSpaceUsed_MB] [real] NULL , [TLogSpaceFree_MB] [real] NULL , [LastFullBackup] [datetime] NULL , [LastDiffBackup] [datetime] NULL , [LastTransBackup] [datetime] NULL , [EntryDate] [datetime] NOT NULL ) ON [PRIMARY] ALTER TABLE [dbo].[DBMaintInfo] WITH NOCHECK ADD CONSTRAINT [PK_DBMaintInfo] PRIMARY KEY CLUSTERED ( [DatabaseName], [EntryDate] ) ON [PRIMARY] ALTER TABLE [dbo].[DBMaintInfo] ADD CONSTRAINT [DF_DBMaintInfo_EntryDate] DEFAULT (getdate()) FOR [EntryDate] END --IF NOT EXISTS -- Set up error check SET NOCOUNT ON DECLARE @err INT SET @err = 0 --Create the temp tables to hold the results of DBCC commands until the information is entered into DBMaintInfo. CREATE TABLE #logspace ( DBName VARCHAR( 100), LogSize FLOAT, PrcntUsed FLOAT, status INT ) CREATE TABLE #dataspace ( FileID INT, FileGrp INT, TotExt INT, UsdExt INT, LFileNm VARCHAR( 100), PFileNm VARCHAR( 100) ) --Get the log space INSERT INTO #logspace EXEC ('DBCC SQLPERF( LOGSPACE)') /* Get the data space Use a cursor to loop through the results from DBCC since you have to run this command from each database with a USE command. */ DECLARE @DBName VARCHAR( 100), @LogSize FLOAT, @PrcntUsed FLOAT, @cmd VARCHAR( 500), @DBMIID INT DECLARE dbname CURSOR FOR SELECT DBName, LogSize, PrcntUsed FROM #logspace OPEN dbname FETCH NEXT FROM dbname INTO @DBName, @LogSize, @PrcntUsed WHILE @@fetch_status = 0 BEGIN SELECT @cmd = 'use ' + rtrim( @DBName) + ' dbcc showfilestats' INSERT #dataspace EXEC( @cmd) IF @DBName NOT IN ('model','tempdb','pubs','Northwind') BEGIN INSERT INTO DBMaintInfo (DatabaseName, DataSpaceUsed_MB, DataSpaceFree_MB, TLogSpaceUsed_MB, TLogSpaceFree_MB, EntryDate) SELECT @DBName, ((cast( UsdExt AS NUMERIC( 10, 4))* 32) / 512), ((cast( TotExt - UsdExt AS NUMERIC( 10, 4))* 32) / 512), @LogSize * (@PrcntUsed/100), @LogSize * ((100-@PrcntUsed)/100), GETDATE() FROM #dataspace END FETCH NEXT FROM dbname INTO @DBName, @LogSize, @PrcntUsed DELETE #dataspace END CLOSE dbname DEALLOCATE dbname -- Drop the temporary tables DROP TABLE #logspace DROP TABLE #dataspace -- Remove all data from table that is older than 90 days DELETE FROM DBMaintInfo WHERE EntryDate < GETDATE() - 90 RETURN @err GO