很多客户都想知道怎么删除旧的过期的bdoc或者想知道为什么自己的系统中SMW3_BDOC*这样的表中数据越来越多。
在这篇博文中,我来和大家分享如何删除过期的bdoc。
Report SMO6_REORG2 就可以用来将过期的bdoc删除掉。实际上,我们建议大家在系统上将这个report作为后台的job来定期执行的,使smw01中不需要的bdoc不会积攒的过多,同时表SMW3_BDOC*中的数据也不会增长的过快。
执行事务代码SE38,输入report名字SMO6_REORG2,点击执行,你可以看到实际上这个report又包含了很多不同的report。对于这些report,你可以参考SAP note 206439。通常我们将他们都勾选上。
在执行report SMO6_REORG2之前,你可以先执行report RSRLDREL2,在relation处选择SMW0REL,这个report用来删除bdoc之间的object links。先执行这个report的作用是可以使report SMO6_REORG2执行的更快且更彻底。这一点也在KBA 1922644中提到。
同时,在执行report SMO6_REORG2的时候,你会发现有一个参数 “Days to hold”,这个参数用来控制从现在开始往前需要保存几天的bdoc,这个数需要填一个整数,默认以及推荐的数值是7,也就是保存7天内的bdoc,你也可以根据自己的业务需要进行调整。这个参数在note 493156中也有提到。
另外,请大家注意,report SMO6_REORG2只会删除成功执行的bdoc,对于有错误的或者没有执行完成的bdoc是不会被删除的,因为删除有错误的bdoc是有可能引起数据的不一致的。如果你在保证数据已经一致的前提下,需要删除没有成功执行完成的bdoc,那么你可以在事务代码SMW01中选中这条记录,在目录中选择Bdoc Message-> Process-> Delete,这样就手动地将bdoc的状态设为“set to processed”,当再次执行report SMO6_REORG2的时候,这条记录也就可以被删除掉了。
这里还有一个note 1138051,其中包含了一个参数可以阻止系统建立bdoc之间的object links,在这里只是让大家了解有这么一个参数,实际中是不推荐大家添加这个参数的。
English version: How to delete/reorganize old bdocs