如何重新找回物理文件中已经被删除的记录

序言:
这是一个允许查看/拷贝/找回物理文件中已经被删除的记录的工具。你可以交互地显示活动的和被删除的
记录,扫描到被删除的记录,并将它们恢复回来。此外,你还可以通过这个工具将记录拷贝并打印出来,或者
输出到一个输出文件,或者是在不显示记录的情况下,直接恢复被删除的记录。
与其他恢复被删除的记录的工具不同,UNDEL并不会把物理文件拷贝到SAVF中,而是直接在物理文件的记录
上直接操作,这对于有着很多记录的物理文件来说,速度会快很多。
UNDEL可以运行在RISC系统上:V3R7及以上版本,同时系统安全级别(系统值QSECURITY)设为40或50。

工作原理:
当一个应用程序删除了物理文件里的一条记录(例如:通过RPG语言中的DELETE代码),OS/400并不会真正
从存储介质上将其除去,而仅仅是在记录中设置一个数位来标明记录已经被删除。一旦这个数位被设置,通过
通常的数据库操作,OS/400将永远不会访问到这些记录。但是,你可以通过提交一个"通过RRN写数据"的操作,
重新使用这些记录,例如:在RPG程序中一条带RECNO参数的WRITE命令。这时,OS/400将回置标明被删除的哪
个数位,并且将新的记录覆盖在原来已经删除的这条记录的位置上。
这就是UNDEL的工作原理,其实它并不是恢复已删除的记录,而是在它之上重新写一个新的记录。重点在
于:UNDEL首先找回被删除的数据,然后将数据写回新的记录。由于OS/400拒绝回收旧记录中的数据,UNDEL就
跳过数据库的操作,它找到文件中的记录在数据库中的位置,然后通过简单的数位移动命令将记录恢复。
请注意,UNDEL并不真正修改物理文件中的内容,更新记录信息的操作是通过应用程序提交一个合法的
WRITE操作来实现的。(事实上,提交WRITE操作的是一个COBOL程序。)

内容:
UNDELRIS.ZIP文件包含以下内容:
-- README
-- UNDEL.LIB AS/400上名为UNDEL的库,SAVF格式。
-- PF528.FDF 528位物理文件RFROMPC的描述文件。
-- TOSAVF.REX 将物理文件拷贝成SAVF文件的源代码

UNDEL.LIB包含以下内容:
-- UNDEL 命令
-- UNDELR 命令调用的CPP
-- UNDELM MI层的程序
-- UNDELCB 写记录的COBOL程序
-- UNDELC CL功能
-- UNDELMC CL功能的消息处理
-- UNDELD 显示文件
-- UNDELP 打印文件
-- UNDELMF 信息文件
-- UNDELA 数据区域
-- UNDELU UNDEL命令的帮助信息
-- UNDELDU UNDELD显示文件的帮助信息

返回

安装步骤:
在AS/400上安装:
最简单的方法是通过FTP(如果你有到AS/400的FTP连接)。
A. 在AS/400上库mylib下创建一个SAVF -- mysavf;
B. 在PC端,打开FTP通讯;
C. 输入以下命令:
FTP> bin
FTP> cd mylib
FTP> put undel.lib mysavf
FTP> quit
(其中mysavf是步骤A中创建的SAVF。)
D. 直接跳到第D步;

如果你的系统上不能FTP,那么可以通过以下步骤:

A. 创建一个记录长度为528的物理文件:
CRTPF MYLIB/PF528 RCDLEN(528) SIZE(*NOMAX)

B. 将UNDEL.LIB放入长度为528的物理文件:
一种方法:
使用Client Access的程序RFROMPC将UNDEL.LIB拷贝到物理文件PF528中(指定PF528.FDF为描述文件);
另一种方法:
将UNDEL.LIB拷贝到一个共享文件夹,然后执行命令:
CPYFRMPCD FROMFLR(MYFLR) TOFILE(MYLIB/PF528)
FROMDOC(UNDEL.LIB) TRNTBL(*NONE)

C. 将528位的物理文件拷贝成SAVF:
一种方法:
使用QUSRTOOL命令CPYTOSAVF:
CPYTOSAVF FROMDBF(MYLIB/PF528) TOSAVF(MYLIB/MYSAVF)

另一种方法:
将REXX程序TOSAVF装入文件QREXSRC:
STRREXPRC SRCMBR(TOSAVF) SRCFILE(MYLIB/QREXSRC)
PARM('pf528 mylib mysavf mylib')

D. 从SAVF中恢复UNDEL库:
RSTLIB SAVLIB(UNDEL) DEV(*SAVF) SAVF(MYLIB/MYSAVF)
如果你愿意,也可以将这些对象恢复到另一个库中:
RSTLIB SAVLIB(UNDEL) DEV(*SAVF) SAVF(MYLIB/MYSAVF) RSTLIB(NOTHERLIB)
UNDEL命令中唯一对库有要求的对象是参数PRDLIB,所以你可以将该参数改为自己的库:
CHGCMD CMD(MYLIB/UNDEL) PRDLIB(NOTHERLIB)

返回

5. 执行方法:
输入UNDEL命令就会交互地进入显示物理文件的画面,记录是用字符表格显示的,你可以用F19或F20扫描
删除的记录,或者输入你所知道的相对记录号(RRN)。使用F23恢复已经删除的记录,系统会提示你再按一次
F23键来确认你的选择。
你还可以使用OUTFILE参数将恢复的记录拷贝到另一个文件中,如果你指定的OUTFILE不存在,命令会自动
创建,如果OUTFILE已存在,那该文件的记录格式必须与原来的文件相同。
此外,在显示画面中,还包含UNDEL命令的帮助信息(F1键显示帮助信息)。
posted @ 2008-01-09 15:00  深渊野鱼  阅读(3141)  评论(0编辑  收藏  举报