Sql-Server

從 SQL Server 內部發現可用的高畫質儲存

  • November 13, 2015

我有一個託管在 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_filesCROSS APPLY來獲取該實例可以從中看到的捲資訊。然後它對這些進行數學計算(例如,一次除以 1024 或兩次或三次,或者可能乘以 100 等,正如您在下面的CAST語句中看到的那樣)並以 MB 和 GB 列出並使用該NUMERIC函式。

這將獲得每個磁碟分區的 GBTOTALFREEMB 空間空間,以及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

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