오라클에서 SQL 튜닝이나 배포 전 성능 테스트를 할 때,
반드시 챙겨야 할 두 가지는 바로 실행계획(Execution Plan)과 통계정보(Statistics)입니다.
오늘은 Oracle에서 자주 사용되는 패키지인
DBMS_SPM과 DBMS_STATS를 활용해
✅ 실행계획 백업 및 복원,
✅ 통계정보 백업 및 복원
을 어떻게 처리하면 되는지 실무 중심으로 정리해드릴게요.
🧩 1. Oracle 실행계획 백업 – DBMS_SPM 활용
✔️ A. 실행계획 캡처 (Cursor Cache → SQL Plan Baseline 등록)
EXEC DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id => 'f3t9xw8u5v7sn', plan_hash_value => NULL );
🔍 SQL_ID는 v$sql 뷰에서 검색할 수 있습니다.
✔️ B. 실행계획 Export (스테이징 테이블에 저장)
-- 스테이징 테이블 생성
EXEC DBMS_SPM.CREATE_STGTAB_BASELINE(table_name => 'SPM_PLAN_BACKUP');
-- 실행계획 백업
EXEC DBMS_SPM.PACK_STGTAB_BASELINE(table_name => 'SPM_PLAN_BACKUP');
✔️ C. 실행계획 Import (복원 시)
EXEC DBMS_SPM.UNPACK_STGTAB_BASELINE(table_name => 'SPM_PLAN_BACKUP');
📊 2. Oracle 통계정보 백업 – DBMS_STATS 활용
✔️ A. 통계 백업 (스키마/테이블 단위)
-- 전체 스키마 통계 백업
EXEC DBMS_STATS.EXPORT_SCHEMA_STATS('SCOTT', 'STATS_BACKUP_TAB');
-- 특정 테이블 통계 백업
EXEC DBMS_STATS.EXPORT_TABLE_STATS('SCOTT', 'EMP', 'STATS_BACKUP_TAB');
✔️ B. 통계 복원
-- 스키마 단위 복원
EXEC DBMS_STATS.IMPORT_SCHEMA_STATS('SCOTT', 'STATS_BACKUP_TAB');
-- 테이블 단위 복원
EXEC DBMS_STATS.IMPORT_TABLE_STATS('SCOTT', 'EMP', 'STATS_BACKUP_TAB');
✔️ C. 통계 자동 백업 복원 (날짜 기반)
-- 3일 전 통계 복원
EXEC DBMS_STATS.RESTORE_TABLE_STATS('SCOTT', 'EMP', SYSDATE - 3);
📎 정리
항목 | 백업 방법 | 복원 방법 |
실행계획 | DBMS_SPM.PACK_STGTAB_BASELINE | DBMS_SPM.UNPACK_STGTAB_BASELINE |
통계정보 | DBMS_STATS.EXPORT_*_STATS | DBMS_STATS.IMPORT_*_STATS or RESTORE_TABLE_STATS |
✅ 마무리 후기
Oracle에서 SQL 튜닝이나 운영환경 안정화를 위해서는
실행계획 고정 및 통계정보 보존은 반드시 체크해야 할 항목입니다.
특히 배포 전/후, 서버 이관, 통계 초기화 전,
잠깐의 백업이 나중에 수십 배의 복구 시간을 절약해줍니다.
💡 앞으로는 통계나 실행계획 건드리기 전, 꼭 백업부터 해보세요!
👉 위 스크립트는 DBA라면 꼭 알아두면 좋은 실전 팁입니다.