В этой статье мы рассмотрим различные методы выполнения пакетных процессов SQL из внешнего планировщика, такого как Control-M. Хотя существует несколько способов достижения этой цели, мы сосредоточимся на использовании заданий SQL Server и объясним, почему это предпочтительный метод в определенных сценариях.
Почему использовать задания SQL Server?
При выборе метода выполнения пакетных процессов мы учли следующие факторы:
- Мы хотели избежать изменения схемы нашего приложения, так как все наши пакетные процессы уже были запланированы через SQL Server.
- Использование OSQL было невозможно, потому что некоторые из наших пакетных процессов зависели от расширенных хранимых процедур (xp_cmdshell и Xp_logevent), которые могут выполняться только членами роли sysadmin. Поскольку Control-M является внешним планировщиком пакетов, у него нет привилегий sysadmin.
- Использование DTS (Data Transformation Services) также не было приемлемым вариантом, так как это потребовало бы изменения схемы пакетных процессов.
Исходя из этих факторов, мы решили использовать задания SQL Server для выполнения наших пакетных процессов.
Запуск задания SQL Server из внешнего агента
Чтобы запустить задание SQL Server из внешнего агента и получить статус задания, мы можем использовать хранимую процедуру. Вот пример такой процедуры:
CREATE PROCEDURE dbo.uspGetControlMjobstatus
(
@Jobname varchar(50), -- Задание, которое нужно запустить
@Jobretstatus int OUTPUT -- Возвращает статус выполнения задания
)
AS
BEGIN
-- Здесь находится логика процедуры
END
Процедура запускает указанное задание, а затем периодически запрашивает sysjobserver, чтобы проверить, завершено ли выполнение задания или нет. Она также возвращает статус выполнения задания SQL Server.
Процедура включает настраиваемые переменные, такие как продолжительность ожидания и задержка ожидания, которые могут быть настроены в соответствии с конкретными требованиями задания.
Заключение
Вышеуказанная хранимая процедура доказала свою эффективность в запуске заданий SQL Server из внешних агентов. Используя задания SQL Server, мы смогли выполнять пакетные процессы, не изменяя схему нашего приложения. Мы хотели бы выразить благодарность нашим коллегам Раджешу Хакхару и Сридхару Аагамури за разработку этого решения.
Спасибо за чтение!