JPA自动呼叫分析表x计算统计

时间:2013-11-30 16:35:19

标签: java oracle jpa

我们正在开发一些基于Open Jpa 2.2与Oracle交互的遗留代码。代码会自动发出如下语句:

analyze table x compute statitics

我们希望避免这种情况,因为它发生在我们不想要的时候。这有可能吗?如果是的话怎么样?

2 个答案:

答案 0 :(得分:1)

DBMS_STATS.LOCK_TABLE_STATS可以阻止统计信息收集。

--Create sample table.
create table x(a number);

--To gather stats: unlock stats, gather stats, then lock stats.
begin
    dbms_stats.unlock_table_stats(user, 'X');
    dbms_stats.gather_table_stats(user, 'X');
    dbms_stats.lock_table_stats(user, 'X');
end;
/

--Any session that tries to gather stats without unlocking gets an exception.
analyze table x compute statistics;

ORA-38029: object statistics are locked

<强>更新

这是一个JDBC错误:Bug 4999817 : WHEN THE LAST FLAG TO GETINDEXINFO() IS TRUE, IT SHOULD NOT ANALYZE THE TABLE.它已修复为11g,并且有10g的补丁。您需要一个Oracle支持帐户才能阅读该错误的完整详细信息,但您已经找到了大部分错误。

答案 1 :(得分:0)

这是为了突出我在其他sw段中注意到的这个问题的解决方案:

问题出在getIndexInfo()metatada类方法中。如果第四个参数设置为false,系统将计算确切的统计数据:应该避免这种情况,特别是如果在后续步骤中重新计算这些统计数据(这在我的经验中很常见,因为人们希望控制这些步骤)。