惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
F
Full Disclosure
A
About on SuperTechFans
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
Know Your Adversary
Know Your Adversary
K
Kaspersky official blog
L
LINUX DO - 热门话题
Recorded Future
Recorded Future
C
Cisco Blogs
M
MIT News - Artificial intelligence
T
Tenable Blog
G
GRAHAM CLULEY
月光博客
月光博客
Recent Announcements
Recent Announcements
V
Visual Studio Blog
IT之家
IT之家
T
The Exploit Database - CXSecurity.com
The GitHub Blog
The GitHub Blog
T
Threat Research - Cisco Blogs
D
DataBreaches.Net
P
Privacy International News Feed
P
Proofpoint News Feed
I
Intezer
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - Franky
SecWiki News
SecWiki News
宝玉的分享
宝玉的分享
P
Palo Alto Networks Blog
Last Week in AI
Last Week in AI
小众软件
小众软件
Hacker News - Newest:
Hacker News - Newest: "LLM"
O
OpenAI News
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
The Cloudflare Blog
Spread Privacy
Spread Privacy
酷 壳 – CoolShell
酷 壳 – CoolShell
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
B
Blog RSS Feed

博客园 - mshwu

桥接模式(Bridge Pattern) 单例模式 工厂方法模式 命名空间的规划 Download Manager Intent(二) Intent (一) Fragment (一) 2-1 Managing the Activity Lifecycle java1.5新特性(转) 1-4 Starting Another Activity 1-3 Building a Simple User Interface(创建简单的用户界面) 1-2 Android系统架构基本模式解析 1-1 Building Your First Android Application FTP Send File: Source Code Review(转) 动态操作文件 通用日志管理工具 触发器程序 OVRDBF的用法
通过CLP实现library之间的自动复制 (转)
mshwu · 2008-07-22 · via 博客园 - mshwu

通过CLP实现library之间的自动复制!

因业务需要定期从生产LIB复制数据到目标LIB,考虑执行效率和降低人为出错率,写了CLP工具实现自动复制.

程序思路:

1.因LF关联PF,所以必须先删除LF后才能删除其他objects,通过DSPFD过滤出LF文件,然后循环执行删除.

2.当监控到CPF2123系统提示不存在LF文件,程序直接跳转NEXT处理.

3.当LF删除完毕系统提示CPF0864,程序跳转NEXT处理.

4.删除LF文件后,清除整个LIB.

5.为了提高程序自动维护效率,同时考虑LIB处于使用中情况,将创建临时qtemp/savf,并savlib时使用SAVACT(*LIB)参数.

6.目标library恢复完毕,执行授权autl;

7.所有步骤完成后系统通过SNDDST自动发送邮件通知管理员.

8.程序结束执行清除QTEMP下临时workfile,tempsavf文件.

9.最后将工具写成CMD,便于调用.

**注意:编译前需执行DSPFD产生临时文件QTEMP/WORKFILE后编译才能通过.

CLP: AUTOUPDLIB ,编译在QGPL/AUTOUPDLIB

/*===================================================================*/

/*     PROGRAM NAME    : AUTOUPDLIB                                  */

/*     CREATED BY      : BOT LIU YUAN YAO                            */

/*     CREATED DATE    : 2008/02/21                                 */

/*     DESCRIPTION     : AUTO-UPDATE OVER SELECTED LIBRARIES         */

/*     USAGE           : BEFORE COMPILE [2008/03/06 DSPOBJD->DSPFD] */

/*     DSPFD FILE(&TRGLIB/*ALL) TYPE(*MBR) +                         */

/*           OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORKFILE)                */

/*===================================================================*/

             PGM        PARM(&SRCLIB &TRGLIB)

             DCL        VAR(&SRCLIB) TYPE(*CHAR) LEN(10)

             DCL        VAR(&TRGLIB) TYPE(*CHAR) LEN(10)

             DCLF       FILE(QTEMP/WORKFILE) RCDFMT(QWHFDMBR)

             DCL        VAR(&SRCAUTL) TYPE(*CHAR) LEN(10)

             DCL        VAR(&TRGAUTL) TYPE(*CHAR) LEN(10)

 /** AUTO-DELETE ALL LF OF TARGET LIBRARY [2008/03/06] **/

             DSPFD      FILE(&TRGLIB/*ALL) TYPE(*MBR) +

                          OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORKFILE)

             MONMSG     MSGID(CPF2123) EXEC(GOTO CMDLBL(NEXT))

 LOOP:       RCVF       RCDFMT(QWHFDMBR)

             MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(NEXT))

             IF         COND(&MBFATR *EQ 'LF') THEN(DO)

             DLTF       FILE(&TRGLIB/&MBFILE)

             ENDDO

             GOTO       CMDLBL(LOOP)

 NEXT:

             CLRLIB     LIB(&TRGLIB)

             MONMSG     MSGID(CPF0000)

 /** USE TEMPORARY SAVF TO SAVE AND RESTORE LIBRARY **/

             CRTSAVF    FILE(QTEMP/TMPSAVF) TEXT('Temporary savf')

             SAVLIB     LIB(&SRCLIB) DEV(*SAVF) SAVF(QTEMP/TMPSAVF) +

                          SAVACT(*LIB)

             MONMSG     MSGID(CPF0000)

             RSTLIB     SAVLIB(&SRCLIB) DEV(*SAVF) +

                          SAVF(QTEMP/TMPSAVF) RSTLIB(&TRGLIB)

             MONMSG     MSGID(CPF0000)

 /** AUTO-MAINTAIN AUTHORIZATION LIST [2008/03/05] **/

             CHGVAR     VAR(&SRCAUTL) VALUE('A' *CAT %SST(&SRCLIB 1 +

                          7))

             CHGVAR     VAR(&TRGAUTL) VALUE('A' *CAT %SST(&TRGLIB 1 3))

             CHKOBJ     OBJ(&SRCAUTL) OBJTYPE(*AUTL)

             MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(GRTAUTL))

             RVKOBJAUT OBJ(&TRGLIB/*ALL) OBJTYPE(*ALL) AUTL(&SRCAUTL)

             MONMSG     MSGID(CPF0000)

 GRTAUTL:

             CHKOBJ     OBJ(&TRGAUTL) OBJTYPE(*AUTL)

             MONMSG     MSGID(CPF9801) EXEC(DO)

             CRTAUTL    AUTL(&TRGAUTL)

             ENDDO

             GRTOBJAUT OBJ(&TRGLIB/*ALL) OBJTYPE(*ALL) AUTL(&TRGAUTL)

             MONMSG     MSGID(CPF0000)

             GRTOBJAUT OBJ(&TRGLIB/*ALL) OBJTYPE(*ALL) +

                          USER(*PUBLIC) AUT(*EXCLUDE)

             MONMSG     MSGID(CPF0000)

 /** AUTO-SEND EMAIL TO OPERATOR AFTER FINISHED ALL STEPS **/

             SNDDST     TYPE(*LMSG) +

                          TOINTNET((liuyuanyao@swirebev.com)) +

                          DSTD('Update Data Successfully!') +

                          LONGMSG('Update data from source to +

                          target library successfully,thanks!')

 ENDPGM:     DLTF       FILE(QTEMP/WORKFILE)

             MONMSG     MSGID(CPF2105)

             DLTF       FILE(QTEMP/TMPSAVF)

             MONMSG     MSGID(CPF2105)

             ENDPGM

CMD:UPDLIB

===> CRTCMD CMD(QGPL/UPDLIB) PGM(QGPL/AUTOUPDLIB) SRCFILE(LIUYY/QCMDSRC)

/*===================================================================*/

/* PROGRAM NAME : AUTOUPDLIB                                         */

/* DESCRIPTION : AUTO-UPDATE OVER SELECTED LIBRARIES                 */

/* PROGRAMMER : BOT LIU YUAN YAO                                     */

/* DATE : 2008/02/27                                                 */

/*===================================================================*/

             CMD        PROMPT('Auto-Update Selected Libraries')

             PARM       KWD(SRCLIB) TYPE(*CHAR) LEN(10) +

                          DFT('SRCLIB') REL(*NE ' ') +

                          SPCVAL(('HZTDB01') ('XMTDB01') +

                          ('GDTDB01') ('NJTDB01') ('XATDB01') +

                          ('ZZTDB01') ('HFTDB01') ('LQTDB01')) +

                          MIN(0) MAX(1) PROMPT('Source Library')

             PARM       KWD(TRGLIB) TYPE(*CHAR) LEN(10) +

                          DFT('TRGLIB') REL(*NE ' ') +

                          SPCVAL((HHDXA01) (HHDXA02) (HHDXA03) +

                          (HHDXA05) (HHDXA06) (HHDHF01) (HZUDB01) +

                          (XMPDB01)) MIN(0) MAX(1) PROMPT('Traget +

                          Library')

UPDLIB+F4显示如下:

                     Auto-Update Selected Libraries (UPDLIB)                
                                                                            
 Type choices, press Enter.                                                 
                                                                            
 Source Library . . . . . . . . . > 'srclib'      Character value, HZTDB01...
 Traget Library . . . . . . . . . > 'trglib'      Character value, HHDXA01...

以后可以QBATCH下执行:

 ===> SBMJOB CMD(UPDLIB SRCLIB('srclib') TRGLIB('trglib')) JOB(UPDLIB) JOBQ(QGPL/QBATCH)                                                                       

或QINTER下交互使用.

===> UPDLIB SRCLIB('srclib') TRGLIB('trglib')