SQL Serverのディスク使用状況やデータベースFileInfoを収集するための以下の方法を紹介します。
1. ディスクパーティションの空き容量確認
方法二は現在稼働中のデータベースのみを収集しますが、方法三は稼働中データベースだけでなく、オフライン状態のデータベースも収集可能です。
EXEC xp_fixeddrives
2. データベースファイルの詳細情報を取得
SELECT *
FROM sys.database_files
SELECT name, CAST(size AS FLOAT) * (8192.0 / 1024.0 / 1024.0) AS size_mb
FROM sys.database_files
3. 現在のデータベースのディスク使用状況確認
EXEC sp_spaceused
4. 各データベースのログファイル容量と使用率確認
DBCC SQLPERF(LOGSPACE)
5. サーバーインスタンス情報収集
SELECT
SERVERPROPERTY('machinename') AS machine_name,
@@SERVERNAME AS server_name,
SERVERPROPERTY('edition') AS edition,
@@version AS version
方法一:sp_spaceusedを用いた収集
DECLARE @サーバー名 VARCHAR(100)
DECLARE データベースカーソル CURSOR FOR
SELECT name
FROM sys.databases
WHERE database_id > 4 AND name != 'distribution'
OPEN データベースカーソル
FETCH NEXT FROM データベースカーソル INTO @サーバー名
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'USE ' + QUOTENAME(@サーバー名)
PRINT 'GO'
PRINT 'EXEC sp_spaceused'
FETCH NEXT FROM データベースカーソル INTO @サーバー名
END
CLOSE データベースカーソル
DEALLOCATE データベースカーソル
方法二:sys.database_filesとsp_MSforeachdbを用いた収集
USE master
GO
CREATE TABLE データベースサイズ (
データベース名 VARCHAR(100),
サイズ INT)
EXEC sp_MSforeachdb '
INSERT INTO master.dbo.データベースサイズ (dbname, size)
SELECT ''?'' AS dbname, SUM(size) AS size
FROM ?.sys.database_files'
SELECT * FROM データベースサイズ
SELECT SUM(サイズ * 8) / 1024 AS 総サイズMB
FROM データベースサイズ
WHERE データベース名 NOT IN ('master', 'tempdb', 'model', 'msdb', 'distribution')
方法三:sys.sysaltfilesとsys.databasesを用いた収集
SELECT db.name AS データベース名,
sf.name AS ファイル名,
sf.filename AS ファイルパス,
sf.size AS サイズ
FROM sys.sysaltfiles sf
INNER JOIN sys.databases db ON sf.dbid = db.database_id
WHERE db.database_id > 4 AND db.name != 'distribution'
SELECT SUM(sf.size * 8) / 1024 AS 総サイズMB
FROM sys.sysaltfiles sf
INNER JOIN sys.databases db ON sf.dbid = db.database_id
WHERE db.database_id > 4 AND db.name != 'distribution'
収集方法の違い
方法二は現在稼働中のデータベースのみを収集しますが、方法三は稼働中データベースだけでなく、オフライン状態のデータベースも収集可能です。