Предыстория создания SQL Backup Inspector
Однажды, на далёком-предалёком сервере, администратор баз данных (назовём его Вася) столкнулся с классической проблемой:
«Бэкапы вроде бы есть, но что толку, если их никто не проверял?»
Всё началось с того, что бухгалтер, на которого Вася работал, внезапно захотел откатить одну из баз на состояние сегодняшнего утра, но оказалось, что последний рабочий бэкап был не то чтобы свежий, но скорее второй свежести (сделан всего-то пару недель назад)
Что пошло не так?
- Бэкапы писались в папку, которую никто не мониторил (потому что «и так работает»).
- Размеры файлов плавали — иногда бэкап был 15 ГБ, а иногда 0,5 ГБ (из-за сбоя задания).
- Диск заполнился, и новые бэкапы перестали создаваться (но об этом никто не знал, пока не случился п... апокалипсис).
Результат:
- Полдня аврала (пока искали хоть какой-то рабочий бэкап).
- Разборки с начальством («Как так?! Мы же платим за резервное копирование!»).
- Глубокое разочарование в жизни и себе.
После этого Вася сказал: «Хватит это терпеть! Если никто не проверяет бэкапы — пусть это делает скрипт!»
SQL Backup Inspector родился из боли, страданий и пары бессонных ночей. Надеюсь, что он спасет и других админов от тех же ошибок.
SQL Backup Inspector — это PowerShell-скрипт, предназначенный для автоматизации контроля за состоянием резервных копий SQL Server. Он помогает:
- Проверять актуальность бэкапов (давность создания)
- Контролировать размеры бэкапов (соответствие ожидаемым значениям)
- Анализировать свободное место на диске (достаточно ли для новых бэкапов)
- Находить дубликаты и пустые папки (оптимизация хранения)
- Строить графики статистики (визуализация по дням)
Скрипт рассчитывает требования к дисковому пространству, основываясь на максимальном дневном объеме бэкапов за весь период наблюдения, учитывая допуск в 3Гб (значение можно изменить через параметр -growthAllowanceGB).
Кому однозначно пригодится:
- Администраторы SQL Server
- DevOps-инженеры
- Любой заинтересованный в сохранности бэкапов баз данных
Параметры запуска
Параметр
Описание
Значение по умолчанию
-backupPath
Путь к папке с бэкапами (*.bak)
F:\SQL_Backup
-logFileDirectory
Директория для сохранения логов
C:\Temp\Logs
-controlSizeGB
Ожидаемый минимальный размер бэкапов (ГБ)
10
-maxDaysOld
Максимально допустимый возраст бэкапов (дней)
7
-growthAllowanceGB
Дополнительный запас места для новых бэкапов (ГБ)
3
-noGraph
Отключение графического интерфейса (для автоматизированных запусков)
-includeSubdirs
Поиск бэкапов во вложенных папках
-excludeDirs
Список папок для исключения (через запятую)
-Y
Автоподтверждение (пропуск запроса подтверждения)
Параметр |
Описание |
Значение по умолчанию |
-backupPath |
Путь к папке с бэкапами (*.bak) |
F:\SQL_Backup |
-logFileDirectory |
Директория для сохранения логов |
C:\Temp\Logs |
-controlSizeGB |
Ожидаемый минимальный размер бэкапов (ГБ) |
10 |
-maxDaysOld |
Максимально допустимый возраст бэкапов (дней) |
7 |
-growthAllowanceGB |
Дополнительный запас места для новых бэкапов (ГБ) |
3 |
-noGraph |
Отключение графического интерфейса (для автоматизированных запусков) |
|
-includeSubdirs |
Поиск бэкапов во вложенных папках |
|
-excludeDirs |
Список папок для исключения (через запятую) |
|
-Y |
Автоподтверждение (пропуск запроса подтверждения) |
|
Основные функции
1. Проверка актуальности бэкапов (контроль по дате):
- Скрипт ищет самый свежий .bak-файл и проверяет, не старше ли он maxDaysOld дней.
- Пример:
ВНИМАНИЕ: Самый свежий бэкап от 2025-04-01 старше 7 дней!
2. Анализ размеров бэкапов (сравнение с контрольным значением controlSizeGB):
- Если суммарный размер бэкапов за день меньше controlSizeGB, выводится предупреждение.
- Пример:
Дата: 2025-04-05 - Суммарный размер бэкапов: 2.4 GB
ВНИМАНИЕ: Суммарный объем меньше контрольного (10 GB)
3. Проверка свободного места и расчёт требуемого
- На основе максимального дневного размера + запас (параметр -growthAllowanceGB).
- Пример:
===============================================
АНАЛИЗ ДИСКОВОГО ПРОСТРАНСТВА
Максимальный дневной размер бэкапов: 15.5 GB
Дополнительный допуск: 3 GB
Требуется свободного места: 18.5 GB
На диске [F:] свободно: 20.3 GB из 500 GB (4.06%)
===============================================
Достаточно свободного места: 20.3 GB (требуется: 18.5 GB)
4. Поиск проблемных мест и дополнительные проверки:
- Папки без .bak-файлов (возможные ошибки резервного копирования).
- Дубликаты бэкапов (файлы с одинаковыми именами).
5. Гибкий поиск бэкапов:
- Возможность поиска только в указанной папке или рекурсивно по всем подпапкам
-
Исключение указанных папок из проверки при рекурсивном поиске
-
Четкое отображение структуры найденных бэкапов в отчете
6. Визуализация данных на диаграмма (если не используется -noGraph)
График распределения размеров по дням (цветовая индикация):
Зеленый — норма (> controlSizeGB)
Оранжевый — требует внимания (≤ controlSizeGB)
Красный — критично (< 10% от controlSizeGB)
Примеры использования
1. Стандартный запуск (бэкапы не старше 3х дней, контрольный суммарный размер 20Гб, автоматическое подтверждение и вывод графика)
.\SQLBackupInspector.ps1 -backupPath "D:\SQL_Backups" -controlSizeGB 20 -maxDaysOld 3
2. Автоматический режим (стандартные параметры (см. скрипт), без подтверждения и графика)
.\SQLBackupInspector.ps1 -Y -noGraph
3. Проверка с увеличенным запасом места (стандартные параметры, допуск прироста баз 5 Гб с подтверждением)
.\SQLBackupInspector.ps1 -growthAllowanceGB 5 -Y
4. Поиск во всех подпапках с исключением временных папок:
.\SQLBackupInspector.ps1 -includeSubdirs -excludeDirs "Temp,Old_Backups"
Обработка ошибок
- Если диск недоступен – вывод сообщения с причиной ошибки.
- Если нет .bak-файлов – скрипт завершается с ошибкой.
- Если не удалось создать лог – сообщение в консоль.
- Если исключенные папки не найдены - предупреждение в лог
Преимущества
- Автоматизация рутинных проверок (не нужно вручную проверять каждый файл)
- Гибкость (настройка пороговых значений под свои нужды)
- Логирование (все результаты сохраняются в текстовый файл)
- Визуализация (удобный график для быстрого анализа)
- Подходит для планировщика задач (можно запускать автоматически)
- Адаптивность к сложным структурам хранения бэкапов
- Точечная проверка нужных директорий без лишнего сканирования
Рекомендации
- Для автоматического мониторинга добавьте скрипт в Планировщик задач Windows с параметром -noGraph.
- Настройте controlSizeGB в зависимости от среднего размера ваших бэкапов.
- Проверяйте логи после каждого выполнения (стандартная настройка C:\Temp\Logs\backup_summary_*.txt).
- Хорошо бы дописать проверку целостности бэкапов, возможно когда-нибудь я это сделаю и сам, если будет отклик
SQL Backup Inspector — это универсальный инструмент для контроля резервных копий SQL Server, который экономит время и снижает риски потери данных. Просто запустите его — и получите полный отчет о состоянии бэкапов!