web-dev-qa-db-ja.com

SQLServer内から利用可能なHDストレージを発見する

VPSでホストされているSQLServer2012インスタンスがあります。 VPSのWindowsに直接ログインできません。そのVPSに複数のインスタンスがインストールされていることを知っています。

各DBのファイル名、そのファイルのサイズ、使用済みスペースと未使用スペースを表示するクエリがあります。ファイルパスから、すべてが同じパーティションにあるわけではないことがわかります(インフラストラクチャ管理者が複数のパーティションを作成した理由はIDKです...)。

各パーティションのサイズと空き容量を確認する必要があります。 WindowsにログインせずにSQLServerのクエリからそれを見つける方法はありますか?

2
Hikari

SQL2008R2およびSQLServer2005上のサーバーに対して以下のクエリを使用します。

これには、スクリプト内での有効化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
0
KASQLDBA
   select @@SERVERNAME
   ,UPPER(dovs.volume_mount_point) AS [drive]
   ,max(CONVERT(BIGINT,dovs.available_bytes/1048576.0)) AS [Free(MB)]
   ,max(CONVERT(BIGINT,dovs.total_bytes/1048576.0)) AS [Total(MB)]
   ,max(CAST(CONVERT(BIGINT,dovs.available_bytes/1048576.0)/(CONVERT(BIGINT,dovs .total_bytes/1048576.0)*1.0)*100 AS INT)) AS [Free(%)]

   FROM sys.master_files as mf
   CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.FILE_ID) as dovs
   GROUP BY dovs.volume_mount_point
0
Guristas