프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 10.2.0.4, 11.2.0.4


방법 : 자동통계정보 수집 기능 테이블 단위 비활성화 (lock)

자동통계정보 수집 기능 테이블 단위 비활성화 (lock)

EXEC DBMS_STATS.LOCK_TABLE_STATS('유저명','테이블명');

1
2
3
EXEC DBMS_STATS.LOCK_TABLE_STATS('JSH','EMP');
 
PL/SQL procedure successfully completed.



수동 통계정보 수집

1
2
3
4
5
6
7
8
9
EXEC DBMS_STATS.GATHER_TABLE_STATS('JSH','EMP');
BEGIN DBMS_STATS.GATHER_TABLE_STATS('JSH','EMP'); END;
 
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 24281
ORA-06512: at "SYS.DBMS_STATS", line 24332
ORA-06512: at line 1

에러 발생하면서 수집되지 않음



통계정보 lock 확인

1
2
3
4
5
6
select table_name, stattype_locked from user_tab_statistics
where stattype_locked='ALL';
 
TABLE_NAME               STATT
------------------------------ -----
EMP                   ALL

자동통계정보 수집상태가 LOCK 상태이면 LOCKSTATTYPE_LOCKED가 ALL로 표시된다.

11g 기준으로 LOCKSTATTYPE_LOCKED 의 값은 ALL, DATA, CACHE가 있는데

오라클 커뮤니티 유저의 말에 따르면 DATA와 CACHE값은 내부 오라클 커널 작업으로 수행된다고함

일반유저가 설정할 수 있는 값은 ALL 밖에 없다는 말임



자동통계정보 수집 기능 테이블 단위 활성화 (unlock)

1
2
3
EXEC DBMS_STATS.UNLOCK_TABLE_STATS('JSH','EMP');
 
PL/SQL procedure successfully completed.



수동 통계정보 수집

1
2
3
EXEC DBMS_STATS.GATHER_TABLE_STATS('JSH','EMP');
 
PL/SQL procedure successfully completed.

정상 실행됨



+

자동통계정보 수집 기능 테이블 단위 비활성화(lock) 상태에도 수동으로 수집하는 방법

1
2
3
EXEC DBMS_STATS.GATHER_TABLE_STATS('JSH','EMP',force=>true);
 
PL/SQL procedure successfully completed.

마지막 인자에 force=>true 을 사용해주면 정상 실행됨



참조 : http://neo-orcl.tistory.com/m/104

https://community.oracle.com/message/12932876#12932876