운영중에 원본테이블을 두고 CTAS 등으로 새로운 테이블을 만들어서 작업을 해야할 때가있습니다. 저의 경우에는 임시테이블에 작업 후에 원본과 RENAME하여 원본테이블과 바꿔치기하는 작업까지 해야했는데, 이때 크기가 큰 테이블의 경우에는 통계정보 수집시에 시간이 오래걸리고, 기존 원본 테이블에는 통계정보가 있는 경우, 통계정보의 export/import 기능을 사용하여 통계정보의 복사가 가능합니다.
이름이 다른경우에는 import를 하더라도 통계정보가 이식되지 않고 , 통계정보를 export받은 테이블을 update로 이름을 바꿔줘야 됩니다.
참고한 자료로는 아래의 SR입니다. 아래 SR은 스키마까지 변경될 때를 나타내었지만 저는 동일스키마로 진행하였습니다. 2701368.1.How To Transfer Statistics To Different Schemas and Tables and Indexes and Partition and Columns
시나리오를 통해 정리하겠습니다.
시나리오.
1.원본 테이블(Range Partition)테이블의 임시테이블(Range Partition) 생성
2.테이블들의 통계정보 확인
3.원본테이블의 통계정보 export
4.export 받은 통계정보 수정(update)
5.임시테이블에 통계정보 import
6. 테이블들의 통계정보 확인
1.원본 테이블(Range Partition)테이블의 임시테이블(Range Partition) 생성
원본테이블_IMSI로 임시의 파티션테이블을 생성합니다. 이때 원본테이블과 다르게 컬럼이 추가되었다는 설정으로 3개의 컬럼을 추가합니다.
INDEX와 PK는 모두 원본테이블과 동일한 구조로 생성합니다.
CREATE TABLE DEV.ORD_RANGE_IMSI
(
ORD_NO NUMBER(10) NOT NULL,
ORD_YM VARCHAR2(6) NOT NULL,
ORD_DT VARCHAR2(8),
ORD_HMS VARCHAR2(6),
SHOP_NO VARCHAR2(10),
UPPER2 VARCHAR2(2),
UPPER_CASE VARCHAR2(10),
LOWER_CASE VARCHAR2(10),
ALPHABET VARCHAR2(400),
ALPHABET_NUMERIC VARCHAR2(400),
ADD_COL NUMBER(10), ---원본과 다르게 추가된 컬럼
ADD_COL2 VARCHAR2(10), ---원본과 다르게 추가된 컬럼
ADD_COL3 VARCHAR2(100) ---원본과 다르게 추가된 컬럼
)
TABLESPACE MY_DATA
NOLOGGING
PARTITION BY RANGE (ORD_YM)
(
PARTITION P201201 VALUES LESS THAN ('201202'),
PARTITION P201202 VALUES LESS THAN ('201203'),
PARTITION P201203 VALUES LESS THAN ('201204'),
PARTITION P201204 VALUES LESS THAN ('201205'),
PARTITION P201205 VALUES LESS THAN ('201206'),
PARTITION P201206 VALUES LESS THAN ('201207'),
PARTITION P201207 VALUES LESS THAN ('201208'),
PARTITION P201208 VALUES LESS THAN ('201209'),
PARTITION P201209 VALUES LESS THAN ('201210'),
PARTITION P201210 VALUES LESS THAN ('201211'),
PARTITION P201211 VALUES LESS THAN ('201212'),
PARTITION P201212 VALUES LESS THAN ('201213'),
PARTITION P201301 VALUES LESS THAN ('201302'),
PARTITION P201302 VALUES LESS THAN ('201303'),
PARTITION P201303 VALUES LESS THAN ('201304'),
PARTITION P201304 VALUES LESS THAN ('201305'),
PARTITION P201305 VALUES LESS THAN ('201306'),
PARTITION P201306 VALUES LESS THAN ('201307'),
PARTITION P201307 VALUES LESS THAN ('201308'),
PARTITION P201308 VALUES LESS THAN ('201309'),
PARTITION P201309 VALUES LESS THAN ('201310'),
PARTITION P201310 VALUES LESS THAN ('201311'),
PARTITION P201311 VALUES LESS THAN ('201312'),
PARTITION P201312 VALUES LESS THAN ('201313'),
PARTITION P_DEFAULT VALUES LESS THAN (MAXVALUE)
);
CREATE UNIQUE INDEX DEV.ORD_RANGE_IMSI_PK
ON DEV.ORD_RANGE_IMSI (ORD_NO,ORD_YM)
LOCAL;
CREATE INDEX DEV.ORD_RANGE_IMSI_X01
ON DEV.ORD_RANGE_IMSI (ORD_DT,ORD_HMS)
LOCAL;
CREATE INDEX DEV.ORD_RANGE_IMSI_X02
ON DEV.ORD_RANGE_IMSI (SHOP_NO,UPPER2)
TABLESPACE MY_DATA;
ALTER TABLE DEV.ORD_RANGE_IMSI
ADD CONSTRAINT ORD_RANGE_IMSI_PK PRIMARY KEY (ORD_NO,ORD_YM);
2.테이블들의 통계정보 확인
테이블의 통계정보를 확인결과 새로 생성한 임시테이블에는 null로 값이 없습니다.
SQL> select table_name,partition_name,NUM_ROWS,BLOCKS,AVG_ROW_LEN,LAST_ANALYZED From dba_tab_partitions where table_name in ('ORD_RANGE','ORD_RANGE_IMSI')
order by 1;
TABLE_NAME PARTITION_NAME NUM_ROWS BLOCKS AVG_ROW_LEN LAST_ANALYZED
-------------------- ------------------ --------- --------- ----------- --------------------
ORD_RANGE P201210 624770 14676 162 2023/07/06 22:05:20
ORD_RANGE P201209 623608 14649 162 2023/07/06 22:05:13
ORD_RANGE P201212 626477 14716 162 2023/07/06 22:05:34
ORD_RANGE P201301 624595 14672 162 2023/07/06 22:05:41
ORD_RANGE P201302 624556 14671 162 2023/07/06 22:05:48
ORD_RANGE P201303 626941 14727 162 2023/07/06 22:05:54
ORD_RANGE P201304 625107 14684 162 2023/07/06 22:06:01
ORD_RANGE P201305 625046 14682 162 2023/07/06 22:06:08
ORD_RANGE P201306 626169 14709 162 2023/07/06 22:06:14
ORD_RANGE P201307 625381 14690 162 2023/07/06 22:06:21
ORD_RANGE P201308 625043 14682 162 2023/07/06 22:06:28
ORD_RANGE P201309 624483 14669 162 2023/07/06 22:06:35
ORD_RANGE P201310 626386 14714 162 2023/07/06 22:06:42
ORD_RANGE P201311 624018 14659 162 2023/07/06 22:06:48
ORD_RANGE P201312 624828 14677 162 2023/07/06 22:06:55
ORD_RANGE P_DEFAULT
ORD_RANGE P201211 625167 14685 162 2023/07/06 22:05:27
ORD_RANGE P201208 623940 12849 162 2023/07/06 22:04:50
ORD_RANGE P201207 624361 12850 162 2023/07/06 22:04:44
ORD_RANGE P201206 624187 12824 162 2023/07/06 22:04:37
ORD_RANGE P201205 624403 14673 162 2023/07/06 22:07:02
ORD_RANGE P201204 624633 12832 162 2023/11/24 22:07:43
ORD_RANGE P201203 625150 14688 162 2023/11/24 22:07:49
ORD_RANGE P201202 625594 14704 161 2023/11/24 22:07:52
ORD_RANGE P201201 625157 14688 161 2023/11/24 22:07:46
ORD_RANGE_IMSI P201210
ORD_RANGE_IMSI P201201
ORD_RANGE_IMSI P201212
ORD_RANGE_IMSI P201301
ORD_RANGE_IMSI P201302
ORD_RANGE_IMSI P201303
ORD_RANGE_IMSI P201304
ORD_RANGE_IMSI P201305
ORD_RANGE_IMSI P201306
ORD_RANGE_IMSI P201307
ORD_RANGE_IMSI P201308
ORD_RANGE_IMSI P201309
ORD_RANGE_IMSI P201310
ORD_RANGE_IMSI P201311
ORD_RANGE_IMSI P201312
ORD_RANGE_IMSI P_DEFAULT
ORD_RANGE_IMSI P201209
ORD_RANGE_IMSI P201208
ORD_RANGE_IMSI P201207
ORD_RANGE_IMSI P201206
ORD_RANGE_IMSI P201205
ORD_RANGE_IMSI P201204
ORD_RANGE_IMSI P201203
ORD_RANGE_IMSI P201202
ORD_RANGE_IMSI P201211
50 rows selected.
인덱스는 새로 생성시 통계정보가 새로 모아지는 것을 확인할 수 있었습니다.(last_analyzed 시간이 생성시의 시간)
SQL> select INDEX_NAME,TABLE_NAME,STATUS,NUM_ROWS,LAST_ANALYZED From dba_indexes
where table_name in ('ORD_RANGE','ORD_RANGE_IMSI');
INDEX_NAME TABLE_NAME STATUS NUM_ROWS LAST_ANALYZED
----------------------- ---------------------- -------- --------- --------------------
ORD_RANGE_PK ORD_RANGE N/A 14954886 2023/11/24 22:01:16
ORD_RANGE_X02 ORD_RANGE UNUSABLE 15000000 2023/06/01 18:14:24
ORD_RANGE_X01 ORD_RANGE N/A 15165475 2022/05/03 22:00:46
ORD_RANGE_IMSI_PK ORD_RANGE_IMSI N/A 0 2023/12/13 15:45:01
ORD_RANGE_IMSI_X01 ORD_RANGE_IMSI N/A 0 2023/12/13 15:45:02
ORD_RANGE_IMSI_X02 ORD_RANGE_IMSI VALID 0 2023/12/13 15:45:03
컬럼
SQL> select table_name,column_name, num_distinct, histogram, num_buckets, to_char(last_analyzed,'YYYY-MM-DD hh24:mi:ss')
from user_tab_cols where table_name in ('ORD_RANGE_IMSI','ORD_RANGE')
order by 1;
TABLE_NAME COLUMN_NAME NUM_DISTINCT HISTOGRAM NUM_BUCKETS TO_CHAR(LAST_ANALYZED,'YYYY-MM-DDHH24:MI:SS')
---------------------- ------------------------- ------------ --------------- ----------- ---------------------------------------------
ORD_RANGE ORD_NO 14916608 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_YM 24 FREQUENCY 24 2023-11-24 22:00:36
ORD_RANGE ORD_DT 730 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_HMS 50324 NONE 1 2023-11-24 22:00:36
ORD_RANGE SHOP_NO 200 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER2 676 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER_CASE 14973952 NONE 1 2023-11-24 22:00:36
ORD_RANGE LOWER_CASE 14976000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ALPHABET 15000000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ALPHABET_NUMERIC 0 NONE 0 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_NO NONE
ORD_RANGE_IMSI ORD_YM NONE
ORD_RANGE_IMSI ORD_DT NONE
ORD_RANGE_IMSI ORD_HMS NONE
ORD_RANGE_IMSI SHOP_NO NONE
ORD_RANGE_IMSI UPPER2 NONE
ORD_RANGE_IMSI UPPER_CASE NONE
ORD_RANGE_IMSI LOWER_CASE NONE
ORD_RANGE_IMSI ALPHABET NONE
ORD_RANGE_IMSI ALPHABET_NUMERIC NONE
ORD_RANGE_IMSI ADD_COL NONE
ORD_RANGE_IMSI ADD_COL2 NONE
ORD_RANGE_IMSI ADD_COL3 NONE
3.원본테이블의 통계정보 export
통계정보저장용 테이블 생성합니다.
exec dbms_stats.create_stat_table('DEV','STATS_ORD_RANGE','USERS');
원본테이블의 통계정보를 export합니다
exec DBMS_STATS.EXPORT_TABLE_STATS(ownname => 'DEV', tabname=> 'ORD_RANGE',STATTAB => 'STATS_ORD_RANGE', statown => 'DEV',CASCADE => TRUE);
테이블의 내용을 확인합니다.
테이블 조회한 결과입니다. TYPE별로 Table인경우 T,Index의 경우 I,Column의 경우는 C가 보이고 값들이 보입니다.
SQL> select type,c1,c2,c4,c5,n1,n2,n3,n4,n5 from DEV.STATS_ORD_RANGE;
TYPE C1 C2 C4 C5 N1 N2 N3 N4 N5
---- ------------------- -------------- --------------- -------- --------- --------- --------- --------- ---------
T ORD_RANGE P201201 DEV 625157 14688 161 625157
...
I ORD_RANGE_PK P201201 DEV 625157 1924 625157 1 1
I ORD_RANGE_PK P201202 DEV 625594 1962 625594 1 1
...
I ORD_RANGE_X02 ORD_RANGE DEV 15000000 52265 135200 1 110
I ORD_RANGE_X01 P201201 DEV 0 0 0 0 0
...
C ORD_RANGE P201201 ORD_NO DEV 625157 1.6e-006 625157 625157 0
C ORD_RANGE P201202 ORD_NO DEV 625594 1.6e-006 625594 625594 0
C ORD_RANGE P201203 ORD_NO DEV 625150 1.6e-006 625150 625150 0
C ORD_RANGE P201204 ORD_NO DEV 624633 1.6e-006 624633 624633 0
C ORD_RANGE P201205 ORD_NO DEV 624403 1.6e-006 624403 624403 0
C ORD_RANGE P201206 ORD_NO DEV 624187 1.6e-006 624187 624187 0
C ORD_RANGE P201207 ORD_NO DEV 620800 1.6e-006 620800 624361 0
C ORD_RANGE P201208 ORD_NO DEV 613248 1.6e-006 613248 623940 0
C ORD_RANGE P201209 ORD_NO DEV 620928 1.6e-006 620928 623608 0
C ORD_RANGE P201210 ORD_NO DEV 624770 1.6e-006 624770 624770 0
C ORD_RANGE P201211 ORD_NO DEV 625167 1.6e-006 625167 625167 0
C ORD_RANGE P201212 ORD_NO DEV 625024 1.6e-006 625024 626477 0
C ORD_RANGE P201301 ORD_NO DEV 618816 1.6e-006 618816 624595 0
C ORD_RANGE P201302 ORD_NO DEV 624556 1.6e-006 624556 624556 0
C ORD_RANGE P201303 ORD_NO DEV 626941 1.6e-006 626941 626941 0
C ORD_RANGE P201304 ORD_NO DEV 623936 1.6e-006 623936 625107 0
C ORD_RANGE P201305 ORD_NO DEV 625046 1.6e-006 625046 625046 0
C ORD_RANGE P201306 ORD_NO DEV 623616 1.6e-006 623616 626169 0
C ORD_RANGE P201307 ORD_NO DEV 619200 1.6e-006 619200 625381 0
C ORD_RANGE P201308 ORD_NO DEV 625043 1.6e-006 625043 625043 0
C ORD_RANGE P201309 ORD_NO DEV 622784 1.6e-006 622784 624483 0
C ORD_RANGE P201310 ORD_NO DEV 619136 1.6e-006 619136 626386 0
C ORD_RANGE P201311 ORD_NO DEV 620992 1.6e-006 620992 624018 0
C ORD_RANGE P201312 ORD_NO DEV 624828 1.6e-006 624828 624828 0
4.export 받은 통계정보 수정(update) (중요!★ ★ ★ ★ ★ ★)
이 테이블에서 C1이 object 이름인것을 확인할 수 있습니다. 이 정보를 새로운테이블(임시테이블) 이름으로 update해줍니다.
1) 테이블 정보에 테이블명 변경
UPDATE STATS_ORD_RANGE SET C1 = 'ORD_RANGE_IMSI'
WHERE C1 = 'ORD_RANGE'
AND TYPE='T';
2)컬럼정보에 테이블명 변경
UPDATE STATS_ORD_RANGE SET C1 = 'ORD_RANGE_IMSI'
WHERE C1 = 'ORD_RANGE'
AND TYPE='C';
3)인덱스정보에 인덱스명 변경
UPDATE STATS_ORD_RANGE SET C1 = 'ORD_RANGE_IMSI_PK'
WHERE C1 = 'ORD_RANGE_PK'
AND TYPE='I';
UPDATE STATS_ORD_RANGE SET C1 = 'ORD_RANGE_IMSI_X01'
WHERE C1 = 'ORD_RANGE_X01'
AND TYPE='I';
UPDATE STATS_ORD_RANGE SET C1 = 'ORD_RANGE_IMSI_X02'
WHERE C1 = 'ORD_RANGE_X02'
AND TYPE='I';
commit;
5.임시테이블에 통계정보 import
exec DBMS_STATS.IMPORT_TABLE_STATS(ownname => 'DEV', tabname=> 'ORD_RANGE_IMSI',STATTAB => 'STATS_ORD_RANGE', statown => 'DEV',CASCADE => TRUE);
6. 테이블들의 통계정보 확인
테이블
SQL> select table_name,partition_name,NUM_ROWS,BLOCKS,AVG_ROW_LEN,LAST_ANALYZED From dba_tab_partitions where table_name in ('ORD_RANGE','ORD_RANGE_IMSI')
order by 1;
TABLE_NAME PARTITION_NAME NUM_ROWS BLOCKS AVG_ROW_LEN LAST_ANALYZED
-------------------- ------------------------------ --------- ----------- --------------------
ORD_RANGE P201210 624770 14676 162 2023/07/06 22:05:20
ORD_RANGE P201209 623608 14649 162 2023/07/06 22:05:13
ORD_RANGE P201212 626477 14716 162 2023/07/06 22:05:34
ORD_RANGE P201301 624595 14672 162 2023/07/06 22:05:41
ORD_RANGE P201302 624556 14671 162 2023/07/06 22:05:48
ORD_RANGE P201303 626941 14727 162 2023/07/06 22:05:54
ORD_RANGE P201304 625107 14684 162 2023/07/06 22:06:01
ORD_RANGE P201305 625046 14682 162 2023/07/06 22:06:08
ORD_RANGE P201306 626169 14709 162 2023/07/06 22:06:14
ORD_RANGE P201307 625381 14690 162 2023/07/06 22:06:21
ORD_RANGE P201308 625043 14682 162 2023/07/06 22:06:28
ORD_RANGE P201309 624483 14669 162 2023/07/06 22:06:35
ORD_RANGE P201310 626386 14714 162 2023/07/06 22:06:42
ORD_RANGE P201311 624018 14659 162 2023/07/06 22:06:48
ORD_RANGE P201312 624828 14677 162 2023/07/06 22:06:55
ORD_RANGE P_DEFAULT
ORD_RANGE P201211 625167 14685 162 2023/07/06 22:05:27
ORD_RANGE P201208 623940 12849 162 2023/07/06 22:04:50
ORD_RANGE P201207 624361 12850 162 2023/07/06 22:04:44
ORD_RANGE P201206 624187 12824 162 2023/07/06 22:04:37
ORD_RANGE P201205 624403 14673 162 2023/07/06 22:07:02
ORD_RANGE P201204 624633 12832 162 2023/11/24 22:07:43
ORD_RANGE P201203 625150 14688 162 2023/11/24 22:07:49
ORD_RANGE P201202 625594 14704 161 2023/11/24 22:07:52
ORD_RANGE P201201 625157 14688 161 2023/11/24 22:07:46
ORD_RANGE_IMSI P201210 624770 14676 162 2023/07/06 22:05:20
ORD_RANGE_IMSI P201201 625157 14688 161 2023/11/24 22:07:46
ORD_RANGE_IMSI P201212 626477 14716 162 2023/07/06 22:05:34
ORD_RANGE_IMSI P201301 624595 14672 162 2023/07/06 22:05:41
ORD_RANGE_IMSI P201302 624556 14671 162 2023/07/06 22:05:48
ORD_RANGE_IMSI P201303 626941 14727 162 2023/07/06 22:05:54
ORD_RANGE_IMSI P201304 625107 14684 162 2023/07/06 22:06:01
ORD_RANGE_IMSI P201305 625046 14682 162 2023/07/06 22:06:08
ORD_RANGE_IMSI P201306 626169 14709 162 2023/07/06 22:06:14
ORD_RANGE_IMSI P201307 625381 14690 162 2023/07/06 22:06:21
ORD_RANGE_IMSI P201308 625043 14682 162 2023/07/06 22:06:28
ORD_RANGE_IMSI P201309 624483 14669 162 2023/07/06 22:06:35
ORD_RANGE_IMSI P201310 626386 14714 162 2023/07/06 22:06:42
ORD_RANGE_IMSI P201311 624018 14659 162 2023/07/06 22:06:48
ORD_RANGE_IMSI P201312 624828 14677 162 2023/07/06 22:06:55
ORD_RANGE_IMSI P_DEFAULT
ORD_RANGE_IMSI P201209 623608 14649 162 2023/07/06 22:05:13
ORD_RANGE_IMSI P201208 623940 12849 162 2023/07/06 22:04:50
ORD_RANGE_IMSI P201207 624361 12850 162 2023/07/06 22:04:44
ORD_RANGE_IMSI P201206 624187 12824 162 2023/07/06 22:04:37
ORD_RANGE_IMSI P201205 624403 14673 162 2023/07/06 22:07:02
ORD_RANGE_IMSI P201204 624633 12832 162 2023/11/24 22:07:43
ORD_RANGE_IMSI P201203 625150 14688 162 2023/11/24 22:07:49
ORD_RANGE_IMSI P201202 625594 14704 161 2023/11/24 22:07:52
ORD_RANGE_IMSI P201211 625167 14685 162 2023/07/06 22:05:27
인덱스
SQL> select INDEX_NAME,TABLE_NAME,STATUS,NUM_ROWS,LAST_ANALYZED From dba_indexes
where table_name in ('ORD_RANGE','ORD_RANGE_IMSI');
INDEX_NAME TABLE_NAME STATUS NUM_ROWS LAST_ANALYZED
------------------------- ------------------------- -------- --------- --------------------
ORD_RANGE_PK ORD_RANGE N/A 14954886 2023/11/24 22:01:16
ORD_RANGE_X02 ORD_RANGE UNUSABLE 15000000 2023/06/01 18:14:24
ORD_RANGE_X01 ORD_RANGE N/A 15165475 2022/05/03 22:00:46
ORD_RANGE_IMSI_PK ORD_RANGE_IMSI N/A 14954886 2023/11/24 22:01:16
ORD_RANGE_IMSI_X01 ORD_RANGE_IMSI N/A 15165475 2022/05/03 22:00:46
ORD_RANGE_IMSI_X02 ORD_RANGE_IMSI VALID 15000000 2023/06/01 18:14:24
컬럼
SQL> select table_name,column_name, num_distinct, histogram, num_buckets, to_char(last_analyzed,'YYYY-MM-DD hh24:mi:ss')
from user_tab_cols where table_name in ('ORD_RANGE_IMSI','ORD_RANGE')
order by 1;
TABLE_NAME COLUMN_NAME NUM_DISTINCT HISTOGRAM NUM_BUCKETS TO_CHAR(LAST_ANALYZED,'YYYY-MM-DDHH24:MI:SS')
--------------------- ------------------------- ------------ --------------- ----------- ---------------------------------------------
ORD_RANGE ORD_NO 14916608 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_YM 24 FREQUENCY 24 2023-11-24 22:00:36
ORD_RANGE ORD_DT 730 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_HMS 50324 NONE 1 2023-11-24 22:00:36
ORD_RANGE SHOP_NO 200 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER2 676 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER_CASE 14973952 NONE 1 2023-11-24 22:00:36
ORD_RANGE LOWER_CASE 14976000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ALPHABET 15000000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ALPHABET_NUMERIC 0 NONE 0 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_NO 14916608 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_YM 24 FREQUENCY 24 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_DT 730 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_HMS 50324 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI SHOP_NO 200 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI UPPER2 676 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI UPPER_CASE 14973952 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI LOWER_CASE 14976000 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ALPHABET 15000000 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ALPHABET_NUMERIC 0 NONE 0 2023-11-24 22:00:36
ORD_RANGE_IMSI ADD_COL NONE
ORD_RANGE_IMSI ADD_COL2 NONE
ORD_RANGE_IMSI ADD_COL3 NONE
추가된 컬럼 제외하고 원본테이블과 통계정보가 동일하게 된것을 확인할 수 있습니다.
사용한 통계테이블을 삭제합니다.
exec DBMS_STATS.DROP_STAT_TABLE(ownname => 'DEV',stattab => 'STATS_ORD_RANGE');
끝.
++)추가사항
다음날 확인해보니 추가한 3개컬럼에 대해서 2023-12-14일 22:07:40분에 통계정보가 최신으로 업데이트가 되었습니다.
SQL> select table_name,column_name, num_distinct, histogram, num_buckets, to_char(last_analyzed,'YYYY-MM-DD hh24:mi:ss')
from user_tab_cols where table_name in ('ORD_RANGE_IMSI','ORD_RANGE')
order by 1,2;
TABLE_NAME COLUMN_NAME NUM_DISTINCT HISTOGRAM NUM_BUCKETS TO_CHAR(LAST_ANALYZED,'YYYY-MM-DDHH24:MI:SS')
--------------------- ---------------------- ------------ --------------- ----------- ---------------------------------------------
ORD_RANGE ALPHABET 15000000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ALPHABET_NUMERIC 0 NONE 0 2023-11-24 22:00:36
ORD_RANGE LOWER_CASE 14976000 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_DT 730 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_HMS 50324 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_NO 14916608 NONE 1 2023-11-24 22:00:36
ORD_RANGE ORD_YM 24 FREQUENCY 24 2023-11-24 22:00:36
ORD_RANGE SHOP_NO 200 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER2 676 NONE 1 2023-11-24 22:00:36
ORD_RANGE UPPER_CASE 14973952 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ADD_COL 0 NONE 0 2023-12-14 22:07:40
ORD_RANGE_IMSI ADD_COL2 0 NONE 0 2023-12-14 22:07:40
ORD_RANGE_IMSI ADD_COL3 0 NONE 0 2023-12-14 22:07:40
ORD_RANGE_IMSI ALPHABET 15000000 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ALPHABET_NUMERIC 0 NONE 0 2023-11-24 22:00:36
ORD_RANGE_IMSI LOWER_CASE 14976000 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_DT 730 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_HMS 50324 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_NO 14916608 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI ORD_YM 24 FREQUENCY 24 2023-11-24 22:00:36
ORD_RANGE_IMSI SHOP_NO 200 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI UPPER2 676 NONE 1 2023-11-24 22:00:36
ORD_RANGE_IMSI UPPER_CASE 14973952 NONE 1 2023-11-24 22:00:36
dba_tables를 확인해보니 동일한 날짜로 업데이트가 되었습니다.
SQL> select table_name,num_rows,blocks,last_analyzed From dba_tables where table_name in ('ORD_RANGE_IMSI','ORD_RANGE');
TABLE_NAME NUM_ROWS BLOCKS LAST_ANALYZED
----------------------- --------- --------- --------------------
ORD_RANGE 15000000 345100 2023/11/24 22:01:14
ORD_RANGE_IMSI 0 0 2023/12/14 22:07:40
파티션테이블들은 새로 업데이트되지않고 원본과 동일한 정보를 그대로 가지고 있습니다.
추가된 컬럼에 대해서는 자동으로 그것만 통계정보를 수집해주니 크게 걱정하지 않아도 되겠네요.
SQL> select table_name,partition_name,NUM_ROWS,BLOCKS,AVG_ROW_LEN,LAST_ANALYZED From dba_tab_partitions where table_name in ('ORD_RANGE','ORD_RANGE_IMSI')
order by 1,2;
TABLE_NAME PARTITION_NAME NUM_ROWS BLOCKS AVG_ROW_LEN LAST_ANALYZED
---------------------- ---------------------- --------- --------- ----------- --------------------
ORD_RANGE P201201 625157 14688 161 2023/11/24 22:07:46
ORD_RANGE P201202 625594 14704 161 2023/11/24 22:07:52
ORD_RANGE P201203 625150 14688 162 2023/11/24 22:07:49
ORD_RANGE P201204 624633 12832 162 2023/11/24 22:07:43
ORD_RANGE P201205 624403 14673 162 2023/07/06 22:07:02
ORD_RANGE P201206 624187 12824 162 2023/07/06 22:04:37
ORD_RANGE P201207 624361 12850 162 2023/07/06 22:04:44
ORD_RANGE P201208 623940 12849 162 2023/07/06 22:04:50
ORD_RANGE P201209 623608 14649 162 2023/07/06 22:05:13
ORD_RANGE P201210 624770 14676 162 2023/07/06 22:05:20
ORD_RANGE P201211 625167 14685 162 2023/07/06 22:05:27
ORD_RANGE P201212 626477 14716 162 2023/07/06 22:05:34
ORD_RANGE P201301 624595 14672 162 2023/07/06 22:05:41
ORD_RANGE P201302 624556 14671 162 2023/07/06 22:05:48
ORD_RANGE P201303 626941 14727 162 2023/07/06 22:05:54
ORD_RANGE P201304 625107 14684 162 2023/07/06 22:06:01
ORD_RANGE P201305 625046 14682 162 2023/07/06 22:06:08
ORD_RANGE P201306 626169 14709 162 2023/07/06 22:06:14
ORD_RANGE P201307 625381 14690 162 2023/07/06 22:06:21
ORD_RANGE P201308 625043 14682 162 2023/07/06 22:06:28
ORD_RANGE P201309 624483 14669 162 2023/07/06 22:06:35
ORD_RANGE P201310 626386 14714 162 2023/07/06 22:06:42
ORD_RANGE P201311 624018 14659 162 2023/07/06 22:06:48
ORD_RANGE P201312 624828 14677 162 2023/07/06 22:06:55
ORD_RANGE P_DEFAULT
ORD_RANGE_IMSI P201201 625157 14688 161 2023/11/24 22:07:46
ORD_RANGE_IMSI P201202 625594 14704 161 2023/11/24 22:07:52
ORD_RANGE_IMSI P201203 625150 14688 162 2023/11/24 22:07:49
ORD_RANGE_IMSI P201204 624633 12832 162 2023/11/24 22:07:43
ORD_RANGE_IMSI P201205 624403 14673 162 2023/07/06 22:07:02
ORD_RANGE_IMSI P201206 624187 12824 162 2023/07/06 22:04:37
ORD_RANGE_IMSI P201207 624361 12850 162 2023/07/06 22:04:44
ORD_RANGE_IMSI P201208 623940 12849 162 2023/07/06 22:04:50
ORD_RANGE_IMSI P201209 623608 14649 162 2023/07/06 22:05:13
ORD_RANGE_IMSI P201210 624770 14676 162 2023/07/06 22:05:20
ORD_RANGE_IMSI P201211 625167 14685 162 2023/07/06 22:05:27
ORD_RANGE_IMSI P201212 626477 14716 162 2023/07/06 22:05:34
ORD_RANGE_IMSI P201301 624595 14672 162 2023/07/06 22:05:41
ORD_RANGE_IMSI P201302 624556 14671 162 2023/07/06 22:05:48
ORD_RANGE_IMSI P201303 626941 14727 162 2023/07/06 22:05:54
ORD_RANGE_IMSI P201304 625107 14684 162 2023/07/06 22:06:01
ORD_RANGE_IMSI P201305 625046 14682 162 2023/07/06 22:06:08
ORD_RANGE_IMSI P201306 626169 14709 162 2023/07/06 22:06:14
ORD_RANGE_IMSI P201307 625381 14690 162 2023/07/06 22:06:21
ORD_RANGE_IMSI P201308 625043 14682 162 2023/07/06 22:06:28
ORD_RANGE_IMSI P201309 624483 14669 162 2023/07/06 22:06:35
ORD_RANGE_IMSI P201310 626386 14714 162 2023/07/06 22:06:42
ORD_RANGE_IMSI P201311 624018 14659 162 2023/07/06 22:06:48
ORD_RANGE_IMSI P201312 624828 14677 162 2023/07/06 22:06:55
ORD_RANGE_IMSI P_DEFAULT
50 rows selected.
'Oracle > 운영' 카테고리의 다른 글
MView - 12c New features (Realtime MView) (0) | 2024.01.30 |
---|---|
Materialized View (MView) (0) | 2024.01.26 |
통계정보 restore 하기 (0) | 2023.10.05 |
ddl_lock_timeout 과 ORA-00054 : resource busy (0) | 2023.07.24 |
테이블 컬럼삭제 Drop Column과 Unused (0) | 2023.07.19 |
댓글