SQL Server 2000 - последний запуск/время выполнения SP/View/UDF

58
5

Это производственная база данных SQL Server 2000 с около 1500 объектами базы данных (SP, Views, UDF). Теперь я сказал, что около 20% этих объектов базы данных не используются приложениями (200 из них в основном небольшие, построенные на нескольких платформах/технологиях), и им поручено идентифицировать их. Есть ли сценарий, который я мог бы запустить против базы данных для определения "последней даты/времени запуска" этих объектов базы данных?

Есть ли другой способ идентифицировать неиспользуемые объекты базы данных - APART FROM просматривать код? Обратите внимание, что это SQL Server 2000. Любая помощь очень ценится.

спасибо

спросил(а) 2013-09-23T16:52:00+04:00 7 лет, 1 месяц назад
1
Решение
-4

Мне пришлось написать код для моих серверов SQL2000.

Я вставляю их в таблицу для постоянного мониторинга

Этот первый бит кода скажет вам, когда запланированы рабочие задания

SET @SQL = 'SELECT 
J.[name] AS [JobName]
, CASE S.[enabled]
WHEN 1 THEN ''Yes''
WHEN 0 THEN ''No''
END AS [IsEnabled]
, CASE
WHEN [freq_type] = 64 THEN ''Start automatically when SQL Server Agent starts''
WHEN [freq_type] = 128 THEN ''Start whenever the CPUs become idle''
WHEN [freq_type] IN (4,8,16,32) THEN ''Recurring''
WHEN [freq_type] = 1 THEN ''One Time''
END [ScheduleType]
, CASE [freq_type]
WHEN 1 THEN ''One Time''
WHEN 4 THEN ''Daily''
WHEN 8 THEN ''Weekly''
WHEN 16 THEN ''Monthly''
WHEN 32 THEN ''Monthly - Relative to Frequency Interval''
WHEN 64 THEN ''Start automatically when SQL Server Agent starts''
WHEN 128 THEN ''Start whenever the CPUs become idle''
END [Occurrence]
, CASE [freq_type]
WHEN 4 THEN ''Occurs every '' + CAST([freq_interval] AS VARCHAR(3)) + '' day(s)''
WHEN 8 THEN ''Occurs every '' + CAST([freq_recurrence_factor] AS VARCHAR(3))
+ '' week(s) on ''
+ CASE WHEN [freq_interval] & 1 = 1 THEN ''Sunday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 2 = 2 THEN '', Monday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 4 = 4 THEN '', Tuesday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 8 = 8 THEN '', Wednesday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 16 = 16 THEN '', Thursday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 32 = 32 THEN '', Friday'' ELSE '''' END
+ CASE WHEN [freq_interval] & 64 = 64 THEN '', Saturday'' ELSE '''' END
WHEN 16 THEN ''Occurs on Day '' + CAST([freq_interval] AS VARCHAR(3))
+ '' of every ''
+ CAST([freq_recurrence_factor] AS VARCHAR(3)) + '' month(s)''
WHEN 32 THEN ''Occurs on ''
+ CASE [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 [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 '' + CAST([freq_recurrence_factor] AS VARCHAR(3))
+ '' month(s)''
END AS [Recurrence]
, CASE [freq_subday_type]
WHEN 1 THEN ''Occurs once at ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([active_start_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
WHEN 4 THEN ''Occurs every ''
+ CAST([freq_subday_interval] AS VARCHAR(3)) + '' Minute(s) between ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([active_start_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
+ '' & ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([active_end_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
WHEN 8 THEN ''Occurs every ''
+ CAST([freq_subday_interval] AS VARCHAR(3)) + '' Hour(s) between ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([active_start_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
+ '' & ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([active_end_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
END [Frequency],

FROM '+ @Server +'.[msdb].[dbo].[sysjobschedules] AS S INNER JOIN
'+ @Server +'.[msdb].[dbo].[sysjobs] AS J ON S.[job_id] = J.[job_id]
WHERE S.[enabled] = 1
ORDER BY J.[Name]'

EXEC (@SQL)

Этот следующий бит кода скажет вам последний запуск заданий, и если это произойдет или нет

SET @SQL = 'SELECT 
[sJOB].[job_id] AS [JobID]
,[sJOB].[name] AS [JobName]
,CASE
WHEN [sJOBH].[run_date] IS NULL OR [sJOBH].[run_time] IS NULL THEN NULL
ELSE CAST(
CAST([sJOBH].[run_date] AS CHAR(8))
+ '' ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([sJOBH].[run_time] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
AS DATETIME)
END AS [LastRunDateTime]
, CASE [sJOBH].[run_status]
WHEN 0 THEN ''Failed''
WHEN 1 THEN ''Succeeded''
WHEN 2 THEN ''Retry''
WHEN 3 THEN ''Canceled''
WHEN 4 THEN ''Running''
END AS [LastRunStatus]
, STUFF(
STUFF(RIGHT(''000000'' + CAST([sJOBH].[run_duration] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
AS [LastRunDuration (HH:MM:SS)]
, [sJOBH].[message] AS [LastRunStatusMessage]
, CASE [sJOBSCH].[NextRunDate]
WHEN 0 THEN NULL
ELSE CAST(
CAST([sJOBSCH].[NextRunDate] AS CHAR(8))
+ '' ''
+ STUFF(
STUFF(RIGHT(''000000'' + CAST([sJOBSCH].[NextRunTime] AS VARCHAR(6)), 6)
, 3, 0, '':'')
, 6, 0, '':'')
AS DATETIME)
END AS [NextRunDateTime]

FROM
'+ @Server +'.[msdb].[dbo].[sysjobs] AS [sJOB]
LEFT JOIN (
SELECT
[job_id]
, MAX([next_run_date]) AS [NextRunDate]
, MAX([next_run_time]) AS [NextRunTime]
FROM '+@Server +'.[msdb].[dbo].[sysjobschedules]
GROUP BY [job_id]
) AS [sJOBSCH]
ON [sJOB].[job_id] = [sJOBSCH].[job_id]
LEFT JOIN (
SELECT
[job_id]
, [run_date]
, [run_time]
, [run_status]
, [run_duration]
, [message]

FROM '+ @Server +'.[msdb].[dbo].[sysjobhistory]
WHERE [step_id] = 0
) AS [sJOBH]
ON [sJOB].[job_id] = [sJOBH].[job_id]
-- AND [sJOBH].[RowNumber] = 1
ORDER BY [JobName]'

--PRINT (@SQL)

EXEC (@SQL)

Замените @Server своим именем сервера или установите для переменной @Server имя сервера, на котором вы хотите запускать скрипты

ответил(а) 2013-09-23T17:32:00+04:00 7 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема