統計情報のロック機能は主に統計情報をロックし、統計情報の更新を防ぐために使用されます。これは統計情報の安定性を保つことを目的としています。例えば、安定したデータを持つテーブルについて、統計情報を収集した後、そのテーブルの統計情報を一定に保つ必要がある場合、現在のテーブルの統計情報をロックすることができます。
DBMS_STATSシステムパッケージが提供する統計情報のロック/アンロック機能に関連するプロシージャは以下の通りです:
lock_table_stats:特定のテーブルの統計情報をロックします。lock_partition_stats:特定のパーティションの統計情報をロックします。lock_schema_stats:特定のスキーマ内のすべてのテーブルの統計情報をロックします。unlock_table_stats:特定のテーブルの統計情報のロックを解除します。unlock_partition_stats:特定のパーティションの統計情報のロックを解除します。unlock_schema_stats:特定のスキーマ内のすべてのテーブルの統計情報のロックを解除します。
注意すべき点として、ロックのタイプについて、ネイティブOracleは3種類のロックタイプをサポートしています:ALL、DATA、CACHE。現在、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');