I just realized that I had not published this before. Here is the sp I use to get all the info I need regarding files from available DBs on a server:
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: K Griffith
-- Create date: 04 Feb 2011
-- Description: Returns the space consumed on the DB Server or generic info about each
-- DB on the server depending on the parameter passed. Only
-- returns DBs NOT participating in mirroring.
-- =============================================
CREATE PROCEDURE [dbo].[sp_FileSizes]
@TYPE NVARCHAR(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @ID INT
DECLARE @MAX INT
DECLARE @DB_ID INT
DECLARE @DB_NAME NVARCHAR(300)
DECLARE @SQL NVARCHAR(500)
DECLARE @SQL1 NVARCHAR(500)
SET @ID = 5
SET @MAX = (SELECT MAX(database_id) FROM sys.databases)
CREATE TABLE #temp(DBName nvarchar(300), Name nvarchar(300), Available decimal(18,2), Used decimal (18,2),
Type nvarchar(5), FileID int)
WHILE @ID <= @MAX
BEGIN
SET @DB_ID = (SELECT D.database_id
FROM sys.database_mirroring M
INNER JOIN sys.databases D
ON M.database_id = D.database_id
WHERE M.mirroring_role_desc IS NULL
AND D.database_id = @ID)
IF @DB_ID IS NOT NULL
BEGIN
SET @DB_NAME = (SELECT NAME
FROM sys.databases
WHERE database_id = @ID)
SET @SQL = 'USE [' + @DB_NAME + ']'
SET @SQL1 = ' INSERT INTO #temp (DBName, Name, Available, Used, Type,
FileID)
SELECT ''' + @DB_Name + ''' AS DBName, Name,
size/128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'')
AS int)/128.0 AS AVAILABLE,
CAST(FILEPROPERTY(name, ''SpaceUsed'') AS int)/128.0
AS USED,
type = CASE Type
WHEN 1 THEN ''Log''
ELSE ''Data''
END,
file_id
FROM sys.database_files'
EXEC (@SQL + @SQL1)
END
SET @ID = @ID + 1
END
IF @TYPE = 'SPACE'
BEGIN
SELECT SUM(USED)/1024 AS [Total Space in GB]
FROM #temp
END
ELSE
SELECT *
FROM #temp
WHERE Type = @TYPE
ORDER BY Type ASC, Available DESC
DROP TABLE #temp
END
No comments:
Post a Comment