-
[SQL] DBMS_STATS.LOCK_TABLE_STATSDatabase 2024. 3. 14. 17:13
DBMS_STATS.LOCK_TABLE_STATS : 테이블의 통계정보 잠그는데 사용, 테이블의 통계 정보가 변경되지 않도록 보호할 수 있음
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1');drop table t1; CREATE TABLE t1 ( id NUMBER PRIMARY KEY, name VARCHAR2(50) ); INSERT INTO t1 VALUES (1, 'a'); INSERT INTO t1 VALUES (2, 'b');통계정보 잠그기
SQL> EXEC DBMS_STATS.LOCK_TABLE_STATS(ownname => USER, tabname => 't1'); PL/SQL procedure successfully completed.통계정보 수집 X
force=>TRUE 사용하면 잠긴테이블도 수집가능 (default false)
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1'); BEGIN DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1'); END; * ERROR at line 1: ORA-20005: object statistics are locked (stattype = ALL) ORA-06512: at "SYS.DBMS_STATS", line 40751 ORA-06512: at "SYS.DBMS_STATS", line 40035 ORA-06512: at "SYS.DBMS_STATS", line 9393 ORA-06512: at "SYS.DBMS_STATS", line 10317 ORA-06512: at "SYS.DBMS_STATS", line 39324 ORA-06512: at "SYS.DBMS_STATS", line 40183 ORA-06512: at "SYS.DBMS_STATS", line 40732 ORA-06512: at line 1 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1', force=>FALSE); BEGIN DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1', force=>FALSE); END; * ERROR at line 1: ORA-20005: object statistics are locked (stattype = ALL) ORA-06512: at "SYS.DBMS_STATS", line 40751 ORA-06512: at "SYS.DBMS_STATS", line 40035 ORA-06512: at "SYS.DBMS_STATS", line 9393 ORA-06512: at "SYS.DBMS_STATS", line 10317 ORA-06512: at "SYS.DBMS_STATS", line 39324 ORA-06512: at "SYS.DBMS_STATS", line 40183 ORA-06512: at "SYS.DBMS_STATS", line 40732 ORA-06512: at line 1 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1', force=>TRUE); PL/SQL procedure successfully completed.통계정보 잠금 해제
SQL> EXEC DBMS_STATS.UNLOCK_TABLE_STATS(ownname => USER, tabname => 't1'); PL/SQL procedure successfully completed.SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1'); PL/SQL procedure successfully completed. SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1', force=>FALSE); PL/SQL procedure successfully completed. SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => USER, tabname => 't1', force=>TRUE); PL/SQL procedure successfully completed.'Database' 카테고리의 다른 글
[Oracle] Optimizer 관련 parameter (0) 2024.07.13 [Oracle] unnest, no_unnest (0) 2024.04.09 [SQL] dbms_random.string (0) 2024.03.12 [Oracle] DBMS_STAT (0) 2024.02.04 [Oracle] 통계정보 (0) 2024.02.04