2012-03-20 4 views
0

Мы хотим использовать резервные копии db программно. Для этого мы использовали пространство имен SqlServer.Management.Smo и его классы, и оно отлично работает.Получите резервную копию базы данных базы данных SQL Server .Net

Теперь у нас есть требование определить, достаточно ли места для хранения файлов резервных копий, прежде чем сохранять резервную копию db в указанное место.

И если места недостаточно, мы хотим предупредить пользователя об этом факте.

Один из способов, по которым мы обнаружили, - это уловить попытку и поймать исключение, если в памяти недостаточно места. Но мы ищем решение, чтобы получить размер, прежде чем сохранять его.

+0

Но вы не будете знать размер резервной копии, пока она не будет создана, при условии, что доступно достаточно места. Я думаю, что единственным реалистичным решением является предупреждение пользователю, когда на диске доступно x процент свободного места. –

+2

Похожие сообщения: http://stackoverflow.com/questions/862018/calculating-db-backup-size –

+0

Поддерживаете ли вы файл локально на сервере, а затем копируете его в новое место или резервное копирование в целевое местоположение? – tsells

ответ

1

Невозможно получить точный размер резервной копии, пока вы не попытаетесь создать резервную копию базы данных.

Приблизительный размер можно угадать, посмотрев размеры файлов базы данных. Это полезно, если вы не представляете, насколько это будет велика, и вам нужно «опубликовать» некоторую оценку несчастному пользователю, чей диск заполнен. Но реальные размеры базы данных, вероятно, будут много меньше.

SELECT CAST(SUM(size) AS DECIMAL) * 8192 from sys.database_files 

Учитывая, что вы должны добавить, что пункт примерочных поймать в любом случае, гораздо проще и более точные оценки можно получить, глядя на последний размер резервной копии, как это:

SELECT TOP 1 database_name, backup_size FROM msdb..backupset ORDER BY backup_finish_date DESC 

Вы можете сравнить либо из этих значений в объем свободного дискового пространства. Может быть полезно добавить некоторый запас к числу, полученному последним методом, для учета некоторого ожидаемого постепенного роста базы данных.