Select sum(cost),name from test_table where name='A' group by name;
Select sum(cost),name from test_table group by name;显示结果中name='A'的值和上面sql统计结果不同。
数据库'疯了'吗?[@more@]
用户回忆说之前服务器遭遇断电,数据库undo表空间受损。之后使用_corrupted_rollback_segments参数强制打开数据库,并重建了undo表空间,数据库继续使用。于是在运行业务报表时发现某些统计出错(类似上面sql的情况)。
因此我们怀疑查询的异常和数据库的这一故障恢复有关。重建数据库后,这一问题就不再出现了。
类似的参数有:_corrupted_rollback_segments,或_offline_rollback_segments,还有_allow_resetlogs_corruption= TRUE。Oracle建议遇到undo/online redo损坏应使用备份进行恢复,只有当没有备份的情况下,才考虑用这些隐含参数。且数据库打开后,应尽快进行备份,重建数据库,否则会遇到难以遇见的问题。
通过这次故障的分析,也说明了解决问题时,了解事情来龙去脉的重要性。
当online redo log文件损坏,使用_allow_resetlogs_corruption= TRUE
若回滚段损坏导致db无法打开,使用
_corrupted_rollback_segments=(rbs_01, rbs_02, rbs_03)
或_offline_rollback_segments
强制打开db后,数据库存在严重隐患,应通过exp进行备份,然后重建数据库。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18474/viewspace-1060795/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/18474/viewspace-1060795/