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
Мы рассмотрели несколько способов получения активных заданий. Каким именно пользоваться решать вам.