【发布时间】:2016-06-03 17:50:32
【问题描述】:
我有一个使用 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
【问题讨论】: