SQL Server Jobs
Доброго времени суток.
Сегодня я бы хотел рассмотреть вопрос заданий, которые сейчас выполняются на сервере. Есть множество способов получения нужной нам информации и мы сегодня рассмотрим некоторые из них:
1. Самый простой способ, но не самый полезный это просто использовать процедуру msdb.dbo.sp_help_job:
exec msdb.dbo.sp_help_job @execution_status = 1
Здесь мы получим множество информации о запущенных заданиях в данный момент. Минут данного метода заключается в том, что с этими данными сложно работать.
2. Используя ту же процедуру мы можем загнать данные в табличную форму, с которой можно будет работать, но и тут не обойдёмся без минусов, нам придётся использовать функцию OPENROWSET:
SELECT * INTO #ActiveJobs FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;','EXEC msdb.dbo.sp_help_job @execution_status = 1')
SELECT * FROM #ActiveJobs
Если вы испытываете сложности с данной функцией, то необходимо указать верные параметры. В моём случае я использую встроенную систему безопасности без указания пароля. Возможно потребуется изменить параметры примерно на следующие ‘Server=SERVER_NAME\INSTANCE_NAME;uid=user;pwd=111111′ вместо Server=(local);Trusted_Connection=yes;’
3. Есть ещё один способ, но он достаточно громоздкий:
IF OBJECT_ID('tempdb.dbo.#RunningJobs') IS NOT NULL
DROP TABLE #RunningJobs
CREATE TABLE #RunningJobs (
Job_ID UNIQUEIDENTIFIER,
Last_Run_Date INT,
Last_Run_Time INT,
Next_Run_Date INT,
Next_Run_Time INT,
Next_Run_Schedule_ID INT,
Requested_To_Run INT,
Request_Source INT,
Request_Source_ID VARCHAR(100),
Running INT,
Current_Step INT,
Current_Retry_Attempt INT,
State INT )
INSERT INTO #RunningJobs EXEC master.dbo.xp_sqlagent_enum_jobs 1,garbage
SELECT name AS [Job Name],*
FROM #RunningJobs JSR
JOIN msdb.dbo.sysjobs
ON JSR.Job_ID=sysjobs.job_id
WHERE Running=1
ORDER BY name,next_run_date,next_run_time
Мы рассмотрели несколько способов получения активных заданий. Каким именно пользоваться решать вам.


