免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4120 | 回复: 11
打印 上一主题 下一主题

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-21 21:25 |只看该作者 |倒序浏览
有時會遇到OBJTYPE:*CTLD狀態從ACTIVE轉變成非ACTIVE, 且設定SYSVALCMNRCYLMT亦無法讓狀態自動恢復成ACTIVE. 以下的CLP供大家參考:

1. 首先建立一Physical File,

  1.      CREATE TABLE your_lib_name/CTLDL
  2.        (CTLD CHAR (10 ) NOT NULL, PRIMARY KEY(CTLD))
复制代码


 隨後將要monitor的Controller(s) Name置入此PF中,

  1.      INSERT INTO your_lib_name/CTLDL VALUES('your_ctld')
复制代码


2. 編輯CL source,

  1.      100              PGM
  2.      200
  3.      300              DCL        VAR(&STSCDE) TYPE(*DEC) LEN(5 0)
  4.      400              DCLF       FILE(*LIBL/CTLDL)
  5.      500
  6.      600              MONMSG     MSGID(CPF0000)
  7.      700
  8.      800  NEXT:       RCVF
  9.      900
  10.     1000       /* IF EOF IS DETECTED */
  11.     1100
  12.     1200              MONMSG     MSGID(CPF0864) EXEC(DO)
  13.     1300              DLYJOB     DLY(3600)
  14.     1400              TFRCTL     PGM(*LIBL/CHKCTLD)
  15.     1500              ENDDO
  16.     1600
  17.     1700              RTVCFGSTS  CFGD(&CTLD) CFGTYPE(*CTL) STSCDE(&STSCDE)
  18.     1800
  19.     1900       /* IF OBJ IS NOT FOUND */
  20.     2000
  21.     2100              MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(NEXT))
  22.     2200
  23.     2300       /* CHECK CTLD STATUS IS 'VARY ON PENDING' */
  24.     2400
  25.     2500              IF         COND(&STSCDE = 20) THEN(DO)
  26.     2600              VRYCFG     CFGOBJ(&CTLD) CFGTYPE(*CTL) STATUS(*OFF)
  27.     2700              DLYJOB     DLY(20)
  28.     2800              VRYCFG     CFGOBJ(&CTLD) CFGTYPE(*CTL) STATUS(*ON)
  29.     2900              GOTO       CMDLBL(NEXT)
  30.     3000              ENDDO
  31.     3100
  32.     3200       /* CHECK CTLD STATUS IS 'VARY OFF' */
  33.     3300
  34.     3400              ELSE       CMD(IF COND(&STSCDE = 0) THEN(DO))
  35.     3500              VRYCFG     CFGOBJ(&CTLD) CFGTYPE(*CTL) STATUS(*ON)
  36.     3600              GOTO       CMDLBL(NEXT)
  37.     3700              ENDDO
  38.     3800
  39.     3900        /* OTHER STATUS ARE IGNORED */
  40.     4000
  41.     4100              ELSE       CMD(GOTO CMDLBL(NEXT))
  42.     4200
  43.     4300              ENDPGM
复制代码

3. 編譯 CL source,

  1.      CRTCLPGM PGM(your_lib_name/CHKCTLD) SRCFILE(your_lib_name/QCLSRC)
复制代码


4. 欲監控上述檔案中的 Controller(s) 時, 請執行 CL command:

  1.     SBMJOB CMD(CALL PGM(CHKCTLD)) JOB(CHKCTLSTS)
复制代码


5. 欲確認批次是否成功請執行 CL command:

  1.     WRKACTJOB SBS(QBATCH) -- 畫面類似如下

  2. Opt  Subsystem/Job  User            Type  CPU %  Function        Status
  3.         QBATCH             QSYS           SBS      .0                              DEQW
  4.              CHKCTLSTS   LAURENCE   BCH     .0       DLY-360          DLYW
复制代码


6. 欲結束該程式只要如上述畫面, 在其前面的Opt欄位輸入'4'並按'F4', 於參數'How to end'處填入'*IMMED', 按執行鍵即可!!


PS: 請教一下, 有誰知道如要讓DLYJOB的DLY參數用variable代替要如何做呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-22 08:57 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?


  1. PGM        PARM(&V@dlyt)                  
  2. DCL        VAR(&V@dlyt) TYPE(*DEC) LEN(8 0)
  3. DLYJOB     DLY(&V@dlyt)                    
  4. ENDPGM                                    
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-10-22 09:55 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

感谢楼主提供了解决*CTLD设备inactive时的及时检测并激活的一种办法~~~

原帖由 "hanyu" 发表:

PGM         PARM(&V@dlyt)
                  
DCL         VAR(&V@dlyt) TYPE(*DEC) LEN(8 0)
DLYJOB    DLY(&V@dlyt)   
                 
ENDPGM                              

对此我有3个疑问要请教hanyu:

1。PARM(&V@dlyt)定义变量时为什么还要加@呢,不可以直接使用PARM(&dlyt)吗?

2。“DCL    VAR(&V@dlyt) TYPE(*DEC) LEN(8 0) ”定义变量(&V@dlyt)的类型为数值型—整数类型,如果采用“DCL    VAR(&V@dlyt) TYPE(*CHAR)  LEN(10) ”定义为字符型系统会不会出错?

3。不需要用“CHGVAR &V@dlyt   '3600' ”或者“DCL         VAR(&V@dlyt)  TYPE(*DEC)  LEN(8 0)  VALUE('3600')”对变量进行赋初值吗?

论坛徽章:
0
4 [报告]
发表于 2004-10-22 10:36 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

总共4行, 自己测试啦!

论坛徽章:
0
5 [报告]
发表于 2004-10-22 11:17 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

原帖由 "qingzhou" 发表:

对此我有3个疑问要请教hanyu:

1。PARM(&V@dlyt)定义变量时为什么还要加@呢,不可以直接使用PARM(&dlyt)吗?

2。“DCL    VAR(&V@dlyt) TYPE(*DEC) LEN(8 0) ”定义变量(&V@dlyt)的类型为数值型—整数类型,?.........


1、定义变量当然是根据个人的习惯了

2、DLYJOB的参数就是数字型的 你给字符型的肯定不行

3、只要把DLY的值做为参数传进来就可以了,可以在SBMJOB的时候给个数值就可以了

论坛徽章:
0
6 [报告]
发表于 2004-10-22 11:57 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

多谢~~~
“2、DLYJOB的参数就是数字型的 你给字符型的肯定不行 ”,我觉得还是要自己到本地环境测试效果会更好些。

楼主提供的是解决*CTLD设备inactive时的及时检测并激活的一种办法,如果内部LAN存在网络故障,这个PGM作为工具提交到BATCH JOB后还仍然起作用么,有可能出现别的新问题没?

如果成熟的话,我觉得可以提交到本地环境下运行,以减少AS/400网卡被自动关闭的情况的发生次数,增强系统的稳定性。

测试中。。。

论坛徽章:
0
7 [报告]
发表于 2004-10-22 12:38 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

如果是要監控LIND的話, 您可自行修改程式碼. 舉Lan Card來說, 可透過RTVCFGSTS去辨別狀態再將其重新activate. 如有bind TCP/IP, 可再加入STRTCP及STRHOSTSVR SERVER(*ALL). 由於Batch Jobs一般皆submit至SBSDBATCH中執行, 所以當Lan Card因線路瞬斷造成LIND status異常, 亦不會影響該CLP程式的運作.

另外, 我嘗試要將DLYJOB的DLY參數以variable代替, 好讓管理者自行決定每一次repeat要delay多久...但都不成功!!

根據online help的說明, DLY的數值最多可輸入數字999999, 所以我declare variable如下:

  1.     PGM        PARM(&SEC)                  
  2.                                        
  3.     DCL        VAR(&SEC) TYPE(*DEC) LEN(6 0)
复制代码


當程式執行時, log會有如下錯誤:

  1.     DLYJOB /* Any parameters not reproduced because of severity of errors. */

  2.     CPD0098 - Decimal value for parameter DLY is not valid.

  3.     CPF0001 - Error found on DLYJOB command.
复制代码


至於CPD0098內容如下:

  1. Message ID . . . . . . :   CPD0098       Severity . . . . . . . :   30        
  2. Message type . . . . . :   Diagnostic                                         
  3. Date sent  . . . . . . :   10/22/04      Time sent  . . . . . . :   12:09:42  
  4.                                                                               
  5. Message . . . . :   Decimal value for parameter DLY is not valid.            
  6. Cause . . . . . :   A decimal value can only contain the digits 0-9 and have a
  7.   plus or minus sign.                                                         
  8. Recovery  . . . :   Enter a value that is allowed, or enter one of the special
  9.   values defined for the parameter. More information on parameters and special
  10.   values can be found in the CL Reference manual.                             
复制代码


甚至將長度如hanyu所說的, 加長為LEN(8 0), 但是情況依舊! 且因此錯誤, 導致系統CPU資源耗損嚴重.

請教: 有解決方法嗎? 還是DLYJOB無法使用variable在CLP中?!

PS: 我試過...將該variable宣告為*CHAR是不行的, log中有說明DLY的參數必須為numeric!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-10-22 14:06 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

CPD0098 应该是把一个字符传给数字型参数了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-10-22 14:22 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

PGM        PARM(&V@dlyt)                    
DCL        VAR(&V@dlyt) TYPE(*DEC) LEN(8 0)
DLYJOB     DLY(&V@dlyt)                    
ENDPGM               

注意参数是数字型的,如果在命令行调用时,要键入16进制,
CALL PGM(dlypgm) PARM(X'F00000100F') 表示停100 秒。

论坛徽章:
0
10 [报告]
发表于 2004-10-22 15:54 |只看该作者

FYI: 如何確保OBJTYPE:*CTLD的狀態為ACTIVE?

原來是我CALL程式的問題!! 謝謝Mr. hanyu~

CLP程式我修改如下行數為...

  1.      100              PGM        PARM(&SEC)

  2.      350              DCL        VAR(&SEC) TYPE(*DEC) LEN(6 0)

  3.     1400              TFRCTL     PGM(*LIBL/CHKCTLD) PARM(&SEC)
复制代码


執行程式如hanyu所述(以6分鐘為例):

  1.     SBMJOB CMD(CALL PGM(CHKCTLD) PARM(X'F000360F')) JOB(CHKCTLSTS)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP