>>>/************************************************************** >>>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 >>>>>