私はアカウントごとに実行されているSSISジョブ統計
ジョブズ(システムがユーザーアカウント対占めてからので、どのように多くの、どのジョブが実行)
場合はSSISジョブ統計と同様にを見つけるためにしようとしていますSSISDBカタログからSSISパッケージを呼び出すと、そのパッケージを呼び出すアカウントを知る必要があります。それはSQL Serverエージェントアカウントまたは他のユーザーアカウントです。
この情報を取得する方法はありますか?
ありがとうございました。
私はアカウントごとに実行されているSSISジョブ統計
ジョブズ(システムがユーザーアカウント対占めてからので、どのように多くの、どのジョブが実行)
場合はSSISジョブ統計と同様にを見つけるためにしようとしていますSSISDBカタログからSSISパッケージを呼び出すと、そのパッケージを呼び出すアカウントを知る必要があります。それはSQL Serverエージェントアカウントまたは他のユーザーアカウントです。
この情報を取得する方法はありますか?
ありがとうございました。
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]
これは素晴らしいですね。ただし、これはSSIDBカタログからパッケージを取り出すだけです。私の仕事にSPやその他のコマンドが少ない場合はどうすればいいですか?私はそれらをどのように組み合わせますか?私はジョブ毎に情報を求めた –
@RameshwarPawaleこれはまったく尋ねられたものではありませんが、とにかく回答を提供しました。 –
ありがとうマーク。 :) –
あなたは、SQLエージェントジョブテーブルからクエリを記述(msdbデータベース)またはSSISログテーブル(デフォルトではSSISBデータベース) –
そうすることができます。 MSDB-sysテーブルのみを照会しています。ただし、パッケージがどのアカウントで実行されているかなど、アカウント情報は見つけられません。 –