验证在 SQL 2000 数据库上运行的作业

验证在 SQL 2000 数据库上运行的作业

我有一个由未知作业执行的存储过程。因此,我试图找出 SQL 2000 中存储数据的哪个位置,以显示哪些作业属于哪个数据库。原因是我正在运行一个作业,但作业名称中没有数据库名称。所有作业都应该类似于“作业名称 - dbName”。

但出于某种原因,我要么 A:无法从企业管理器中看到它,要么 B:存储过程正在由另一个作业执行。虽然当我在源代码管理中搜索该过程名称的所有过程时,我只在那个存储过程中找到它的名称。

我查看了 msdb.sysjobs 表,它提供了 jon 名称、作业 ID 和其他信息,但没有提供执行该作业的数据库名称。我只是在努力弄清楚这一点。

答案1

此查询将为您提供作业中过程的所有实例以及调用过程的步骤正在运行的数据库,但有一点需要注意:它不会告诉您是否有作业正在执行调用过程的 SSIS 包。

SELECT 
    jobs.NAME AS JobName,
    steps.step_id AS StepID,
    steps.step_name AS StepName,
    steps.database_name AS DatabaseForJobStep
FROM msdb..sysjobsteps steps
JOIN msdb..sysjobs jobs ON steps.job_id=jobs.job_id
WHERE steps.command LIKE '%p_mystoredprocname%'
ORDER BY jobs.NAME,Steps.step_id

答案2

数据库信息存储在 sysjobsteps 中,而不是 sysjobs 中。您还需要检查 sysjobsteps 中的命令列以查找如下代码:

执行 mydatabase.dbo.some_procedure

答案3

您可以使用 SQL Profiler 对 DB 进行跟踪,根据存储过程名称进行过滤,然后查看 DB 列。

相关内容