|
инструмент для анализа работы джобов.
#39891229
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: другая столица
Сообщения: 322
|
|
denis_viktorovich,
Держите утилитку. Сиквельный скрипт, весьма удобный, возможно ответит на часть вопросов
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239.
IF OBJECT_ID('fn_freq_interval_desc', 'FN') IS NOT NULL
DROP FUNCTION [fn_freq_interval_desc]
GO
IF OBJECT_ID('fn_Time2Str', 'FN') IS NOT NULL
DROP FUNCTION [fn_Time2Str]
GO
IF OBJECT_ID('fn_Date2Str', 'FN') IS NOT NULL
DROP FUNCTION [fn_Date2Str]
GO
;
-- ############################################## TEMP FUNCTIONS ######################################
CREATE FUNCTION fn_freq_interval_desc(@freq_interval INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @result VARCHAR(1000)
SET @result = ''
IF (@freq_interval & 1 = 1)
SET @result = 'Sunday, '
IF (@freq_interval & 2 = 2)
SET @result = @result + 'Monday, '
IF (@freq_interval & 4 = 4)
SET @result = @result + 'Tuesday, '
IF (@freq_interval & 8 = 8)
SET @result = @result + 'Wednesday, '
IF (@freq_interval & 16 = 16)
SET @result = @result + 'Thursday, '
IF (@freq_interval & 32 = 32)
SET @result = @result + 'Friday, '
IF (@freq_interval & 64 = 64)
SET @result = @result + 'Saturday, '
RETURN(LEFT(@result,LEN(@result)-1))
END
GO
CREATE FUNCTION fn_Time2Str(@time INT)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @strtime CHAR(6)
SET @strtime = RIGHT('000000' + CONVERT(VARCHAR,@time),6)
RETURN LEFT(@strtime,2) + ':' + SUBSTRING(@strtime,3,2) + ':' + RIGHT(@strtime,2)
END
GO
CREATE FUNCTION fn_Date2Str(@date INT)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @strdate CHAR(8)
SET @strdate = LEFT(CONVERT(VARCHAR,@date) + '00000000', 8)
RETURN RIGHT(@strdate,2) + '/' + SUBSTRING(@strdate,5,2) + '/' + LEFT(@strdate,4)
END
GO
-- ############################################## END OF TEMP FUNCTIONS ######################################
/*
Usage : Change the value of variable @Filter
'Y' --> display only enabled job
'N' --> display only disabled job
'A' --> display all job
'X' --> display job which is duration already end
*/
;
DECLARE @Filter CHAR(1)
SET @Filter = 'A'
DECLARE @sql VARCHAR(8000)
DECLARE @is_sysadmin INT
DECLARE @job_owner SYSNAME
-- #################
IF OBJECT_ID('tempdb..#xp_results') IS NOT NULL
BEGIN
DROP TABLE #xp_results
END
CREATE TABLE #xp_results (
job_id UNIQUEIDENTIFIER NOT NULL,
last_run_date INT NOT NULL,
last_run_time INT NOT NULL,
next_run_date INT NOT NULL,
next_run_time INT NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
SELECT @is_sysadmin = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0)
SELECT @job_owner = SUSER_SNAME()
INSERT INTO #xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
SET @sql = '
SELECT
j.Name AS JobName,
jst.command,
jst.step_id,
CASE j.enabled WHEN 1 THEN ''Yes'' else ''No'' END as Enabled,
CASE s.enabled WHEN 1 THEN ''Yes'' else ''No'' END as Scheduled,
j.Description,
CASE s.freq_type
WHEN 1 THEN ''Once''
WHEN 4 THEN ''Daily''
WHEN 8 THEN ''Weekly''
WHEN 16 THEN ''Monthly''
WHEN 32 THEN ''Monthly relative''
WHEN 64 THEN ''When SQL Server Agent starts''
WHEN 128 THEN ''Start whenever the CPU(s) become idle'' END as Occurs,
CASE s.freq_type
WHEN 1 THEN ''O''
WHEN 4 THEN ''Every ''
+ convert(varchar,s.freq_interval)
+ '' day(s)''
WHEN 8 THEN ''Every ''
+ convert(varchar,s.freq_recurrence_factor)
+ '' weeks(s) on ''
+ dbo.fn_freq_interval_desc(s.freq_interval)
WHEN 16 THEN ''Day '' + convert(varchar,s.freq_interval)
+ '' of every ''
+ convert(varchar,s.freq_recurrence_factor)
+ '' month(s)''
WHEN 32 THEN ''The ''
+ CASE s.freq_relative_interval
WHEN 1 THEN ''First''
WHEN 2 THEN ''Second''
WHEN 4 THEN ''Third''
WHEN 8 THEN ''Fourth''
WHEN 16 THEN ''Last'' END
+ CASE s.freq_interval
WHEN 1 THEN '' Sunday''
WHEN 2 THEN '' Monday''
WHEN 3 THEN '' Tuesday''
WHEN 4 THEN '' Wednesday''
WHEN 5 THEN '' Thursday''
WHEN 6 THEN '' Friday''
WHEN 7 THEN '' Saturday''
WHEN 8 THEN '' Day''
WHEN 9 THEN '' Weekday''
WHEN 10 THEN '' Weekend Day'' END
+ '' of every ''
+ convert(varchar,s.freq_recurrence_factor)
+ '' month(s)'' END AS Occurs_detail
, CASE s.freq_subday_type
WHEN 1 THEN ''Occurs once at ''
+ dbo.fn_Time2Str(s.active_start_time)
WHEN 2 THEN ''Occurs every ''
+ convert(varchar,s.freq_subday_interval)
+ '' Seconds(s) Starting at ''
+ dbo.fn_Time2Str(s.active_start_time)
+ '' ending at ''
+ dbo.fn_Time2Str(s.active_end_time)
WHEN 4 THEN ''Occurs every ''
+ convert(varchar,s.freq_subday_interval)
+ '' Minute(s) Starting at ''
+ dbo.fn_Time2Str(s.active_start_time)
+ '' ending at ''
+ dbo.fn_Time2Str(s.active_end_time)
WHEN 8 THEN ''Occurs every ''
+ convert(varchar,s.freq_subday_interval)
+ '' Hour(s) Starting at ''
+ dbo.fn_Time2Str(s.active_start_time)
+ '' ending at ''
+ dbo.fn_Time2Str(s.active_end_time) END AS Frequency
, CASE WHEN s.freq_type = 1 THEN ''On date: ''
+ dbo.fn_Date2Str(s.active_start_date)
+ '' At time: ''
+ dbo.fn_Time2Str(s.active_start_time)
WHEN s.freq_type < 64 THEN ''Start date: ''
+ dbo.fn_Date2Str(s.active_start_date)
+ '' end date: ''
+ dbo.fn_Date2Str(s.active_end_date) END as Duration
, dbo.fn_Date2Str(xp.next_run_date) + '' ''
+ dbo.fn_Time2Str(xp.next_run_time) AS Next_Run_Date
FROM msdb.dbo.sysjobs j (NOLOCK)
INNER JOIN msdb.dbo.sysjobschedules js (NOLOCK) ON j.job_id = js.job_id
INNER JOIN msdb.dbo.sysjobsteps jst (NOLOCK) ON j.job_id = jst.Job_id
INNER JOIN msdb.dbo.sysschedules s (NOLOCK) ON js.schedule_id = s.schedule_id
INNER JOIN msdb.dbo.syscategories c (NOLOCK) ON j.category_id = c.category_id
INNER JOIN #xp_results xp (NOLOCK) ON j.job_id = xp.job_id
WHERE 1 = 1
-- ########################
--AND j.Name LIKE ''%mate%''
-- ########################
@Filter
ORDER BY j.name'
IF @Filter = 'Y'
SET @sql = REPLACE(@sql,'@Filter',' AND j.enabled = 1 ')
ELSE
IF @Filter = 'N'
SET @sql = REPLACE(@sql,'@Filter',' AND j.enabled = 0 ')
ELSE
IF @Filter = 'X'
SET @sql = REPLACE(@sql,'@Filter',
'AND s.active_end_date < convert(varchar(8),GetDate(),112) ')
ELSE
SET @sql = REPLACE(@sql,'@Filter','')
EXEC(@sql)
-- ##################################################################
IF OBJECT_ID('fn_freq_interval_desc', 'FN') IS NOT NULL
DROP FUNCTION [fn_freq_interval_desc]
GO
IF OBJECT_ID('fn_Time2Str', 'FN') IS NOT NULL
DROP FUNCTION [fn_Time2Str]
GO
IF OBJECT_ID('fn_Date2Str', 'FN') IS NOT NULL
DROP FUNCTION [fn_Date2Str]
GO
Модератор: В следующий раз вашу портянку без споилера я просто сотру. Уважайте других участников.
|
|
|