首页 > 其他 > 详细

后台运行

时间:2015-04-28 17:39:59      阅读:200      评论:0      收藏:0      [点我收藏+]

在一些日常业务中,总有一些长时间处理的任务,系统运行这些任务需要一晚甚至一个周末。

这就需要后台运行单元(background work process)来完成,而且其是不会发生超时(time out) 错误的。

进程(job)有下面几种类型:

时间驱动(Time-driven? job):按照用户预先设定的有时间启动进程。

?事件驱动(Event-Driven job):在一个事件或另一个进程后,该进程启动。

周期型(periodic? job :在每时或每天,定时执行的进程。

删除型(deleting? job): 为删除系统中盈余的数据的进程,可能会执行较长时间,需要在??

???????????????????????????????????????????????? 后台进行。

进程的属性:

Job name:进程的名最长为32字符。

Job count:为了去该进程在系统中的唯一性。比如周期性进程的名都是一样的,

???????????????????? Job name+Job count就能确定其的唯一性。

Step:在该进程内中定义的程序数量。

Start data:启动的时间点有:立即(immediatlly),指定时间(data/time),

????????????????????? 时间(event)…等等。

Job owner:产生该进程的用户。

Job class:该进程在系统中的执行等级。

Client:决定该进程在哪个Client中执行,有些系统进程必须在Client000中执行。

Target sever:决定该进程在那个服务器中执行,这有助于合理的分配系统资源

进程状态:

Planned:进程已经被定义,但是还没有开始。

Release:进程已经开始,但是进程中定义的程序还没有被执行。

Ready: 进程已经开始,所有程序开始的条件(启动时间)也已满足,等候系统分配运行资源

????????????? (运行所需的后台进程处理单元<BTC-WP>)。

Active:?? 进程开始,而且定义的每一个程序(STEP)都被按序执行。

Finished 进程顺利完成。

Cancelled:因为错误,进程没有正常完成。

各个进程的关系:

Planned???<>? Release??> Ready -> Active -->? finished or Cancelled

?执行后台进程的方法:

???事务执行命令transaction code):

?????????? SM36SM37 SA38

? ABAP 程序:

?????????? SAP系统程序或客户自定义的程序。

外部程序或工具:

???????? 外部工具(第三方)通过BAPI-XBP接口,从外部定义执行后台进程。

后台进程相关的系统表:

TBTCO:? ?存放后台进程所有的信息和状态。

TBTCP:存放后台进程中定义程序的信息。

TBTCS:??? 时间驱动进程相关的信息。

BTCEVTJOB:事件驱动进程相关的信息。

后台进程的日志(joblog):

日志存放在文件系统(其是TemSe子系统)中,列如:/usr/sap/<sid>/sys/global/001joblg…

?? ?

一般的问题处理:

问题1? 后台进程没有启动。

原因1:系统没有足够的资源。可以用T-cdSm51Rz04SM66Sm37确认。

?原因2:进程调度(Scheduler)没有运行。T-cd:Sm61确认。

原因3:无法生产日志,用Sm21确认系统日志,和ST11确认developer trace

?????????????????? 可能是有TemSe不整合或有OS文件的访问问题。

原因4TCTCOTCTCP…等一系列表之间的不整合;用SM65->Goto->Additional test->

??????????????? 选择:Perform TemSe check

???????????????????????????? Consistency check DB Table

??????????????????????????????? Remove inconsistencies

? ??????????????->执行

问题2:后台进程在执行的过程中,发生互锁。

原因1:确认应用程序的逻辑,一般情况下这个问题都是有应用程序本身导致的。

原因2:数据库的原因,但是这样的情况较少。

原因3:两个周期进程,间隔时间太短,以至于第一个还没有执行完,第二个已开始执行。

建议·: 根据note-16083中的说明,设定标准进程,以减少系统负担和数据盈余。

? ?

From <http://www.cnblogs.com/t-bug/archive/2012/05/07/2487081.html>

? ?

参考程序

2014年8月14日

13:42

? ?

FORM?create_job?.

? ?

??CONCATENATE?sy-repid?‘DIS‘?sy-datum?sy-uzeit?INTO?memres.

? ?

??DATA:

????lv_job_name??TYPE?tbtcjob-jobname,

????lv_job_count?TYPE?tbtcjob-jobcount.

? ?

*?启动Background?Job

??CONCATENATE?sy-repid?‘_‘?sy-datum?sy-uzeit?INTO?lv_job_name.

??CALL?FUNCTION?‘JOB_OPEN‘

????EXPORTING

??????jobname??????????=?lv_job_name

????IMPORTING

??????jobcount?????????=?lv_job_count

????EXCEPTIONS

??????cant_create_job??=?1

??????invalid_job_data?=?2

??????jobname_missing??=?3

??????OTHERS???????????=?4.

??IF?sy-subrc?<>?0.

????MESSAGE?‘后台运行出错‘?TYPE?‘S‘.

??ENDIF.

? ?

*?提交后台的报表

??SUBMIT?zppr022

??????WITH?s_matnr?IN?s_matnr

??????WITH?p_werks?=?p_werks

??????WITH?s_dispo?IN?s_dispo

??????WITH?s_aufnr?IN?s_aufnr

??????WITH?p_date?=?p_date

??????WITH?sh_only?=?sh_only

??????WITH?p_bgjob?=?p_bgjob

??????WITH?memres?=?memres

??????USER????sy-uname

??????VIA?JOB?lv_job_name

??????NUMBER??lv_job_count

??????AND?RETURN.

??IF?sy-subrc?<>?0.

????MESSAGE?‘后台运行错误‘?TYPE?‘S‘.

????RETURN.

??ELSE.

????CALL?FUNCTION?‘JOB_CLOSE‘

??????EXPORTING

????????jobcount?????????????=?lv_job_count

????????jobname??????????????=?lv_job_name

????????strtimmed????????????=?‘X‘

??????EXCEPTIONS

????????cant_start_immediate?=?1

????????invalid_startdate????=?2

????????jobname_missing??????=?3

????????job_close_failed?????=?4

????????job_nosteps??????????=?5

????????job_notex????????????=?6

????????lock_failed??????????=?7

????????invalid_target???????=?8

????????OTHERS???????????????=?9.

????IF?sy-subrc?<>?0.

??????MESSAGE?‘后台运行出错‘?TYPE?‘S‘.

??????RETURN.

????ENDIF.

??ENDIF.

? ?

*-????检测JOB运行状态

??DATA:?status_according_to_db?TYPE?tbtcjob-status,

????????actual_status?TYPE?tbtcjob-status.

??DATA:?ld_exit?TYPE?flag.

? ?

??DO?100?TIMES.

????CALL?FUNCTION?‘BP_JOB_CHECKSTATE‘

??????EXPORTING

????????dialog?????????????????????=?‘N‘

????????jobname????????????????????=?lv_job_name

????????jobcount???????????????????=?lv_job_count

*????????START_ASAP?????????????????=?‘X‘

??????IMPORTING

????????status_according_to_db?????=?status_according_to_db

????????actual_status??????????????=?actual_status

??????EXCEPTIONS

????????job_does_not_exist?????????=?1

????????no_check_privilege_given???=?2

????????ready_switch_too_dangerous?=?3

????????OTHERS?????????????????????=?99.

????IF?‘AF‘?CS?actual_status?AND?actual_status?<>?‘‘.

??????ld_exit?=?‘X‘.

??????EXIT.???"--->>>?EXIT

????ELSE.

??????WAIT?UP?TO?10?SECONDS.

????ENDIF.

??ENDDO.

? ?

??IF?ld_exit?=?‘X‘.

????IMPORT?r?=?gt_dis[]?FROM?DATABASE?indx(hk)?ID?memres.

????DELETE?FROM?DATABASE?indx(hk)?ID?memres.

??ENDIF.

? ?

ENDFORM.????????????????????"?CREATE_JOB

? ?

执行结果

2014年12月24日

10:13

技术分享

? ?

技术分享

除了sm36定义后台任务

也可以在程序界面添加到后台任务

还可以通过在程序中通过代码创建JOB

(如果要等待JOB执行完成 : 监控程序

万一JOB超时

调用者会不会超时

SAP的超时的定义是怎样的

? ?

ALV的SET_FUNCTION_CODE

能否让SAP认为当前的这个session

处于活动?

? ?

)

? ?

关于后台任务的执行结果:

  1. 放在cluster table 中 例如 indx
  2. 放在自定义透明表中
  3. 放在文件中

? ?

跟随事件触发

2014年12月24日

13:18

SM62中定义事件

Sm36定义JOB的时候 选择after event

其他一些触发的方式:

1.在程序中 菜单中选择后台执行

2.SA38

? ?

另外可以通过在普通的report中

触发预定义的事件

达到触发后台任务的目的

? ?

BP_EVENT_RAISE

? ?

默认的执行结果

2015年1月28日

8:54

对于ALV输出

write的结果

? ?

后台执行在spool list中可以查看到

? ?

显示list的内容时

可能因为打印任务中的格式

导致超过255 col的数据无法输出

? ?

解决方案

技术分享

? ?

? ?

另外,

note的解释通过 自定义格式之类的来解决

? ?

后台运行

原文:http://www.cnblogs.com/rootbin/p/4463246.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!