我有使用Spring JPA和Hibernate连接到ORACLE 11g数据库的Java应用程序。

有时,我需要在数据库中使用drop partition并将所有UNUSABLE global indexes重建为USABLE状态。 (由于执行drop partition命令,索引变得不可用)

在删除分区和尚未重建UNUSABLE索引之间,我的在线应用程序失败,并显示ORA-01502 error,如下所示。

Caused by: java.sql.BatchUpdateException: ORA-01502: index 'USER.INDEX_NAME' or partition of such index is in unusable state

   at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070)
   at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
   at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
   ... 94 more


在SQL中,可以通过设置skip_unusable_indexes=TRUE来忽略UNUSABLE索引。这样,查询优化器将选择不使用索引的其他(昂贵的)执行计划,并且不会报告由于无法使用索引而导致DML查询失败的情况。

Hibernate中是否有类似的选项可供我使用,以使索引处于UNUSABLE状态时不会失败?

我正在使用的版本
休眠状态:3.6.9
甲骨文:11g
爪哇:7

最佳答案

您可以重建索引:

ALTER INDEX USER.INDEX_NAME REBUILD;

07-24 19:55