NC6 通过 SPR 日志解决档案删除报错问题吴雅萍 wuyp@yonyou.com1 引言 当在产品使用过程中出现报错时,通过 SPR 日志能够有效的定位问题,并且快速的处理问题,本文以档案删除为例,说明如何通过 SPR 日志定位问题并解决问题。2 应用场景及问题描述在日常使用过程中,经常会出现需要删除某个档案的情况,有时候档案删除的时候会报已被引用无法删除,这时候我们可以通过 SPR 日志快速定位并解决问题。接下来我们以部门档案的删除为例来进行说明,如下图,删除部门时报:数据已被引用。这时候我们可以通过SPR 日志来查询引用数据,并做相应处理。3 解决方案第一步:提取 SPR 日志,日志级别设置为 DEBUG第二步:对提取到的 SPR 日志进行分析,查看日志中 SQL 信息,最后几条结果即为引用数据如上图,可以看到最后查询的表是 bd_project,如果不清楚这是什么表,那么,可以查看数据字典,如下图,通过数据字典找到,这个表是项目档案表:根据日志中的语句可以看到引用部门档案的字段是:pk_duty_dept,再到数据字典里看,这个字段是责任部门 同时,根据日志中的语句可以看到引用部门档案的字段是:pk_duty_dept,再到数据字典里看,这个字段是责任部门。第三步:根据上面查到的结果,部门档案是被项目档案中的责任部门引用了,这个时候,我们可以在产品中查询责任部门为该部门的项目档案,进行修改或者删除,然后再删除部门档案。如果万一在前台查询不到数据,可以在后台通过脚本删除引用数据,根据 SPR 日志中的查 询 语 句 : select 1 from bd_project where rownum<2 and ( pk_duty_dept = '1001111000000000CPPI' ) and pk_project <> '1001111000000000CPPI' and nvl ( dr, 0 ) = 0 来写删 除 语 句delete from bd_project where rownum<2 and ( pk_duty_dept = '1001111000000000CPPI' ) and pk_project <> '1001111000000000CPPI' and nvl ( dr, 0 ) = 0注意:删除之前需要先备份数据,以下为备份语句和还原语句备份语句:select * into bd_project_bak from bd_project还原语句:insert into bd_project select * from bd_project_bak