Sql-Server
從 SQL Server 內部發現可用的高畫質儲存
我有一個託管在 VPS 中的 SQL Server 2012 實例。我無法直接登錄 VPS 的 Windows。我知道該 VPS 上安裝了多個實例。
我有一個查詢顯示每個數據庫的文件名、該文件的大小、已使用和未使用的空間。通過它們的文件路徑,我可以看到它們並不都在同一個分區上(IDK 為什麼基礎設施管理員創建了多個分區……)。
我需要查看每個分區的大小和可用空間。有沒有辦法從 SQL Server 中的查詢中找到它而無需在 Windows 上登錄?
我使用以下內容獲取 SQL Server 作業系統驅動器分區\卷資訊 SQL Server 每個實例,以 GB 和 MB 為單位。
***資訊:***這是使用 SQL 系統 DM (
sys.dm_os_volume_stats
) 和sys.master_files
表CROSS APPLY
來獲取該實例可以從中看到的捲資訊。然後它對這些進行數學計算(例如,一次除以 1024 或兩次或三次,或者可能乘以 100 等,正如您在下面的CAST
語句中看到的那樣)並以 MB 和 GB 列出並使用該NUMERIC
函式。這將獲得每個磁碟分區的 GB
TOTAL
和FREE
MB 空間空間,以及FREE SPACE
使用直接的每個磁碟分區的百分比TSQL
。SELECT DISTINCT UPPER(vs.volume_mount_point) AS Drive_Letter ,vs.logical_volume_name AS Drive_Label ,CAST((vs.total_bytes / 1024.0 / 1024) AS NUMERIC(18, 1)) AS Total_Size_MB ,CAST((vs.available_bytes / 1024.0 / 1024) AS NUMERIC(18, 1)) AS Free_Space_MB ,CAST((vs.total_bytes / 1024.0 / 1024 / 1024) AS NUMERIC(18, 1)) AS Total_Size_GB ,CAST((vs.available_bytes / 1024.0 / 1024 / 1024) AS NUMERIC(18, 1)) AS Free_Space_GB ,CAST((vs.available_bytes / 1024.0 / 1024 / 1024) / (vs.Total_Bytes / 1024.0 / 1024 / 1024) AS NUMERIC(18, 3)) * 100 AS Free_Space_Percentage FROM sys.master_files f CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id) AS vs ORDER BY UPPER(vs.volume_mount_point)
SQL Server獲取驅動器空間資訊,獲取卷空間資訊,獲取磁碟空間資訊,獲取磁碟可用空間,磁碟空間分配,報告磁碟空間,報告儲存空間
我對 SQL 2008R2 和 SQL Server 2005 上的伺服器使用以下查詢:
它涉及在腳本中啟用和配置啟用 Ole 自動化過程,然後使用 xp_fixeddrives 收集資訊。
看看下面是否有幫助。
/*******************************************************/ /* Enabling Ole Automation Procedures */ sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO /*******************************************************/ SET NOCOUNT ON DECLARE @hr int DECLARE @fso int DECLARE @drive char(1) DECLARE @odrive int DECLARE @TotalSize varchar(20) DECLARE @MB Numeric ; SET @MB = 1048576 CREATE TABLE #drives (drive char(1) PRIMARY KEY, FreeSpace int NULL, TotalSize int NULL) INSERT #drives(drive,FreeSpace) EXEC master.dbo.xp_fixeddrives EXEC @hr=sp_OACreate 'Scripting.FileSystemObject',@fso OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso DECLARE dcur CURSOR LOCAL FAST_FORWARD FOR SELECT drive from #drives ORDER by drive OPEN dcur FETCH NEXT FROM dcur INTO @drive WHILE @@FETCH_STATUS=0 BEGIN EXEC @hr = sp_OAMethod @fso,'GetDrive', @odrive OUT, @drive IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr = sp_OAGetProperty @odrive,'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo @odrive UPDATE #drives SET TotalSize=@TotalSize/@MB WHERE drive=@drive FETCH NEXT FROM dcur INTO @drive End Close dcur DEALLOCATE dcur EXEC @hr=sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso SELECT @@Servername SELECT drive, TotalSize as 'Total(MB)', FreeSpace as 'Free(MB)' FROM #drives ORDER BY drive DROP TABLE #drives GO