DBAtlas · 데이터베이스 운영 아틀라스

테이블/스키마 통계 잠금 및 해제

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는 잠금을 해제하지 않고 수집한다.

사용 시점

하루 중 비워졌다가 다시 채워지는 staging/휘발성 테이블의 대표 통계를 유지하거나, 중요 테이블의 계획을 통계 변경으로부터 보호하거나, DBMS_STATS.SET_TABLE_STATS로 설정한 값을 보존하기 위해.

주의

라이선스가 필요 없다. 잠긴 통계는 시간이 지나면서 실제와 멀어져 카디널리티 오류를 일으키므로 잠긴 객체를 정기적으로 보고한다. 스키마 잠금은 나중에 스키마에 추가된 테이블에는 적용되지 않는다. 잠긴 테이블에서는 CREATE/REBUILD INDEX도 인덱스 통계를 자동으로 수집하지 않는다.

DBAtlas에서 열기 →

관련 항목