Question

I am really struggling on my capacity planning procedure, the DMVs that I normally use for SQL Server 2005 and above are not being recognised.

I have already looked for corruption but the databases are clear.

The code that I normally run is the following:

USE [MYDB];

SELECT 
    DatabaseName = DB_NAME() 
    ,a.FILEID 
    ,[FILE_SIZE_MB] = CONVERT(INT, ROUND(a.size / 128.000, 2)) 
    ,[SPACE_USED_MB] = CONVERT(INT, ROUND(FILEPROPERTY(a.NAME, 'SpaceUsed') / 128.000, 2)) 
    ,[FREE_SPACE_MB] = CONVERT(INT, ROUND((a.size - FILEPROPERTY(a.NAME, 'SpaceUsed')) /      128.000, 2)) 
    ,a.NAME AS [LOGICALNAME] 
    ,SUBSTRING(a.FILENAME,1,1) AS [DRIVE] 
    ,a.FILENAME 
    ,[FILE_TYPE] = b.type_desc 
FROM 
    DBO.SYSFILES a 
INNER JOIN 
    SYS.DATABASE_FILES b ON a.fileid = b.file_id 

Has anyone had such an issue?

Please share any knowledge

thanks and regards marcelo

Was it helpful?

Solution 2

I found out what the problem was.

For all my other databases in that server, I use the collation called Latin1_General_CI_AS.
For the databases where I was having the error I use the collation called SQL_Latin1_General_CP1_CI_AS.

I have just put the names of the DMVs in lower case and it worked fine.

I have changed dbo.sysfiles to sys.sysfiles following the suggestions from marc_s and Vladimir, but now both ways work fine.

thanks and regards
marcelo

OTHER TIPS

Try using sys.master_files tables. First query will give you everything expect for SpaceUsed and FreeSpace. Second will give you everything.

SELECT DB_NAME([database_id]) AS [Database Name]
       ,[file_id]
       ,name AS [Logical Name]
       ,physical_name
       ,type_desc
       ,state_desc
       ,CONVERT(BIGINT, size / 128.0) AS [Total Size in MB]
       ,CONVERT(DECIMAL(18, 2), size / 131072.0) AS [Total Size in GB]
       ,CASE WHEN max_size = -1 THEN -1
             ELSE CONVERT(DECIMAL(18, 2), max_size / 131072.0)
        END AS [Max Size in GB]
    FROM sys.master_files WITH ( NOLOCK )
    WHERE [database_id] >4
    ORDER BY DB_NAME([database_id])
    OPTION ( RECOMPILE );

EXEC sys.sp_MSforeachdb 
'
use [?]
SELECT DB_NAME([database_id]) AS [Database Name]
       ,[file_id]
       ,name AS [Logical Name]
       ,physical_name
       ,type_desc
       ,state_desc
       ,CONVERT(BIGINT, size / 128.0) AS [Total Size in MB]
       ,CONVERT(BIGINT, FILEPROPERTY(NAME, ''SpaceUsed'') / 128.0) AS [Space Used in MB]
       ,CONVERT(BIGINT, size / 128.0) - CONVERT(BIGINT, FILEPROPERTY(NAME, ''SpaceUsed'') / 128.0) AS [Free Space in MB]
       ,CONVERT(DECIMAL(18, 2), size / 131072.0) AS [Total Size in GB]
       ,CASE WHEN max_size = -1 THEN -1
             ELSE CONVERT(DECIMAL(18, 2), max_size / 131072.0)
        END AS [Max Size in GB]
    FROM sys.master_files WITH ( NOLOCK )
    WHERE DB_NAME([database_id]) = ''?''
    ORDER BY DB_NAME([database_id])
    OPTION ( RECOMPILE );
    '
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top