点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
亲爱的
我们遇到了一个非常奇怪的问题:
我们使用的是DS 4.2 SP10
使用数据服务计划程序来计划工作
有时候(可能是不同的工作),这些工作开始多次(两次或更多次;有时在几秒钟内,有时在几分钟内),并非每天都会发生,并且在"任务计划程序"中每个计划只有一个任务。
作业有时会失败或成功。 问题是,如果一项工作成功完成并运行了3次,我们得到的行数将增加三倍,这将导致一个巨大的问题。
这是两次连续工作的屏幕截图。
你们中的任何人经历过类似的经历吗?
非常感谢您的帮助,因为这会造成很多痛苦
问候
克里斯
capture.jpg (23.7 kB)
生产服务器是Windows Server 2016上的DS 4.2 SP13。这是上周进行的新安装,目的是从4.2 SP08上的现有生产系统上升级。 新环境使用与旧环境相同的源数据库和目标数据库以及相同的存储库数据库。 除了DS版本的差异外,唯一的差异是旧环境使用Windows Server 2012 R2。 这是一台作业服务器,不属于服务器组。
每次从管理控制台中的计划作业启动作业时,该作业都会运行两次。 这些作业是在上午12:10通过Windows Task Scheduler触发的。
如果我通过管理控制台手动启动该作业,则它将仅运行一次。
如果我通过Windows Task Scheduler(使用管理控制台创建的现有任务)手动启动该作业,则它将仅运行一次。
我使用了"导出执行命令"来创建一个.bat文件,然后通过Windows Task Scheduler安排该.bat的执行。 作业运行两次。
我尝试删除计划并重新创建它。 那没有帮助。 我验证了AL_SCHED_INFO中的条目,并且AL_MACHINE_INFO也看起来不错。
以前的版本(SP08)最多每年一次出现此问题。 新安装的软件每天都有问题。
我放弃了在Data Services配置中寻找解决方案的打算。 我尝试了DSConfig.txt文件中的AW Job Launcher参数,但该参数也不起作用。
"解决方案"是该作业现在检查以查看先前的实例是否已在运行。 我将逻辑封装在一个自定义函数中。 如果函数返回非空值,则该作业的另一个实例已在运行。
变量声明:
$ LV_Run_ID-varchar(20)
$ LV_Job_Name-基于al_history中列的大小的varchar(256)
$ LV_Prior_Run_ID-varchar(20)
可以不使用任何变量来完成此操作,但是在需要调试时可以使用它们。
创建一个数据存储,该数据存储指向作业将用完的本地存储库。 将下面的sql()调用中使用的数据存储名称更改为数据存储的名称。 将文本粘贴到SAP网站中会导致格式错误。 您必须自己调整或从附件中获取文件。 get-job-prior-instance.txt############################################# ##############################功能:Get_Job_Prior_Instance#日期:2020年3月16日#作者:Jim Egan(ProKarma, Inc.)#用途:查找同一作业的正在运行实例的运行ID,该实例是在该实例之前启动的。 ##修改#日期:#作者:#目的:###################################### ######################################获取此作业实例的元数据$ LV_Run_ID = job_run_id(); $ LV_Job_Name = job_name(); #获取与正在运行的作业名称相同的运行ID(S或SR的状态),并且在过去30秒内已启动。 #如果在此实例之前没有其他作业开始,则返回值为NULL。 #状态S适用于正常启动的作业,SR适用于使用"启用恢复"选项启动的作业。 $ LV_Prior_Run_ID = sql('Runtime_Repo','从AL_HISTORY WHERE OBJECT_KEY <[$ LV_Run_ID] AND SERVICE = {$ LV_Job_Name}和STATUS IN(\'S \',\'SR \')和START_TIME>中选择MAX(OBJECT_KEY) =(SYSDATE-(30/60/60/24))');
返回$ LV_Prior_Run_ID;
我在条件转换中调用上述函数。 如果返回为null,则作业将继续使用位于条件TRUE分支内的常规流。 如果返回的结果不为null,则执行条件语句的FALSE分支,并且我在日志中显示一条消息,指出另一个实例已在运行,该作业将结束而不会引发异常。
吉姆,你好
我的版本与您的相似,我们使用的是4.2 SP08,现在的版本是4.2SP12。 这是我们看到计划重复(运行两次)的地方。 根据我的测试,我仍在与SAP讨论潜在的解决方案:如果我创建一个全新的回购协议并将其迁移到那里,则问题还没有发生(也许会在以后出现。。。?) >
避免重复运行的另一种解决方法是在作业开始时将以下代码添加到脚本中,您也可以尝试一下。
*********************************
$ L_Count = sql('REPO_DATASTORE_NAME','从(select DENSE_RANK()OVER(ORDER BY START_TIME desc)中选择count(0)为" rnk",从AL_HISTORY中获取STATUS,其中service = \'JOB_NAME \')其中" rnk" = 2 AND STATUS = \'S \''); 如果($ L_Count <> 0)开始raise_exception('此作业的早期实例仍在执行'); 结束
*******************************
谢谢
文杰
嗨吉姆,
请问您更新的" RWJobLaunch"配置是什么? 下面是这个吗?
[int]
........
RWJobLaunchSemaphoreNumber = 4
谢谢
Wenjie Wu
Wenjie,如果您进入设计器中作业的属性,则可以选择"单实例"选项,该选项仅允许运行一个实例。 这将停止两个实例同时运行,但不会解决AL_RWJoblauncher多次启动作业的问题。
我最近遇到了一个问题,其中由EIM自适应处理服务完成的历史记录清理导致对MS SQL Server上的存储库数据库的锁定,最终导致作业提交请求超时。 释放锁定后,即使提交请求超时,作业实际上也开始运行。 如果在第一次超时后退出作业提交,则在释放数据库锁定后,您现在将看到作业服务器上正在运行两个作业。
尝试关闭历史记录清理,看看您的多次提交问题是否消失了。
Thx,
亚当
一周热门 更多>