statistics lock/unlock
■통계 lock
자동 수집 방지 목적
예: 매번 동적 샘플링하도록 설정
begin
dbms_stats.delete_table_stats('oe','orders');
dbms_stats.lock_table_stats('oe','orders');
end;
/
예: 대표 값에 대한 통계가 있는 테이블에 대한 통계 lock
begin
dbms_stats.gather_table_stats('oe','orders');
dbms_stats.lock_table_stats('oe','orders');
end;
/
■ lock 방법
lock_partition_stats
lock_schema_stats
lock_table_stats
■unlock 방법
unlock_partition_stats
unlock_schema_stats
unlock_table_stats
■통계 lock 되었는지 확인하는 방법
select table_name, stattype_locked from user_tab_statistics
where stattype_locked='ALL';
※stattype은 기본값이 ALL이며 아직까진 다른 옵션은 개발되지 않은 것으로 보인다. 매뉴얼에도 없다.
■통계가 lock되어있더라도 강제 갱신 방법
통계가 lock된 테이블이나 테이블의 종속(인덱스, 열, 히스토그램)된 객체에 통계 갱신이나 수집, import를 시도하면
아래처럼 ora-20005를 만난다.
SQL> exec dbms_stats.gather_index_stats(null, 'LOCK_TEST_IDX')
BEGIN dbms_stats.gather_index_stats(null, 'LOCK_TEST_IDX'); END;
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 10872
ORA-06512: at "SYS.DBMS_STATS", line 10896
ORA-06512: at line 1
이때 force 옵션을 사용하면 갱신 가능하다.
SQL> exec dbms_stats.gather_index_stats(null, 'LOCK_TEST_IDX', force=>true);
PL/SQL procedure successfully completed.