실제 경험한 바로 운영하는 DB 에서 통계정보가 변경되어질 경우 최악의 경우 슈퍼돔 사양의 RAC DB 라도 뻗을수도 있다는 사실을 앞선 시간에 언급하였다.
이런 최악의 경우를 경험하다 보니 통계정보를 관리하지 않을 경우 얼마나 위험한 상황이 닥치는지 깨닫게 되었고
그 이후부터는 크고 작던간에 어떠한 프로젝트이건 간에 개발DB 에서 사용하였던 통계정보를 그대로 운영DB로 이관하는 방향으로 정책을 삼고 있다.
심지어 신규테이블에 대해서도 통계정보의 이관을 정책으로 삼게 되었다.
아래는 일반테이블의 통계정보 이관 방법에 대해서 소개한다.
다음 시간에는 파티션 테이블의 통계정보 관리 방법 및 이관 방법에 대해서 소개하도록 하겠다.
1. 통계정보를 담을 백업 테이블 생성
exec dbms_stats.create_stat_table(ownname=>'SYSTEM',stattab=>'stats_backup',tblspace=>'USERS'); |
2. 신규테이블에 대해서 통계정보를 생성하기 전 통계정보 존재하는지 확인
해당 값이 NULL 이면 통계정보 생성이 안되어 있는 것임
SQL> select OWNER,TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from dba_tables 2 where table_name='EMP'; OWNER TABLE_NAME NUM_ROWS BLOCKS LAST_ANA --------------- -------------------- ---------- ---------- -------- SCOTT EMP |
3. 통계정보 생성
exec dbms_stats.gather_table_stats(ownname=>'SCOTT', tabname=>'EMP', method_opt=> 'FOR ALL COLUMNS', cascade=>true , degree=>8, granularity=>'ALL'); |
4. 테이블과 인덱스에 통계정보 존재하는지 확인
SQL> select OWNER,TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from dba_tables 2 where table_name='EMP'; OWNER TABLE_NAME NUM_ROWS BLOCKS LAST_ANA --------------- -------------------- ---------- ---------- -------- SCOTT EMP 14 5 SQL> select OWNER,INDEX_NAME,NUM_ROWS,LAST_ANALYZED from dba_indexes where INDEX_NAME='PK_EMP'; OWNER INDEX_NAME NUM_ROWS LAST_ANALYZED --------------------- ------------------------------ ----------- --------------- SCOTT PK_EMP 14 |
5. 생성된 통계정보를 운영DB에 import 하기위해 export 실행
EXEC DBMS_STATS.EXPORT_TABLE_STATS (OWNNAME=>'SCOTT', TABNAME=>'EMP', STATTAB=> 'STATS_BACKUP', STATID=> 'STATS_BACKUP',STATOWN=>'SYSTEM', cascade=>true); |
6. 백업된 테이블을 EXPORT 실행
> exp userid=system/manager file=./exp_stats_backu p.dmp log=./exp_stats_backup.log tables=system.stats_backup Export: Release 10.2.0.1.0 - Production on 금 12월 12 Copyright (c) 1982, 2005, Oracle. All rights reserved. 다음에 접속됨: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produ ction With the Partitioning, OLAP and Data Mining options 지정된 테이블을 엑스포트하려고 합니다 via 규정 경로... . . 테이블 STATS_BACKUP(를)을 엑스포트 중 73 행이 엑스 포트됨 엑스포트가 경고 없이 정상적으로 종료되었습니다. |
7. FTP 로 DUMP 파일 운영DB 로 전송
8. 백업된 테이블을 운영DB 에서 IMPORT 실행
>imp userid=system/manager file=exp_stats_backup. dmp log=imp_stats_backup.log fromuser=system Import: Release 10.2.0.1.0 - Production on 금 12월 12 Copyright (c) 1982, 2005, Oracle. All rights reserved. 다음에 접속됨: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produ ction With the Partitioning, OLAP and Data Mining options . SYSTEM 객체를 SYSTEM(으)로 임포트하는 중입니다 . SYSTEM 객체를 SYSTEM(으)로 임포트하는 중입니다 . . 테이블 "STATS_BACKUP"(를)을 임포트 중 73 행이 임포트 되었습니다 임포트가 경고 없이 정상적으로 종료되었습니다. |
9. IMPORT 한 통계정보 테이블에서 EMP 테이블의 통계정보를 IMPORT 한다. .
EXEC DBMS_STATS.IMPORT_TABLE_STATS (OWNNAME=>'SCOTT', TABNAME=>'EMP', STATTAB=> 'STATS_BACKUP', STATID=> 'STATS_BACKUP',STATOWN=>'SYSTEM', cascade=>true); |
10. 테이블과 인덱스에 통계정보 이관었는지 확인
SQL> select OWNER,TABLE_NAME,NUM_ROWS,BLOCKS,LAST_ANALYZED from dba_tables 2 where table_name='EMP'; OWNER TABLE_NAME NUM_ROWS BLOCKS LAST_ANA --------------- -------------------- ---------- ---------- -------- SCOTT EMP 14 5 SQL> select OWNER,INDEX_NAME,NUM_ROWS,LAST_ANALYZED from dba_indexes where INDEX_NAME='PK_EMP'; OWNER INDEX_NAME NUM_ROWS LAST_ANALYZED --------------------- ------------------------------ ----------- --------------- SCOTT PK_EMP 14 |