행위

오라클 자동 통계정보 스케줄

DB CAFE

DBCAFE (토론 | 기여)님의 2018년 11월 26일 (월) 16:35 판
thumb_up 추천메뉴 바로가기


Oracle Table의 통계정보를 옮기는 방법.

보통, Test 시스템에서 가동 시스템으로 데이타를 이관하는 경우, 데이타 뿐만 아니라 통계정보도 이관하여, Test계와 가동계를 동일하게 유지하고자 하는 경우.

  • 통계정보 추출
dbms_stats.export_table_stats(
ownname   VARCHAR2,                -- schema name
tabname   VARCHAR2,                -- table name
partname  VARCHAR2 DEFAULT NULL,   -- partition name
stattab   VARCHAR2,                -- stat table name
statid    VARCHAR2 DEFAULT NULL,   -- optional identifier
cascade   BOOLEAN  DEFAULT TRUE,   -- TRUE = indexes too 
statown   VARCHAR2  DEFAULT NULL); -- stat table schema 

예시) exec dbms_stats.export_table_stats(USER, 'servers', NULL, 'STAT_TAB', NULL, TRUE);
  • 통계정보 입력
dbms_stats.import_table_stats(
ownname       VARCHAR2, 
tabname       VARCHAR2,
partname      VARCHAR2 DEFAULT NULL,
stattab       VARCHAR2, 
statid        VARCHAR2 DEFAULT NULL,
cascade       BOOLEAN  DEFAULT TRUE,
statown       VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN  DEFAULT to_no_invalidate_type(get_param('NO_INVALIDATE')),
force         BOOLEAN DEFAULT FALSE); 

예시) exec dbms_stats.import_table_stats(USER, 'servers', stattab=>'STAT_TAB');
  • 예 : SCOTT의 EMP 통계를 SCOTT2의 EMP2로 이관

1 1. 통계정보를 임시로 저장할 Table생성.[편집]

SQL> exec dbms_stats.create_stat_table('SCOTT','STATS');

2 2. 원하는 table의 통계정보를 임시 table로 이관.[편집]

SQL> exec dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS','emp stats',TRUE);
  • 참고 (updated: 2010/08/03)

"emp stats"로 중간에 space가 들어가면 에러발생함

SQL> exec dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS','EMP_STATS',TRUE,'SCOTT');
BEGIN dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS','EMP STATS',TRUE,'SCOTT'); END;
*
ERROR at line 1:
ORA-20001: EMP STATS is an invalid identifier
ORA-06512: at "SYS.DBMS_STATS", line 8240
ORA-06512: at "SYS.DBMS_STATS", line 9188
ORA-06512: at line 1

* 주의 (updated: 2010/08/03)
STATS table의 데이터를 쿼리 해보면 EMP table의 원래 소유자인 SCOTT이 C5 column에 명시되어 있음.
만약 다른 계정으로, 즉 SCOTT2 계정으로 통계정보를 옮기려면 STATS table의 SCOTT값을 SCOTT2로 update 해주어야 함.
두개의 DB의 계정이 동일하다면 변경해 줄 필요 없음

3 3. 임시 table을 export, 그리고 target db로 import.[편집]

$exp scott/tiger tables=STATS file=expstat.dmp
 $imp scott/tiger file=expstat.dmp full=y log=implog.txt
(만약 동일 DB라면 이 과정은 생략 가능합니다.)

4 4. 임시 Table로 부터 통계치를 원하는 table에 넣는다.[편집]

SQL> exec dbms_stats.import_table_stats('SCOTT2','EMP2',NULL,'STATS');

5 5. 통계정보 테이블 삭제[편집]

SQL> EXEC DBMS_STATS.DROP_STAT_TABLE('SCOTT2','STAT_TAB');