행위

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

DB CAFE

Dbcafe (토론 | 기여)님의 2018년 10월 21일 (일) 09:17 판 (새 문서: Oracle Table의 통계정보를 옮기는 방법. 에너자이죠 2010.08.03 08:36 댓글수1 공감수 6 보통, Test 시스템에서 가동 시스템으로 데이타를 이관...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
thumb_up 추천메뉴 바로가기


Oracle Table의 통계정보를 옮기는 방법. 에너자이죠 2010.08.03 08:36 댓글수1 공감수 6


보통, 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. 통계정보를 임시로 저장할 Table생성. SQL> exec dbms_stats.create_stat_table('SCOTT','STATS');

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의 데이터를 qery 해보면 EMP table의 원래 소유자인 SCOTT이 C5 column에 명시되어 있습니다. 만약 다른 계정으로, 즉 SCOTT2 계정으로 통계정보를 옮기려면 STATS table의 SCOTT값을 SCOTT2로 update 해주어야 합니다. 두개의 DB의 계정이 동일하다면 변경해 줄 필요는 없겠죠~

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. 임시 Table로 부터 통계치를 원하는 table에 넣는다. SQL> exec dbms_stats.import_table_stats('SCOTT2','EMP2',NULL,'STATS');