我们正在开发一些基于Open Jpa 2.2与Oracle交互的遗留代码。代码会自动发出如下语句:
analyze table x compute statitics
我们希望避免这种情况,因为它发生在我们不想要的时候。这有可能吗?如果是的话怎么样?
答案 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,系统将计算确切的统计数据:应该避免这种情况,特别是如果在后续步骤中重新计算这些统计数据(这在我的经验中很常见,因为人们希望控制这些步骤)。