监控SPOOL队列,当队列超过一定阀值预警
为避免SPOOL队列爆满导致系统产生大量DUMP并拒绝服务,开发ABAP程序对SPOOL队列进行监控,当队列超过一定阀值预警.
基本原理:周期性读取NRIV表,获取SPO_NUM号码段的状态,判断是否超过阀值。
注意事项:
1.NRIV中,SPOOL队列的数据一定要登录000 Client看,其他Client看到的数据没有意义。
2.后台作业建议设置为10分钟左右,以免队列已经越过阀值很久才发现,无法补救。
3.次程序的后台作业要登录000 Client设置。
以下为示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
*&---------------------------------------------------------------------* *& Report ZTEST025 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZTEST025. *作用:监控SPOOL队列,当队列超过一定阀值预警. *注意事项:SPOOL队列的NUMBER RANGE要查看000 Client的数据,其他Client的数据不是真实数据. *本作业需运行于000 Client,否则抓不到正确的Number Range状态. TABLES: NRIV, ADR6. DATA: LS_NRIV TYPE NRIV, LV_RATIO TYPE P LENGTH 4 DECIMALS 2. DATA: T_RECIPIENTS TYPE TABLE OF ADR6 WITH HEADER LINE, I_SUBJECT TYPE SO_OBJ_DES, T_MESSAGE_BODY TYPE TABLE OF SOLI WITH HEADER LINE, T_ATTACHMENTS TYPE TABLE OF RMPS_POST_CONTENT WITH HEADER LINE. SELECT-OPTIONS: S_RECV FOR ADR6-SMTP_ADDR NO INTERVALS OBLIGATORY. LOOP AT S_RECV. T_RECIPIENTS-SMTP_ADDR = S_RECV-LOW. APPEND T_RECIPIENTS. ENDLOOP. *SELECT SINGLE * * FROM NRIV * WHERE CLIENT = '000' * AND OBJECT = 'SPO_NUM' * AND NRRANGENR = '01'. CALL FUNCTION 'NUMBER_GET_INFO' EXPORTING NR_RANGE_NR = '01' OBJECT = 'SPO_NUM' IMPORTING INTERVAL = LS_NRIV. LV_RATIO = LS_NRIV-NRLEVEL / LS_NRIV-TONUMBER. *WRITE : / LV_RATIO. CHECK LV_RATIO > '0.7'. I_SUBJECT = 'SAP监控提醒:SPOOL队列已越过阀值!!!'. CLEAR T_MESSAGE_BODY. T_MESSAGE_BODY-LINE = 'SPOOL队列已越过设定的阀值(70%),请人工介入处理,以免系统拒绝服务。'. APPEND T_MESSAGE_BODY. CLEAR T_MESSAGE_BODY. T_MESSAGE_BODY-LINE = 'SPOOL队列使用号码段SPO_NUM,需在000 Client进行维护,其他Client维护无效,维护NR时要注意不要覆盖当前NR。'. APPEND T_MESSAGE_BODY. CLEAR T_MESSAGE_BODY. T_MESSAGE_BODY-LINE = 'SPOOL队列设定的最大号码为:' && LS_NRIV-TONUMBER. APPEND T_MESSAGE_BODY. CLEAR T_MESSAGE_BODY. T_MESSAGE_BODY-LINE = 'SPOOL队列当前已经使用的号码为:' && LS_NRIV-NRLEVEL. APPEND T_MESSAGE_BODY. CLEAR T_MESSAGE_BODY. T_MESSAGE_BODY-LINE = '人工清理SPOOL队列的程序为:RSPO1041'. APPEND T_MESSAGE_BODY. "发送邮件. CALL FUNCTION 'ZGDFM0004' EXPORTING I_SUBJECT = I_SUBJECT IT_MESSAGE_BODY = T_MESSAGE_BODY[] IT_ATTACHMENTS = T_ATTACHMENTS[] TABLES RECIPIENTS = T_RECIPIENTS[]. |
如若转载,请注明出处:https://www.gavindong.com/5148.html