在AS/400上怎样从Journal恢复数据[DSPJRN]
时间:2017-08-24 ┊ 阅读:9,274 次 ┊ 标签: 经验 , 系统 , 命令
首先说一下什么是journal,字面翻译过来就是日志,其实很简单,就是日志记录。在as/400上所有的对文件的操作都可以通过journal记录下来,以防任何不测用以数据回滚、调查等需要。
其实在实际项目中,真正遇到需要回滚数据的时候真的是非常之少,在400上工作这么多年,基本没发生过数据回滚的需要,不过说起导journal来调查历史问题还是偶尔会发生的。
通常导journal时,把journal receiver restore 到系统里,用DSPJRN把对应文件的记录导出到文件里,这时因为数据类型的不同,JOESD里面就是当时的数据,我们如果直接看这些数据会发现很多乱码,这就是因为数据类型不同导致的,这时我们需要把数据恢复到对方文件的记录格式,才能正常查看。
journal导出的数据的格式,前面一堆字段基本是记录,在什么时间、被哪个程序、哪个user、怎么更改等等,这些东西很重要,可以知道当时发生了什么。最后一个字段JOESD,大概是这个名字,这里因为手上没有server,改日再补上细节。里面保存的是当时更改前或后的所有数据,记着是所有的数据。
DSPJRN 把数据导出到一个file里面,这里就先为TAB_JRN吧
DSPJRN JRN(QTEMP/JRN) FILE(QTEMP/FILE MBR) RCVRNG(QTEMP/JRNRCV01 QTEMP/JRNRCV10) ENTTYP(*RCD)
OUTPUT(*OUTFILE) OUTFILFMT(*TYPE3) OUTFILE(QTEMP/TAB_JRN) ENTDTALEN(*CALC)
然后
CREATE TABLE QTEMP/FTAB_JRN AS(
SELECT JOENTT, ...., B.* FROM QTEMP/TAB_JRN, TAB B WHERE 1=2) WITH DATA
RUN 完上面SQL, 我们创建了一个表,这里注意,上面字段先不一一列出了,最后一个字段省略,用table的所有字段来代替,先创建一个空表。
然后通过
CPYF FROMFILE(QTEMP/TAB_JRN) TOFILE(QTEMP/FTAB_JRN) MBROPT(*ADD) FMTOPT(*NOCHK)
直接把刚刚导出来的数据copy到FTAB_JRN里面,这里数据FMTOPT(NOCHK)直接对应copy过去,这时去FTAB_JRN里查看,是不是所有的journal都转换出来的,后面的格式和原数据文件一样的格式。
这里注意,ENTTYP(RCD),record level的数据转换,否则可能会出现decimal error导致cpyf里出错。