01.11.2023
Думаю каждый, кто начинает работать с планами
обслуживания в Microsoft SQL сервере, столкнётся с ошибкой при удалении ненужного вам плана.
И звучит она примерно так:
Действие Удалить завершилось неудачно для объекта Задание
Конфликт инструкции DELETE с ограничением REFERENCE ... (ошибка: 547)
Эту проблему мы с вами и будем решать.
Итак, проблема неочевидна, на скриншоте страшноватые надписи с наименованием таблиц и каких-то параметров, ничего не понятно, а удалить план хочется.
Сама ошибка выглядит примерно так:
Вкратце:
Действие Удалить завершилось неудачно для объекта Задание
Конфликт инструкции DELETE с ограничением REFERENCE ... (ошибка: 547)
Для удаления данного задания нам понадобится открыть шелл MS SQL сервера, где мы сможем выполнять команды. Для этого закрываем окна с ошибкой и кликаем на верхней панели "Создать запрос":
В правой части у нас появляется форма, где мы вводим следующую команду:
select * from msdb.dbo.sysmaintplan_plans
И нажимаем сверху на кнопку "Выполнить":
После нажатия на кнопку "Выполнить", снизу окна у нас появится информация о текущих планах обслуживания и будет столбец с указанием ID каждого плана, он нам и нужен:
В списке мы находим название того, плана, что мы хотим удалить и видим его ID, в нашем случае это задание под номером 2 с ID: A3550947-8DDC-4D25-8E97-05DC17FB53DC. Копируем этот ID и формируем следующую команду в шелле SQL, предыдущую команду удаляем.
Получаем примерно следующее:
delete from msdb.dbo.sysmaintplan_subplans where plan_id = 'A3550947-8DDC-4D25-8E97-05DC17FB53DC'
Где в конце команды в кавычки мы вставляем скопированный ID. Нажимаем кнопку "Выполнить", снизу окна появится надпись "Запрос успешно выполнен". Отлично.
Ну и для положительного решения нашего вопроса выполняем второй и последний запрос в шелле (не забываем удалять предыдущую команду):
delete from msdb.dbo.sysmaintplan_plans where id = 'A3550947-8DDC-4D25-8E97-05DC17FB53DC'
Опять жмём "Выполнить" и опять должны увидеть надпись "Запрос успешно выполнен".
Отлично. Теперь мы спокойно можем удалить наше задание без всяких ошибок!
Напоследок хочется отметить один момент:
если задание создано через "Мастер планов обслуживания", то задания нужно удалять именно через каталог объектов "Управление" - "Планы обслуживания", в этом случае ошибки изначально не будет. Если же задание создавалось вручную, то, скорее всего, получите ошибку и решить её можно вышеприведённым методом.
На этом всё, удачи в администрировании!