統計情報のロック機能は主に統計情報をロックし、統計情報の更新を防ぐために使用されます。これは統計情報の安定性を保つことを目的としており、使用シナリオとしては、データが安定しているテーブルについて、統計情報を収集した後、そのテーブルの統計情報を一定のまま保つ必要がある場合などが挙げられます。このような場合、現在のテーブルの統計情報をロックすることができます。
DBMS_STATS システムパッケージが提供する統計情報のロック/アンロック機能に関連するプロシージャは以下の通りです:
lock_table_stats:特定のテーブルの統計情報をロックします。lock_partition_stats:特定のパーティションの統計情報をロックします。lock_schema_stats:特定のスキーマ下のすべてのテーブルの統計情報をロックします。unlock_table_stats:特定のテーブルの統計情報をアンロックします。unlock_partition_stats:特定のパーティションの統計情報をアンロックします。unlock_schema_stats:特定のスキーマ下のすべてのテーブルの統計情報をアンロックします。
注意点として、ロックのタイプについて、ネイティブOracleは ALL、DATA、CACHE の3種類のロックタイプをサポートしています。現在、OceanBaseデータベースのオプティマイザーは ALL タイプのみをサポートしています。また、テーブルにテーブルロックとパーティションロックが両方かかっている場合、アンロックする際にも両方のロックを同時に解除する必要があります。
# ユーザーTESTのテーブルT_PARTのテーブルレベル統計情報およびP0パーティションの統計情報をロックする
call dbms_stats.lock_table_stats('TEST', 'T_PART');
call dbms_stats.lock_partition_stats('TEST', 'T_PART', 'P0');
# ユーザーTESTのテーブルT_PARTのテーブルレベル統計情報およびP0パーティションの統計情報をアンロックする
call dbms_stats.unlock_table_stats('TEST', 'T_PART');
call dbms_stats.unlock_partition_stats('TEST', 'T_PART', 'P0');