首页 > 学技术 > 技术网文 > IBM AS400应用论坛 > 正文

[原创] [原创]CL编程实现自动定时备份的可行性报告


来源 chinaunix.net 酷勤网整理

注:为了将经验共享给大家现将我的实验成果发布一下,希望对大家有所帮助。同时感谢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

呵呵,还是各位大哥教导的好!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=787204
转载请注明作者名及原文出处



收藏本页到: