文档解释
ORA-30926: unable to get a stable set of rows in the source tables
Cause: A stable set of rows could not be got because of large dml activity or a non-deterministic where clause.
Action: Remove any non-deterministic where clauses and reissue the dml.
Oracle给出ORA-30926错误提示,表示无法从源表获得一组稳定的行。在常见情况下,用户在Oracle数据库中运行一个查询,该查询访问多个表,但根据优化器不能获得稳定的行,这会导致ORA-30926错误提示发出。官方给出的解释是:“ORA-30926错误指出,Oracle不能获得在参与查询中使用的源表之间容许可接受的差异程度的稳定集行,因此,查询不能正常完成。”。
一般处理方法及步骤
1. 首先,你应该删除无效的数据。这会减少表中维护的脏数据,这样你可以避免这个错误一直发生。
2. 确保每个表获取的数据是完成的,这样可以避免Oracle识别出不存在的行。
3. 查看trigger和procedure,如果存在任何这样的对象,确保它们可以正确执行,因为它们可能也会导致ORA-30926错误。
4. 确保表索引是正确的,这也可能影响查询的性能以及参与查询的行。
5. 记录SQL语句的信息,以便进行分析,看是否存在任何已知的性能问题。
6. 重新编写一个SQL语句,以便使用ORA-30926错误,查看表中是否有不一致的行。
7. 根据信息,更改设置,例如_b_tree_bitmap_plans,以启用位图查询优化器计划和_fix_control,以解决ORA-30926问题。
8. 更新数据,以便使其一致性。
9. 检查你的查询说明符,以确保你已正确指定它们。
10. 确保当查询执行时,用户拥有正确的访问权限 E / O