DBAtlas · 数据库运维图谱

锁定和解锁表/schema 统计信息

Oracle统计信息

命令

-- Lock (the auto stats job and normal GATHER calls no longer touch them):
EXEC DBMS_STATS.LOCK_TABLE_STATS(ownname => 'CUSTOMER_APP', tabname => 'ORDERS');
EXEC DBMS_STATS.LOCK_SCHEMA_STATS(ownname => 'CUSTOMER_APP');
-- A single partition only: DBMS_STATS.LOCK_PARTITION_STATS('CUSTOMER_APP', 'SALE_PART', 'P2026_H1');

-- Locked objects:
SELECT owner, table_name, partition_name, stattype_locked
FROM   dba_tab_statistics
WHERE  owner = 'CUSTOMER_APP' AND stattype_locked IS NOT NULL;

-- Deliberate gathering while locked (instead of ORA-20005):
EXEC DBMS_STATS.GATHER_TABLE_STATS('CUSTOMER_APP', 'ORDERS', force => TRUE);

-- Unlock:
EXEC DBMS_STATS.UNLOCK_SCHEMA_STATS(ownname => 'CUSTOMER_APP');
EXEC DBMS_STATS.UNLOCK_TABLE_STATS(ownname => 'CUSTOMER_APP', tabname => 'ORDERS');

作用

锁定统计信息防止变更;自动任务会跳过已锁定的对象,表级 GATHER 调用会报 ORA-20005。force=>TRUE 可在不解除锁定的情况下收集。

适用场景

用于在白天被清空并重新填充的暂存/易变表上保留有代表性的统计信息、保护关键表的计划不受统计信息变化影响,或保留用 DBMS_STATS.SET_TABLE_STATS 设置的值。

注意

无需许可。被锁定的统计信息会随时间偏离实际,导致基数错误;请定期报告已锁定的对象。schema 级锁定不覆盖之后加入该 schema 的表。在已锁定的表上,CREATE/REBUILD INDEX 也不会自动收集索引统计信息。

在 DBAtlas 中打开 →

相关内容