DBA

개인 학습, 작업 기록용입니다. 올바르지 않은 정보가 있다면 댓글주시면 감사하겠습니다!

DATABASE/Oracle

[Oracle] 통계정보 백업 및 복구, 자동통계정보 수집 기능 비활성화

DBnA 2023. 11. 14. 17:04
--테이블 자동통계정보 수집 기능 테이블 단위 비활성화 
begin
 DBMS_STATS.LOCK_TABLE_STATS('TEST_USER','TBL_PRICE');
end;

--테이블 통계잠금해제
begin
 DBMS_STATS.UNLOCK_TABLE_STATS('TEST_USER','TBL_PRICE');
end;




-- 통계정보 확인
select table_name, num_rows, blocks, empty_blocks, chain_cnt, avg_row_len, stale_stats, last_analyzed, sample_size
  from user_tab_statistics
  where table_name = 'XTMP_MBER';

select index_name, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key, avg_data_blocks_per_key, clustering_factor
  from user_ind_statistics
 where table_name = 'XTMP_MBER';

select column_name, num_distinct, density, num_buckets
  from user_tab_col_statistics
 where table_name = 'XTMP_MBER';
 
 
 
--****통계정보 백업
--통계정보 백업용 테이블 생성
begin  
  dbms_stats.create_stat_table('DBENURI','XTMP_STAT_BACK');
end;

--테이블 통계정보 백업 : 테이블 단위 백업시 테이블, 인덱스, 컬럼 전부 백업됨
--컬럼, 인덱스 개별로 백업 가능 (dbms_stats.export_column_stats, dbms_stats.export_index_stats)
begin
  dbms_stats.export_table_stats(OWNNAME=> 'TEST_USER',tabname=>'XTMP_MBER', stattab=>'XTMP_STAT_BACK');
end;



--통계정보 백업 -- 테이블 단위 복구시 컬럼, 테이블, 인덱스 전부 복구됨
-- 특정 인덱스, 컬럼만 복구하려면 import_column_stats, import_index_stats
begin
  dbms_stats.import_table_stats(OWNNAME=> 'TEST_USER',tabname=>'XTMP_MBER', stattab=>'XTMP_STAT_BACK');
end;

--통계정보 변경이력 확인
select * from USER_TAB_STATS_HISTORY;

 

 

위에서 백업받은 내용을 바탕으로 통계변경 및 복구 테스트 진행

--*******************
--통계변경 테스트
--********************
--1.테이블 통계 변경
begin 
  dbms_stats.set_table_stats(ownname => 'TEST_USER', tabname=>'XTMP_MBER', numrows=>'1');
end;

--2.컬럼 통계 변경
begin 
  dbms_stats.set_column_stats(ownname => 'TEST_USER', 
  tabname=>'XTMP_MBER', colname => 'FACTR_NO', distcnt=>1);
end;

--3.인덱스 통계 변경
begin 
  dbms_stats.set_index_stats(ownname => 'TEST_USER',indname=>'PK_XTMP_MBER',numdist=>1);
end;

--복구 
begin
  dbms_stats.import_table_stats(OWNNAME=> 'TEST_USER',tabname=>'XTMP_MBER', stattab=>'XTMP_STAT_BACK');
end;