我有太多服务器要管理,无法在每台服务器上手动执行此操作,因此我想以某种方式使用 dbatools 模块和以下用于收集备份集信息的查询来自动执行此操作。
WITH BackupsSize AS(
SELECT TOP 1000
rn = ROW_NUMBER() OVER (ORDER BY DATEPART(year,[backup_start_date]) ASC, DATEPART(month,[backup_start_date]) ASC)
, [Year] = DATEPART(year,[backup_start_date])
, [Month] = DATEPART(month,[backup_start_date])
, [Backup Size GB] = CONVERT(DECIMAL(10,2),ROUND(AVG([backup_size]/1024/1024/1024),4))
, [Compressed Backup Size GB] = CONVERT(DECIMAL(10,2),ROUND(AVG([compressed_backup_size]/1024/1024/1024),4))
FROM
msdb.dbo.backupset
WHERE
[database_name] = N'A1000370D1'
AND [type] = 'D'
AND backup_start_date BETWEEN DATEADD(mm, - 13, GETDATE()) AND GETDATE()
GROUP BY
[database_name]
, DATEPART(yyyy,[backup_start_date])
, DATEPART(mm, [backup_start_date])
ORDER BY [Year],[Month])
--SECTION 1 END
--SECTION 2 BEGIN
SELECT
b.Year,
b.Month,
b.[Backup Size GB],
0 AS deltaNormal,
b.[Compressed Backup Size GB],
0 AS deltaCompressed
FROM BackupsSize b
WHERE b.rn = 1
UNION
SELECT
b.Year,
b.Month,
b.[Backup Size GB],
b.[Backup Size GB] - d.[Backup Size GB] AS deltaNormal,
b.[Compressed Backup Size GB],
b.[Compressed Backup Size GB] - d.[Compressed Backup Size GB] AS deltaCompressed
FROM BackupsSize b
CROSS APPLY (
SELECT bs.[Backup Size GB],bs.[Compressed Backup Size GB]
FROM BackupsSize bs
WHERE bs.rn = b.rn - 1
) AS d
我有一个位于数据库表中的服务器列表,并计划使用 invoke-dbaquery 将一个 $sqlinstance 变量与我的实例列表一起加载。
我不确定并且需要帮助的是如何使用上述 SQL 脚本一次性收集所有服务器上所有数据库的历史备份数据。如何在遍历每个数据库的同时也遍历我的实例列表?
Get-DbaDbBackupHistory
您可以使用from捕获这一切dbatools
,不需要循环(它在内部循环)。您可能需要深入研究
Totalsize
和CompressedBackupSize
属性以获取未格式化的 MB 或 GB 的原始数。您应该能够将此输出写入表
Write-DbaDbTableData
如果您需要逐个遍历每个 SQL 实例和数据库,这是我将使用的方法:
但是,我更喜欢这种方法:
有关更多信息,请参阅dbatools 帮助站点
Invoke-DbaQuery
上的示例 3 和 4