{系统管理员必备}如何恢复pf中被误删除的记录?
时间:2007-01-03 21:28:34
来源: 作者:whsong 点击:次 出处:技术无忧
关键字:{系统
日志(Journal)的概念相当于其它关系数据库的日志(LOG),通常如果事务型应用需要提交/回滚(Commit/Roll Back)时,数据库的表是需要日志的。另外,如果表上定义了触发器、参照完整性(Referential Integrity),表也需要日志的。 DB2 for iSeries的表是可以有日志的,也可以无日志的。如果你用来创建的是Library而不是SQL的Collection,那么创建于这个Library的表默认是没有日志的。反之,如果你用来创建的是SQL的Collection,那么创建于这个Library的表默认是有日志的;默认的日志是QSQJRN,默认的日志接收器是QSQJRN0001,用户可以更改这些默认属性。
以下就是通过日志来恢复误删除PF记录的一个事例,你可以用Navigator方式进行创建日志,如果习惯用5250仿真绿屏方式,也可以使用CL命令来创建日志,以下是以5250绿屏方式。
1、创建日志接收器
===> CRTJRNRCV JRNRCV(LIU/LIUJRNRCV) TEXT('Liu's Journal Receive')
2、建立日志
===> CRTJRN JRN(LIU/LIUJRN) JRNRCV(LIU/LIUJRNRCV) TEXT('liu's Journal')
3、以LIU/EXECTL这个PF为例,以*BOTH方式启动日志
===> STRJRNPF FILE(LIU/EXECTL) JRN(LIU/LIUJRN) IMAGES(*BOTH)
为了利用JRN进行修改回退,JRN必须启用了参数"Journal images"的"*BOTH"选项,即除了缺省的"After Images"还要包含"Before Images".
4、先查询目前记录情况,共75条记录。
===> RUNQRY *N LIU/EXECTL
5、测试:通过STRDFU删除LIU/EXECTL记录5条,然后再次查询情况,仅剩下70条记录。
6、利用RMVJRNCHG命令恢复记录
===> RMVJRNCHG JRN(LIU/LIUJRN) FILE((LIU/EXECTL))
7、系统提示:Remove failed. 5 entries removed from *QDDS object.
8、再次查询LIU/EXECTL情况,发觉被删除的记录已经恢复。
■如果想删除日志及日志接收器,需要按照如下步骤实施。
1、先解除日志与PF文件的关联
===> ENDJRNPF FILE(LIU/EXECTL) JRN(LIU/LIUJRN)
2、删除日志
===> DLTJRN JRN(LIU/LIUJRN)
3、删除日志接收器
===> DLTJRNRCV JRNRCV(LIU/LIUJRNRC
1、创建日志接收器
2、建立日志
3、以LIU/EXECTL这个PF为例,以*BOTH方式启动日志
4、先查询目前记录情况,共75条记录。
5、测试:通过STRDFU删除LIU/EXECTL记录5条,然后再次查询情况,仅剩下70条记录。
6、利用RMVJRNCHG命令恢复记录
7、系统提示:Remove failed. 5 entries removed from *QDDS object.
8、再次查询LIU/EXECTL情况,发觉被删除的记录已经恢复。
赞一个.
删除PF文件中的记录, 实际上只是做删除标记, 记录数据并没有被删除.
如果PF属性Reuse deleted records为*NO,那么该记录的RRN地址始终不会被覆盖,新插入的记录始终在文件尾部追加,也即该记录数据始终存在,直到PF被重组.
如果PF属性Reuse deleted records为*YES,那么新插入记录会首先覆盖那些被标记为删除的记录RRN.
如果记录RRN已被新插入记录覆盖或者被重组后,无论什么方式都不可能恢复PF中误删除的记录了.
RMVJRNCHG这个命令有些意思,谢了.
--------------------------------------------------------------------------------
ricky.xiao 回复于:2006-06-23 16:11:01
用JRN很方便 我们也在用 感觉恢复起来也不怎么麻烦~~~
--------------------------------------------------------------------------------
qingzhou 回复于:2006-06-23 16:43:55
[color=Blue]●2006/06/23 继续补充……[/color]
DB2 for iSeries的日志由两部分组成:Journal和 Journal Receive。Journal相当于一张登记表,记录着那些表是有日志的,而日志实际上需要记载的内容(表的创建、打开、增加、修改、删除、权限更改等)存在于日志接收器里。日志和日志接收器是相关联的,一个Journal最多关联两个日志接收器,一般情况是一个。存在于日志接收器里的实际内容是一条一条地排列,称之为日志条目(Journal Entry)。
日志的一个重要作用就是用于恢复数据,可以手工用日志和日志接收器来恢复数据。DB2 for iSeries恢复数据有两种方式:Back Recovery和Forward Recovery。
Back Recovery即为Remove Journal Change(RMVJRNCHG),即为回滚操作。典型的应用情况为,如果用户对数据库进行了误操作,或因为某种原因想让数据库的内容回滚到某个时间点的状态。用户用命令WRKJRN(Work With Journal)来对日志进行操作,如果用户需要恢复到某个时间点,可以由Journal Receive、Sequence Number、Job Name来决定,在进行RMVJRNCHG之前,建议先用DSPJRN命令来判断哪些日志条目需要去除,然后再用RMVJRNCHG进行Back Recovery。
Forward Recovery为前滚操作,典型的应用情况是数据库遭到破坏,但日志没有遭到破坏,这时可以用日志来恢复数据库。与Back Recovery相同的是,用户如果需要恢复到某个时间点,最重要的是需要知道恢复到哪一个时间点,这个可以由Journal Receive、Sequence Number、Job Name来决定,用户在进行APYJRNCHG之前,建议先用DSPJRN命令来判断哪些日志条目需要实施(Apply)。
===> APYJRNCHG JRN(LIU/LIUJRN) FILE((LIU/EXECTL))
1、关于CRTJRNRCV创建日志接收器,可以通过参数THRESHOLD(1-1000000000)指定创建的大小:
===> CRTJRNRCV JRNRCV(LIU/LIUJRNRCV) THRESHOLD(5000) TEXT('Liu''s Journal Recei
ve')
日志接收器是有空间限制的,日志接收器的空间限制有两方面:空间大小限制(Size Threshold)和日志条目数(Maximum Journal Entry)。日志接收器的日志条目越多,日志空间就越大;当日志空间超过阀值(Threshold)时,日志接收器就不能存储日志条目了,这时日志就需要交换日志接收器(Swap Receiver)。
2、关于CRTJRN创建日志时,可以通过参数MNGRCV(*SYSTEM)将数据库日志从用户管理MNGRCV (*USER)改为系统管理MNGRCV (*SYSTEM);通过参数DLTRCV(*YES)设定,可以让系统自动删除已经解除关联的日志接收器。
===> CRTJRN JRN(LIU/LIUJRN) JRNRCV(LIU/LIUJRNRCV) MNGRCV(*SYSTEM) DLTRCV(*YES)
TEXT('Liu''s Journal')
管理日志接收器的方法有两种:*SYSTEM和*USER。*SYSTEM是系统管理方式,当日志接收器的空间超过阀值时,系统会自动将当前的日志接收器解除关联(Detach),同时,系统会自动创建一个属性相同的日志接收器并且关联到日志上。如果采用*USER方式,当日志接收器的空间超过阀值时,系统会发出消息(在*QSYSOPR消息队列里)提示用户目前的日志接收器已满,用户需要创建一个日志接收器并且关联到日志上。
建议用系统管理方式,无须人工干预。
3、关于RMVJRNCHGS使用,为防止操作出错,请先备份数据库内容,同时也建议备份JRNRCV。
用CL命令 WRKJRN -> 用选项3 ( 3=Backout recovery )
一个Journal可能对应很多PF,所以需要选择哪个PF要被回退,在前面敲 2=Remove journaled changes (相当于启动了命令RMVJRNCHG)。
注意参数:
Starting sequence number . . . . *LAST
Ending sequence number . . . . . 找到要回退到的时间点对应的Sequence号码
如果继续做第二次的RMV回退,特别要注意:
Starting sequence number . . . . 第一次回退终点
Ending sequence number . . . . . 下一个要回退到的时间点对应的Sequence号码
[ 本帖最后由 qingzhou 于 2006-6-23 16:55 编辑 ]
===> CRTJRNRCV JRNRCV(LIU/LIUJRNRCV) THRESHOLD(5000) TEXT('Liu''s Journal Recei
===> CRTJRN JRN(LIU/LIUJRN) JRNRCV(LIU/LIUJRNRCV) MNGRCV(*SYSTEM) DLTRCV(*YES)
用CL命令 WRKJRN -> 用选项3 ( 3=Backout recovery )
需要选择哪个PF要被回退,在前面敲 2=Remove journaled changes (相当于启动了命令RMVJRNCHG)
注意参数:Starting sequence number和Ending sequence number
===> APYJRNCHG JRN(LIU/LIUJRN) FILE((LIU/EXECTL))
访问技术无忧网,软硬件通吃保你技术无忧!网址http://www.pc51.net











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面