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

analyze table x compute statitics


我们希望避免这种情况,因为我们不希望发生这种情况。这可能吗?如果是,怎么办?

最佳答案

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支持帐户来阅读该bug的全部详细信息,但是您已经了解了其中的大部分内容。

09-11 19:59