Sql-Server
無效的對象名稱“sys.dm_os_volume_stats”
我正在嘗試選擇伺服器中 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 並不是真正適合管理伺服器磁碟空間的工具。