web-dev-qa-db-ja.com

「ジョブのプロパティ->通知」ページにある情報を取得していますか?

SQL Server 2008 R2を使用しており、msdbデータベースからいくつかのプロパティを取得する必要があります。

Job properties -> Notificationsページにある情報を取得するためのクエリが必要です。

この情報はどの表にありますか?

3

詳細は、dbo.sysjobsビューとdbo.sysoperatorsビューで確認できます。いくつかの単純なコード(最初の投稿のコーディングエラーからクリーンアップされました。):

SELECT j.name AS JobName,
   j.notify_level_email, e.name AS EmailOperator,
   j.notify_level_netsend, n.name AS NetSendOperator,  
   j.notify_level_page, p.name AS PagerOperator,
   j.notify_level_eventlog, 
   j.delete_level
FROM dbo.sysjobs j 
  LEFT JOIN dbo.sysoperators e 
     on j.notify_email_operator_id = e.id
  LEFT JOIN dbo.sysoperators n 
     on j.notify_netsend_operator_id = n.id
  LEFT JOIN dbo.sysoperators p 
     on j.notify_page_operator_id = p.id

通知レベルを具体化しなかった:0 =なし、1 =成功、2 =失敗、3 =完了。どのような状況でもジョブが自動的に削除されない場合、delete_levelは0です。

3
RLF

情報はmsdbに格納されているため、最初に[ジョブのプロパティ]ウィンドウを開いたときに情報の一部が取得され、[通知]ページをクリックすると、さらに情報が照会されます。 SSMSはsp_help_ストアドプロシージャでINSERT/EXECを使用してオペレーター情報を取得します。これはかなり扱いにくいものです...残念ながら、この場合はプロファイラーを使用してクエリをトラップします特に役に立ちません。

以下は、ページからすべての情報を一度に返す完成したクエリです。

USE [msdb];
GO

WITH jobStates AS
(
    SELECT 0 AS Level,  'Disabled' AS Description UNION ALL
    SELECT 1,           'On Success' UNION ALL
    SELECT 2,           'On Failure' UNION ALL
    SELECT 3,           'On Completion'
)
SELECT
    j.job_id,
    j.name,
    es.Description AS EmailOnJobState, e.name AS EmailOperatorName, e.email_address AS EmailOperatorEmailAddress,
    ps.Description AS PageOnJobState, p.name AS PageOperatorName, p.pager_address AS PageOperatorPagerAddress,
    nss.Description AS NetSendOnJobState, ns.name AS NetSendOperatorName, ns.netsend_address AS NetSendOperatorNetSendAddress,
    els.Description AS EventLogOnJobState,
    ds.Description AS DeleteJobOnJobState
    FROM [dbo].[sysjobs] j
    INNER JOIN jobStates es ON es.Level = j.notify_level_email
    INNER JOIN jobStates ps ON ps.Level = j.notify_level_page
    INNER JOIN jobStates nss ON nss.Level = j.notify_level_netsend
    INNER JOIN jobStates els ON els.Level = j.notify_level_eventlog
    INNER JOIN jobStates ds ON ds.Level = j.delete_level
    LEFT OUTER JOIN [dbo].[sysoperators] e ON (j.notify_level_email > 0) AND (e.id = j.notify_email_operator_id)
    LEFT OUTER JOIN [dbo].[sysoperators] p ON (j.notify_level_page > 0) AND (p.id = j.notify_page_operator_id)
    LEFT OUTER JOIN [dbo].[sysoperators] ns ON (j.notify_level_netsend > 0) AND (ns.id = j.notify_netsend_operator_id);
4
Jon Seigel

何を探しているのか本当にわかりませんが、sp_help_jobまたはsp_helpjobstepを試しましたか?

USE msdb;
GO

EXEC dbo.sp_help_jobstep
    @job_name = N'JobName_Here',
    @step_id = 1;
GO

http://technet.Microsoft.com/en-us/library/ms178599.aspx

1
SQLAJ