我们希望以编程方式进行数据库备份。为此,我们使用了SqlServer.Management.Smo
命名空间及其类,它运行良好。
现在我们需要确定在将数据库备份保存到指定位置之前,该位置是否有足够的空间来容纳备份文件。
如果没有足够的空间,我们希望提醒用户注意这一事实。
我们发现的一种方法是,如果内存中没有足够的空间,请设置try catch并捕获异常。但我们正在寻找一种解决方案,以便在保存之前获得尺寸。
答案 0 :(得分:1)
在尝试备份数据库之前,无法获得确切的备份大小。
通过查看数据库文件大小可以猜出近似大小。如果您不知道它有多大并且您需要将某些估计值“发布”给磁盘已满的不幸用户,这将非常有用。但真正的数据库大小可能 更小。
SELECT CAST(SUM(size) AS DECIMAL) * 8192 from sys.database_files
鉴于您无论如何都必须添加try-catch子句,通过查看上一个备份大小可以获得更简单,更准确的估计:
SELECT TOP 1 database_name, backup_size FROM msdb..backupset ORDER BY backup_finish_date DESC
您可以将这些值中的任何一个与可用磁盘空间量进行比较。将后一种方法获得的数量加上一些余量来解释某些预期的逐步数据库增长可能是有用的。