表/スキーマの統計をロック/ロック解除
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で設定した値を保持するため。
注意
ライセンス不要。ロックされた統計は時間とともに実態から乖離し、カーディナリティ誤差の原因になるため、ロックされたオブジェクトを定期的に報告する。スキーマのロックは後でスキーマに追加された表には適用されない。ロックされた表では、CREATE/REBUILD INDEXもインデックス統計を自動収集しない。