DBCC CHECKDB оповещение о повреждении баз данных SQL
Проверка целостности баз данных SQL при помощи DBCC CHECKDB и рассылка оповещений на почту.
- Описание
- Подробнее
Описание
Всем доброго времени суток!
Сразу оговорюсь, что мои познания в T-SQL не сильно велики т. к. по большей части пишу код для конфигураций на платформе 1С:Предприятие, и предложенное решение может быть не совсем оптимальным.
Оптимизация и улучшения предложенного скрипта приветствуется.
Небольшое предисловие.
Часто случается, что базы данных повреждаются, по различным причинам, и мы не всегда это вовремя замечаем.
Что бы проверить базу данных надо зайти в интерфейс, запустить скрипт, получить результат. И уже в зависимости от результата принимать какие-то решения и действия. Возможно это нормально, когда есть свободно время и не лень запустить скрипт вручную. Но что делать когда, к примеру, на поддержке с 10-к и более баз и находятся они на разных серверах. Подключаться к каждому серверу и запускать скрипт руками занимает много времени, да делать это вручную лень.
Для разработчика, администратора и т. п. лень это двигатель его прогресса, настроил систему как надо и читай логи, письма и прочее оповещения.
Вот после очередного повреждения базы, я опять вернулся к задаче проверки целостности баз по регламенту и рассылке результата на почту. Ранее я уже занимался этой задачей но не доделал, точнее не нашел нужного мне решения.
Это было небольшое предисловие, теперь перейдем к самой задаче.
Целью задачи было: проверять целостность баз данных 1с на сервере SQL по регламенту и при обнаружении поврежденной базы оповещать по почте. Оповещение только если найдена поврежденная база. Состав письма краткий, все данные результата проверки высылать не требуется.
Поиски готового решения в интернете ничего не дали. Нашел всего одно решение, но оно мне не подходит. Кому интересно, можете ознакомится с публикацией Отправляем результаты задания DBCC CHECKDB по электронной почте.
Сложность в решении задачи заключается в том, что функция DBCC CHCKDB возвращает результат в виде текстового сообщения. Для обработки и формирования сообщения на почту это не годится.
На просторах интернета прочитал, что данные можно вывести в таблицу.
DBCC CHCKDB WITH TABLERESULTS выведет данные в таблицу, но просто так взять и сделать выборку из из этой таблицы нельзя, но выход все же нашелся.
В поисках нужной информации для решения моей задачи наткнулся на публикацию Capture and Store SQL Server Database Integrity History using DBCC CHECKDB, которая была взята за основу решения задачи.
Спасибо тебе Rodert Pearl, что ты ее когда то написал.
Решение:
1. Создаем временную таблицу.
Исходное описание таблицы немного изменено.
Добавлена колонка "DatabaseName".
Изменил типы данных в некоторых колонках, т.к. при первом же тесте получил ошибки о невозможности преобразования типов данных
Колонки: PartitionID, AllocUnitID изменил тип данных с INT на BIGINT,
Колонка: RepairLevel с INT на VARCHAR(300)
В каких колонках нужно менять тип данных искал методом тыка и исключения.