You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AX2012 R3中定位批处理作业关联的SQL查询

排查AX2012 R3批处理作业关联查询与数据表(无AOS/AOT权限)

一、获取目标批处理的核心ID

先从BATCHJOB表定位目标作业的RecId:

SELECT RecId, JobDescription, CreatedDateTime, Status
FROM BATCHJOB
WHERE JobDescription LIKE '%你的批处理作业名称%' -- 替换为实际作业名称

二、通过数据库表关联查询作业涉及的对象

AX的批处理作业由多个具体任务组成,可通过以下表链追踪关联的类或查询:

1. 关联批处理任务与AOT对象

利用BATCHTASK和SYSOBJECTTABLE关联,获取任务对应的类或查询名称:

SELECT 
    bt.RecId AS BatchTaskRecId,
    bt.ClassNum,
    bt.QueryId,
    so.Name AS ObjectName,
    so.Type AS ObjectType -- 0=类,2=查询
FROM BATCHTASK bt
JOIN SYSOBJECTTABLE so ON (bt.ClassNum = so.Id AND so.Type = 0) OR (bt.QueryId = so.Id AND so.Type = 2)
WHERE bt.BatchJobId = '替换为目标BatchJob的RecId'

2. 提取查询对象的表依赖(若为查询驱动批处理)

如果ObjectType为2(查询),从SYSOBJECTDATA获取查询的XML定义,解析其中的表ID:

SELECT sod.Data
FROM SYSOBJECTDATA sod
JOIN SYSOBJECTTABLE so ON sod.Id = so.Id AND so.Type = 2
WHERE so.Id = '替换为查询的QueryId'

XML中的<TableId>节点对应表ID,可通过SQLSYSTEMTABLES转换为表名:

SELECT Name
FROM SQLSYSTEMTABLES
WHERE TableId = 'XML中提取的TableId值'

三、SQL Profiler聚焦目标批处理

通过以下过滤条件减少冗余信息,仅捕获目标作业的SQL:

  • 按ApplicationName过滤:选择对应AOS实例的名称(通常格式为Microsoft Dynamics AX [AOS实例名])
  • 按NTUserName过滤:批处理作业一般以指定服务账户运行,筛选该账户
  • 关键文本过滤:添加TextData过滤器,包含目标批处理的RecId(AX执行批处理时会在会话信息中携带BatchJobId: [RecId]标识)

另外,可查询执行历史表了解作业耗时:

SELECT 
    bh.StartDateTime,
    bh.EndDateTime,
    DATEDIFF(SECOND, bh.StartDateTime, bh.EndDateTime) AS DurationSec,
    bth.TaskDescription
FROM BATCHHISTORY bh
JOIN BATCHTASKHISTORY bth ON bh.BatchJobId = bth.BatchJobId
WHERE bh.BatchJobId = '替换为目标BatchJob的RecId'

内容的提问来源于stack exchange,提问作者pnauta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:52:29