无效的对象名称 'sys.dm_os_volume_stats'

use*_*655 0 sql-server sql-server-2008-r2 dmv

我正在尝试选择服务器中 15% 的可用磁盘空间。

 SELECT DISTINCT
            s.volume_mount_point [Drive],
            CAST(s.available_bytes / 1048576.0 as decimal(20,2)) [AvailableMBs],
           ((CAST(s.total_bytes / 1048576.0 as decimal(20,2)))*15)/100 AS [FifteenpercentAvailableMBs]  

            FROM 
                    sys.master_files f
                    CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.[file_id]) s
Run Code Online (Sandbox Code Playgroud)

此查询在 Microsoft SQL Server 2008 R2 (SP2) 中运行良好

但它不适用于 Microsoft SQL Server 2008 R2 (RTM)

我怎样才能使这个查询在 2008 R2 RTM 中工作?(我的意思是有没有其他查询可以用来获得 15% 的可用空间?)

Aar*_*and 6

您不能在 RTM 中使用此 DMV;它是在 SP1 中引入的(尽管当前版本的文档没有指定,但 2008 R2 版本有)。无论如何,您应该使用Service Pack 3(这将使那些旧服务器更容易支持,而不是更难)。

在 RTM 中,你可以做一些非常复杂的事情,比如这样。他正在使用xp_cmdshell调用 PowerShell 从 WMI 类 ( Win32_Volume)获取输出,然后将这些结果转储到 #temp 表中,并将它们与来自未记录和不受支持的扩展过程的数据进行比较xp_fixeddrives

这里有一个类似的解决方案。它使用Win32_PhysicalDisk来自 SQL Server 代理作业的WMI ( )、VBScript 和 PowerShell - 虽然它们xp_cmdshell在此处避免使用,但整体方法感觉类似地步履蹒跚。

如果您从事建筑工作,这些将相当于大约八卷胶带和半加仑的 WD-40。

也许您应该考虑使用 PowerShell 或类似工具执行此任务(这看起来不是更简单吗?),而不是尝试弯曲 T-SQL 来执行此操作。SQL Server 并不是管理服务器磁盘空间的正确工具。