as400上如何实现不停止对外服务进行数据清理,释放表空间
由于生产机上的一些表空间巨大,可能有5亿多条记录。现在要求将其前2亿条记录清空,释放其硬盘空间,并且不能停止对外服务,如何实现。
并且要求编写一个定时任务,每天定时清理数据到备份库下,以防止生产库下的表空间过大,使其保持不变。
各个大哥帮帮忙,想个方案给小弟,感谢不尽。
最好有源代码的例子,我好仿照实现。呵呵
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
如果是通用平台的db2,好像使用插入null空,还不需要回收硬盘空间。这东西有风险,得自己先考虑好。不然数据丢了,怎么办
回复 8# insmile
不是,就是用生产表做的,所以效率很重要
结息不是用备份的表啊?
你要和BOSS说, 再不买硬盘,我们都要被灭了.
修改Reuse deleted records 为*YES 以后让系统自动重用。
这个会影响批量数据的写入操作的效率吧,我害怕季度结息时候,批量程序的效率会下降,boss会灭了我的
回复 2# digitalchina
谢谢,这个和应用的关系很大,要冒风险的的,而且我怕影响到后面的季度结息程序的效率,你的方法我会好好考虑的,辛苦大侠了,
回复 3# tomroom
谢谢你的答复,和ibm工程师的答案近似,但是他们也不敢随意做实施,有很大的风险
本帖最后由 tomroom 于 2010-05-06 14:02 编辑
默认PF参数DELETE 记录不会自动释放已经删除的记录所占空间,要运行RGZPFM释放空间,
运行RGZPFM 个人建议如下:
1) 先DSPPF 查看这个表有多少可以删除的空间 比如 Total deleted records 占多少
Total number of members . . . . . . . . . :
Total number of members not available . . :
Total records . . . . . . . . . . . . . . :
Total deleted records . . . . . . . . . . :
Total of member sizes . . . . . . . . . . :
后面操作建议先在测试环境测试下
2) 如果deleted records 超过IBM 建议的15%,可以考虑执行RGZPFM ,具体要看你操作系统版本V5R3 之后版本有可以在线运行RGZPFM压缩数据表,所谓在线运行还是会有锁不过是*SHRUPD类型锁,你要根据自己业务情况判断,在线运行RGZPFM压缩数据表会产生大量日志数据,如果你系统有HA软件比如MINIX 会对数据同步产生影响,
参考如下图llow cancel . . . . . . . . . . > *YES; Lock state . . . . . . . . . . . > *SHRUPD ;Rebuild access paths . . . . . . *YES 之前轻舟有过帖子
若是老版本操作系统没有以上在线运行选项,默认参数 RGZPMF 只能在所有用户都不访问该表,才能操作。
Reorganize Physical File Mbr (RGZPFM) Level: 3
Type choices, press Enter.
Label . . . . . . . . . . . . .
Data base file . . . . . . . . . > &MBFILE Name
Library . . . . . . . . . . . > &MBLIB Name, *LIBL, *CURLIB
Member . . . . . . . . . . . . . > &MBNAME Name, *FIRST, *LAST
Key file:
Logical file . . . . . . . . . > *NONE Name, *NONE, *FILE, *RPLDLTRCD
Library . . . . . . . . . . Name, *LIBL, *CURLIB
Member . . . . . . . . . . . . Name
Rebuild access paths . . . . . . *YES *YES, *OPTIMIZE, *NO
Allow cancel . . . . . . . . . . > *YES *NO, *YES
Lock state . . . . . . . . . . . > *SHRUPD *EXCL, *EXCLRD, *SHRUPD
3) 若这个表么有批量INSERT 数据操作 可以考虑CHGPF 修改Reuse deleted records 为*YES 以后让系统自动重用DELETE记录的空间,这个操作会降低批量INSERT 数据操作性能。
本帖最后由 digitalchina 于 2010-05-07 02:27 编辑
我想到两种方法:
1 从系统角度考虑, 如果有HA或者热备系统, 把作业切换到热备系统,然后切回来.
或者把PF COPY一下,用COPY的那份做删减, 再OVRDBF切换( 这个过程可能需要停应用)
2 给PF多建几个MEMBER , 每次把要删的数据移到另一个MEMBER , 然后CLRPFM清空指定的MEMBER.
应用要做修订,访问时须指定MEMBER, 这样也可提高效率.
以上所有操作都具有高度的风险,请谨慎!!!