注:为了将经验共享给大家现将我的实验成果发布一下,希望对大家有所帮助。同时感谢XUGUOPENG大哥、轻舟大哥等众位前辈的帮助与无私的奉献精神。
CL编程实现自动定时备份的可行性报告
对系统中的库文件定期备份可以保证其运行的稳定性与安全性,关于此备份可以用手动人工备份,当然也可以实现自动备份。
要求:对指定库(EPODCMS)实现自动定时(01:00:00)自动备份成*SAVF,每次备份的名字按序排列(CMS+备份日期)
分析:定时备份可以通过Job Schedule实现,备份的实现需要用到命令CRTSAVF和SAVLIB两个命令,名字按序排列需要使用RTVJOBA
实现:因为此操作需要使用CL编程所以需要系统中装用WDS组件。假定需要备份的库以及存储备份的库已经存在,此例中备份库为EPODCMS,存储库为EPODBAK,用户库为JANCE,若所需库不存在可用CRTLIB进行创建。(建议程序的编写及调试均在用户库中进行。)
1.创建源物理文件(Create Source Physical File ),在命令行上输入CRTSRCPF并按F4,参数FILE处填写自己希望使用的名字,库为用户库,其他默认即可。
2.启动Source Entry Utility,在命令行上输入STRSEU并按下F4,在参数Source file及Library中填写刚创建的源物理文件的名称及所在库,在参数Source member处填写成员名称,在Source type处填写类型为CLP。其他参数默认即可。
回车确认后进入Edit界面编写程序。
PGM
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&SAVFNAME) TYPE(*CHAR) LEN(10)
RTVJOBD DATE(&DATE)
CHGVAR VAR(&SAVFNAME) VALUE('CMS'||&DATE)
CRTSAVF FILE(EPODBAK/&SAVFNAME)
SAVLIB LIB(EPODCMS) DEV(*SAVF) SAVF(EPODBAK/&SAVFNAME)
END:ENDPGM
代码分析:0002.00定义变量&date用于存储返回的系统日期值
0003.00定义变量&savfname用于存储文件名
0004.00返回作业属性值,此处返回的值为DATE并将其存放在变量&date中
0005.00更改变量&savfname为cms+&date形式
0006.00创建SAVF文件并以当前cms+&date为文件名存放在库EPODBAK中
0007.00将库EPODCMS保存为*SAVF存放在刚创建的SAVF中
注意:此处变量类型应为*CHAR而不能为字符型;由于SAVF文件不能以数字开头命名,所以需要改变变量&savfname在其之前加入字符。
程序编写好之后按F3,退出到Exit界面,在Change/create member参数项后选Y,其他参数默认,回车。
3.创建CL程序,在命令行上输入CRTCLPGM命令并按F4,在各参数中填写相应的信息,回车确认。
4.设置自动执行,在命令行上使用call命令调用生成的PGM程序,在确保其能成功运行并成功实现要求后将其加入到Job Schedule。
在命令行上输入ADDJOBSCDE并按F4,在Command to run 处填写需要执行的命令CALL PGM(jance/epodpgm),并设置频率以及执行操作的日期时间,完成后回车确认。
至此已可以达到自动定时备份库文件的要求。
本程序及方法已V5R2M0上成功通过实验。
[ 本帖最后由 jance 于 2006-7-7 09:37 编辑 ]
carolwj 回复于:2006-07-07 10:23:58
恭喜你终于成功了,从问题提出到现在想必花了不少心思,感谢分享:)
xuguopeng 回复于:2006-07-07 10:59:57
在CRTSAVF的时候最好能有个错误保护,一旦这个SAVF已经存在,程序就会异常终止
aliceliu 回复于:2006-07-07 11:12:58
CRTSAVF FILE(EPODBAK/&SAVFNAME)
这一行也最好有一个检查,即如果发现有重名的那么就清掉。
还有
小妹有个建议:如果备份成功了发个邮箱出来,这样更好一些。不用看AS400就知道备份的情况了
jance 回复于:2006-07-07 11:23:53
引用:原帖由 xuguopeng 于 2006-7-7 10:59 发表
在CRTSAVF的时候最好能有个错误保护,一旦这个SAVF已经存在,程序就会异常终止
在参考你给我的那段代码的时候我也想到了MONMSG,可是我不知道怎么样才能获得MSGID,所以就没做监视。
有什么方法可以获得一个MSGID么?
fairyboy 回复于:2006-07-07 13:53:40
有什么方法可以获得一个MSGID么---出了凑看具体的MSGID,~~~~~~~~~~~~
xuguopeng 回复于:2006-07-07 14:17:09
看CMD的F1帮助就可以得到MSGID
nhxingliang 回复于:2006-07-07 14:54:08
Error messages for CRTSAVF
*ESCAPE Messages
CPF7302 File &1 not created in library &2.
qingzhou 回复于:2006-07-10 12:11:41
恩,恭喜出师了,,,呵呵。。。
加精鼓励。 :em02:
jance 回复于:2006-07-10 14:43:58
呵呵,还是各位大哥教导的好!
|