2017-07-21 31 views
1

私はアカウントごとに実行されているSSISジョブ統計

ジョブズ(システムがユーザーアカウント対占めてからので、どのように多くの、どのジョブが実行)

場合はSSISジョブ統計と同様にを見つけるためにしようとしていますSSISDBカタログからSSISパッケージを呼び出すと、そのパッケージを呼び出すアカウントを知る必要があります。それはSQL Serverエージェントアカウントまたは他のユーザーアカウントです。

この情報を取得する方法はありますか?

ありがとうございました。

+0

あなたは、SQLエージェントジョブテーブルからクエリを記述(msdbデータベース)またはSSISログテーブル(デフォルトではSSISBデータベース) –

+0

そうすることができます。 MSDB-sysテーブルのみを照会しています。ただし、パッケージがどのアカウントで実行されているかなど、アカウント情報は見つけられません。 –

答えて

2

SSISには、使用できる内部レポートがいくつかあります。 [Integration Services]タブの下で、SSISDBを右クリックしてReports > All Executionsに移動します。これはあなたに現在および最近のすべての処刑を与えるでしょう。特定の実行のためにOverviewをクリックすると、CALLER_INFOと呼ばれるフィールドがあります。このフィールドは、SQL Agentから呼び出されたかどうかを示します。あなたが管理者でない場合、特定の実行がレポートのビューからフィルタリングされる可能性があることに注意してください。

あなたが直接SSISDBデータベースを照会する権限を持っている場合、あなたはあなたの実行だけでなく、現在の操作を実行しているアカウントと呼ばれるアカウント名与える使用することができます以下

select 
    execution_id 
    , folder_name 
    , project_name 
    , package_name 
    , environment_name 
    , executed_as_name 
    , start_time 
    , end_time 
    , CASE status WHEN 1 THEN 'Created' 
     WHEN 2 THEN 'Running' 
     WHEN 3 THEN 'Cancelled' 
     WHEN 4 THEN 'Failed' 
     WHEN 5 THEN 'Pending' 
     WHEN 6 THEN 'Ended Unexpectedly' 
     WHEN 7 THEN 'Succeeded' 
     WHEN 8 THEN 'Stopping' 
     ELSE 'Completed' END AS Status 
    , caller_name 
    , process_id 
    , server_name 
from internal.execution_info 
--Optionally filter just running jobs 
WHERE status = 2 

をあなたが管理者でないのであれば、結果はあなたが表示する権限を持っているものを実行にフィルタリングされます

WHERE  opers.[operation_id] in (SELECT id FROM [internal].[current_user_readable_operations]) 
      OR (IS_MEMBER('ssis_admin') = 1) 
      OR (IS_SRVROLEMEMBER('sysadmin') = 1) 

:これは、次のフィルタを持っている図です。また、この制限を回避するために内部テーブルを直接照会することもできます。

EDIT SQLエージェントの場合 、あなたがこのことから適応された以下のようなクエリを、使用することができます:https://www.mssqltips.com/sqlservertip/2561/querying-sql-server-agent-job-information/

ステップは、いずれかのデータベース・ユーザー名、プロキシまたは所有者の下で実行されますジョブの構成方法によって異なります。

SELECT 
    [sJOB].[job_id] AS [JobID] 
    , [sJOB].[name] AS [JobName] 
    , [sDBP].[name] AS [JobOwner] 
    , [sCAT].[name] AS [JobCategory] 
    , [sJOB].[description] AS [JobDescription] 
    , CASE [sJOB].[enabled] 
     WHEN 1 THEN 'Yes' 
     WHEN 0 THEN 'No' 
     END AS [IsEnabled] 
    , [sJOB].[date_created] AS [JobCreatedOn] 
    , [sJOB].[date_modified] AS [JobLastModifiedOn] 
    , [sSVR].[name] AS [OriginatingServerName] 
    , [sJSTP].[step_id] AS [JobStartStepNo] 
    , [sJSTP].[step_name] AS [JobStartStepName] 
    , CASE 
     WHEN [sSCH].[schedule_uid] IS NULL THEN 'No' 
     ELSE 'Yes' 
     END AS [IsScheduled] 
    , [sSCH].[schedule_uid] AS [JobScheduleID] 
    , [sSCH].[name] AS [JobScheduleName] 
    , CASE [sJOB].[delete_level] 
     WHEN 0 THEN 'Never' 
     WHEN 1 THEN 'On Success' 
     WHEN 2 THEN 'On Failure' 
     WHEN 3 THEN 'On Completion' 
     END AS [JobDeletionCriterion] 
     , proxyName.name 
     , sJSTP.database_user_name 
FROM 
    [msdb].[dbo].[sysjobs] AS [sJOB] 
    LEFT JOIN [msdb].[sys].[servers] AS [sSVR] 
     ON [sJOB].[originating_server_id] = [sSVR].[server_id] 
    LEFT JOIN [msdb].[dbo].[syscategories] AS [sCAT] 
     ON [sJOB].[category_id] = [sCAT].[category_id] 
    LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sJSTP] 
     ON [sJOB].[job_id] = [sJSTP].[job_id] 
     AND [sJOB].[start_step_id] = [sJSTP].[step_id] 
    LEFT JOIN msdb.dbo.sysproxies proxy 
     ON sJSTP.proxy_id = proxy.proxy_id 
    LEFT JOIN [msdb].[sys].[database_principals] proxyName 
     ON proxyName.sid = proxy.user_sid 
    LEFT JOIN [msdb].[sys].[database_principals] AS [sDBP] 
     ON [sJOB].[owner_sid] = [sDBP].[sid] 
    LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH] 
     ON [sJOB].[job_id] = [sJOBSCH].[job_id] 
    LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH] 
     ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id] 

ORDER BY [JobName] 
+0

これは素晴らしいですね。ただし、これはSSIDBカタログからパッケージを取り出すだけです。私の仕事にSPやその他のコマンドが少ない場合はどうすればいいですか?私はそれらをどのように組み合わせますか?私はジョブ毎に情報を求めた –

+1

@RameshwarPawaleこれはまったく尋ねられたものではありませんが、とにかく回答を提供しました。 –

+0

ありがとうマーク。 :) –