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