"오라클 자동 통계정보 스케줄"의 두 판 사이의 차이
DB CAFE
1번째 줄: | 1번째 줄: | ||
Oracle Table의 통계정보를 옮기는 방법. | Oracle Table의 통계정보를 옮기는 방법. | ||
− | |||
보통, Test 시스템에서 가동 시스템으로 데이타를 이관하는 경우, | 보통, Test 시스템에서 가동 시스템으로 데이타를 이관하는 경우, | ||
데이타 뿐만 아니라 통계정보도 이관하여, Test계와 가동계를 동일하게 유지하고자 하는 경우. | 데이타 뿐만 아니라 통계정보도 이관하여, Test계와 가동계를 동일하게 유지하고자 하는 경우. | ||
+ | * 통계정보 추출 | ||
<source lang=sql> | <source lang=sql> | ||
+ | |||
dbms_stats.export_table_stats( | dbms_stats.export_table_stats( | ||
ownname VARCHAR2, -- schema name | ownname VARCHAR2, -- schema name | ||
15번째 줄: | 16번째 줄: | ||
statown VARCHAR2 DEFAULT NULL); -- stat table schema | statown VARCHAR2 DEFAULT NULL); -- stat table schema | ||
− | exec dbms_stats.export_table_stats(USER, 'servers', NULL, 'STAT_TAB', NULL, TRUE); | + | 예시) exec dbms_stats.export_table_stats(USER, 'servers', NULL, 'STAT_TAB', NULL, TRUE); |
+ | </source> | ||
+ | * 통계정보 입력 | ||
+ | <source lang=sql> | ||
dbms_stats.import_table_stats( | dbms_stats.import_table_stats( | ||
ownname VARCHAR2, | ownname VARCHAR2, | ||
28번째 줄: | 32번째 줄: | ||
force BOOLEAN DEFAULT FALSE); | force BOOLEAN DEFAULT FALSE); | ||
− | exec dbms_stats.import_table_stats(USER, 'servers', stattab=>'STAT_TAB'); | + | 예시) exec dbms_stats.import_table_stats(USER, 'servers', stattab=>'STAT_TAB'); |
</source> | </source> | ||
37번째 줄: | 41번째 줄: | ||
SQL> exec dbms_stats.create_stat_table('SCOTT','STATS'); | SQL> exec dbms_stats.create_stat_table('SCOTT','STATS'); | ||
</source> | </source> | ||
+ | |||
2. 원하는 table의 통계정보를 임시 table로 이관. | 2. 원하는 table의 통계정보를 임시 table로 이관. | ||
<source lang=sql> | <source lang=sql> | ||
42번째 줄: | 47번째 줄: | ||
</source> | </source> | ||
* 참고 (updated: 2010/08/03) | * 참고 (updated: 2010/08/03) | ||
− | "emp stats"로 중간에 space가 | + | "emp stats"로 중간에 space가 들어가면 에러발생함 |
+ | |||
<source lang=sql> | <source lang=sql> | ||
SQL> exec dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS','EMP_STATS',TRUE,'SCOTT'); | SQL> exec dbms_stats.export_table_stats('SCOTT','EMP',NULL,'STATS','EMP_STATS',TRUE,'SCOTT'); | ||
54번째 줄: | 60번째 줄: | ||
* 주의 (updated: 2010/08/03) | * 주의 (updated: 2010/08/03) | ||
− | STATS table의 데이터를 | + | STATS table의 데이터를 쿼리 해보면 EMP table의 원래 소유자인 SCOTT이 C5 column에 명시되어 있음. |
− | 두개의 DB의 계정이 동일하다면 변경해 줄 | + | 만약 다른 계정으로, 즉 SCOTT2 계정으로 통계정보를 옮기려면 STATS table의 SCOTT값을 SCOTT2로 update 해주어야 함. |
+ | 두개의 DB의 계정이 동일하다면 변경해 줄 필요 없음 | ||
</source> | </source> | ||
3. 임시 table을 export, 그리고 target db로 import. | 3. 임시 table을 export, 그리고 target db로 import. | ||
+ | |||
<source lang=sql> | <source lang=sql> | ||
$exp scott/tiger tables=STATS file=expstat.dmp | $exp scott/tiger tables=STATS file=expstat.dmp | ||
68번째 줄: | 76번째 줄: | ||
<source lang=sql> | <source lang=sql> | ||
SQL> exec dbms_stats.import_table_stats('SCOTT2','EMP2',NULL,'STATS'); | SQL> exec dbms_stats.import_table_stats('SCOTT2','EMP2',NULL,'STATS'); | ||
+ | </source> | ||
+ | |||
+ | 5. 통계정보 테이블 삭제 | ||
+ | <source lang=sql> | ||
+ | SQL> EXEC DBMS_STATS.DROP_STAT_TABLE('SCOTT2','STAT_TAB'); | ||
</source> | </source> |
2018년 11월 26일 (월) 16:34 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
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. 통계정보를 임시로 저장할 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의 데이터를 쿼리 해보면 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');
5. 통계정보 테이블 삭제
SQL> EXEC DBMS_STATS.DROP_STAT_TABLE('SCOTT2','STAT_TAB');