Sql-Server

無效的對象名稱“sys.dm_os_volume_stats”

  • January 12, 2018

我正在嘗試選擇伺服器中 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

此查詢在 Microsoft SQL Server 2008 R2 (SP2) 中執行良好

但它不適用於 Microsoft SQL Server 2008 R2 (RTM)

如何使此查詢在 2008 R2 RTM 中工作?(我的意思是我可以使用任何替代查詢來獲得 15% 的可用空間嗎?)

您不能在 RTM 中使用此 DMV;它是在 SP1 中引入的(儘管目前版本的文件沒有具體說明,但 2008 R2 版本有)。無論如何,您應該使用Service Pack 3(這將使那些舊伺服器更容易支持,而不是更難)。

在 RTM 中,你可以做一些非常複雜的事情,比如 this。他使用xp_cmdshell呼叫 PowerShell 從 WMI 類 ( Win32_Volume) 中獲取輸出,然後將這些結果轉儲到 #temp 表中,並將它們與來自未記錄和不受支持的擴展過程的數據進行比較xp_fixeddrives

這裡有一個類似的解決方案。它使用 SQL Server 代理作業中的 WMI ( Win32_PhysicalDisk)、VBScript 和 PowerShell ——雖然它們xp_cmdshell在這裡避免使用,但總體方法感覺類似地步履蹣跚。

如果您在建築行業工作,這相當於大約八卷膠帶和半加侖 WD-40。

也許您應該考慮使用 PowerShell 或類似工具執行此任務(這看起來不是很簡單嗎?),而不是嘗試彎曲 T-SQL 來執行此操作。SQL Server 並不是真正適合管理伺服器磁碟空間的工具。

引用自:https://dba.stackexchange.com/questions/101189