실제 경험한 바로 운영하는 DB 에서 통계정보가 변경되어질  경우 최악의 경우 슈퍼돔 사양의 RAC DB 라도 뻗을수도 있다는 사실을 앞선 시간에 언급하였다.

이런 최악의 경우를 경험하다 보니 통계정보를 관리하지 않을 경우 얼마나 위험한 상황이 닥치는지 깨닫게 되었고

그 이후부터는 크고 작던간에 어떠한 프로젝트이건 간에 개발DB 에서 사용하였던 통계정보를 그대로 운영DB로 이관하는 방향으로 정책을 삼고 있다.

심지어 신규테이블에 대해서도 통계정보의 이관을 정책으로 삼게 되었다.

아래는 일반테이블의 통계정보 이관 방법에 대해서 소개한다.

다음 시간에는 파티션 테이블의 통계정보 관리 방법 및 이관 방법에 대해서 소개하도록 하겠다.

 

 

■ 통계정보를 생성에는 2가지 방법이 있다.
 
첫째 ANALYZE 사용과
둘째 DBMS_STATS 패키지 사용  (오라클 8i 버전에서 새롭게 추가된 DBMS_STATS 패키지를 사용하는 방법)
의 두가지 방법이 있는데
오라클에서는 DBMS_STATS 패키지 사용을 권고한다.
 
■ DBMS_STATS 를 사용하면 좋은 점
 
- PARALLEL 을 사용할수 있다.
- 현재시점의 통계정보를 백업 하고 RECOVERY 할수 있다. (통계정보 이관시 사용한다) 
 
■  통계정보 이관 방법 (서로 다른 서버일 경우)
 

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 2008/12/12 09:59:23

 

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       2008/12/12 09:59:23

 

 

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 10:13:36 2008

 

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 10:25:00 2008

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 2008/12/12 09:59:23

 

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       2008/12/12 09:59:23