統計情報のロック機能は主に統計情報をロックし、統計情報の更新を防ぐために使用されます。これは統計情報の安定性を保つことを目的としており、使用シナリオとしては、データが安定しているテーブルに対して統計情報を収集した後、そのテーブルの統計情報を一定のまま保つ必要がある場合などが挙げられます。このような場合、現在のテーブルの統計情報をロックすることができます。
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');