ORA-01664: Transaction which has expanded the Sort Segment has aborted
Cause: Internal Error.
Action: Contact Oracle Support.
ORA-01664错误表示事务已经因增加索引而中止。
官方文档:ORA-01664 说明了一个事务已经因为尝试增加排序段而中止。
1.确定错误的原因。是一次失败的DDL操作,还是由一个查询调用的?是不是索引建立的速率太高?有了这些信息,就可以找到问题的源头,从而进一步解决错误。
2.最大限度地增加索引段:如果是由于事务涉及到索引段太大导致ORA-01664错误,建议尝试最大限度地增加索引段。这样可以消除这个错误,但是需要在系统表空间上投入更多的内存来维持索引。
3.精简索引:如果有多个不相关的字段放在同一个索引中,建议尽可能精简索引结构,尤其是在每次查询时不使用的字段。这样可以减少索引段的大小,从而避免ORA-01664错误。
4.改善DDL语句:如果异常发生在重新建立一个索引时,可以使用ALTER INDEX…REBUILD语句,而不是使用DROP + CREATE的方法去建立索引。使用ALTER INDEX…REBUILD,可以节省DDL中用到的时间。
5.限制查询规模:一些查询一次产生大量数据,尤其是时间范围很大的查询,这些操作会极大地承受ORA-01664错误。如果可以,请尝试将这个查询分割到多个小范围内,以避免错误发生。
6.更改查询诸如排序,统计等:由于某些查询排序操作,统计函数更多的行,这些操作也会导致ORA-01664的错误发生。如果有索引可以保存,请尽量调整这些查询,以便利用索引减少更大的排序操作。