파티션의 ATTRIBUTE를 변경할 수 있는 명령어 두가지의 차이에대해서 정리한 글입니다.
결론은, ALTER TABLE [테이블명] COMPRESS FOR OLTP은 기존의 파티션 + 새로 ADD하는 파티션의 설정을 모두 변경하는 명령어이고,ALTER TABLE [테이블명] MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP은 기존의 파티션의 설정은 그대로 두고 새로 ADD하는 파티션의 설정만 변경하는 명령어입니다.
ATTRIBUTE란, DBA_TAB_PARTITIONS뷰에서 확인할 수 있습니다.
MODIFY DEFAULT ATTRIBUTES 의 설명은 아래의 문서에서 확인할 수 있습니다.
COMPRESS 방법, PARTITION TABLE,INDEX의 TABLESPACE의 변경등을 수행할 수 있습니다.
https://docs.oracle.com/database/121/VLDBG/GUID-C003E6DB-3867-4407-86D2-A51F30AF07CC.htm#VLDBG1177
COMPRESSION
요약하면 해당 파티션에 대한 압축여부를 나타냅니다.
Indicates the actual compression property for a partition of a simple partitioned table, or the default (if specified) for subpartitions for composite partitioned tables, otherwise NONE.
- NONE - The partition is composite, and a default setting is not specified for compression. See Also: the *_TAB_SUBPARTITIONS view
- ENABLED - The setting for compression is enabled.
- DISABLED - The setting for compression is disabled.
COMPRESS_FOR
압축했을 시 파티션의 압축유형을 나타냅니다.
Default compression for what kind of operations:
- BASIC
- ADVANCED
- QUERY LOW
- QUERY HIGH1
- ARCHIVE LOW1
- ARCHIVE HIGH1
- NULL
테스트
사전조회
기본적으로 조회결과 ,생성시에 적용했던 COMPRESSION=ENABLED 와 COMPRESS_FOR=ADVANCED를 설정값으로 가지고 있습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
order by PARTITION_NAME;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
-------------------------------- ---------------------- ---------------------- ------------------------------
...생략
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED ADVANCED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 ENABLED ADVANCED
#1.ALTER TABLE [테이블명] COMPRESS FOR OLTP
1. MOVE PARTITION명령으로 특정파티션들의 COMPRESS_FOR 변경.
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202209 COMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202210 NOCOMPRESS;
수행결과, 각각 파티션의 설정값들이 변하였습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
--------------- --------------------------------------- ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
2.명령어 수행
ALTER TABLE DW_CC_CCL9001 COMPRESS FOR OLTP;
확인결과 모든 파티션들의 설정이 다시 COMPRESS FOR OLTP 형식으로 변경되었습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
----------------- ----------------- ------------------------ ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 ENABLED ADVANCED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED ADVANCED
#2.ALTER TABLE [테이블명] MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP
1.사전확인과 동일한 환경이므로, 변경 후 조회를 한번더 수행하여 확인합니다.
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202209 COMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202210 NOCOMPRESS;
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
--------------- --------------------------------------- ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
2.명령어 수행
ALTER TABLE YSBAE.DW_CC_CCL9001 MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP;
확인
변경한 파티션들의 설정들은 그대로 인것을 확인할 수 있습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
--------------- --------------------------------------- ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
3.파티션 ADD
추가된 파티션에만 해당 설정이 적용되는지 파티션을 COMPRESS 옵션주지않고 생성해보도록 하겠습니다.
파티션 추가하였고, COMPRESS 관련 옵션은 아무것도 넣지 않고 ADD하였습니다.
ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202211 VALUES LESS THAN (TO_DATE(' 2022-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));
확인
새로추가한 202211파티션은 ENABLED와 ADVANCED 옵션으로 자동 설정되어 생성된 것을 확인할 수 있습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
--------------- ----------------- ------------------------ ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202211 ENABLED ADVANCED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
#3. 추가 궁금증
여기서 저의 추가 궁금증. 애초에 생성할 때부터 다른 파티션들도 ENABLED와 ADVANCED 옵션이어서 해당 MODIFY ATTRIBUTES 옵션과 관계없이 저렇게 생성되는 것은 아닐까요?
NOCOMPRESS로 변경 후 다시 ADD 해보고 확인해보겠습니다.
ALTER TABLE YSBAE.DW_CC_CCL9001 MODIFY DEFAULT ATTRIBUTES NOCOMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202212 VALUES LESS THAN (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));
확인
확인결과 MODIFY ATTRIBUTES 변경 후 추가한 파티션은 NOCOMPRESS로 생성됩니다.
즉, MODIFY ATTRIBUTES 명령어는 기존의 파티션들의 설정에는 영향을 미치지 않고 새로 생성될 파티션들에게 영향을 미친다고 할 수 있습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211','PT_CC_CCL9001_202212')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
--------------- ----------------- ------------------------ ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202212 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202211 ENABLED ADVANCED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 DISABLED
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
그렇다면 1번의 설정(alter table [테이블명] compress 옵션)을 적용 후 다시 ADD해도 설정이 적용된 상태로 ADD 되는지 마지막으로 확인해보겠습니다.
ALTER TABLE DW_CC_CCL9001 COMPRESS ;
ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202301 VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));
확인
확인결과 새로 추가한 파티션도 BASIC COMPRESSION이 적용되었고 기존의 파티션들도 모두 BASIC COMPRESSION으로 변경되었습니다.
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211','PT_CC_CCL9001_202212','PT_CC_CCL9001_202301')
order by PARTITION_NAME desc;
TABLE_OWNER TABLE_NAME PARTITION_NAME COMPRESSION COMPRESS_FOR
------------ ------------------ ----------------------- ---------------------- ------------------------------
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202301 ENABLED BASIC
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202212 ENABLED BASIC
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202211 ENABLED BASIC
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202210 ENABLED BASIC
YSBAE DW_CC_CCL9001 PT_CC_CCL9001_202209 ENABLED BASIC
끝
'Oracle > 운영' 카테고리의 다른 글
DB 접속 체크 쉘 프로그램 간단하게 만듦 (0) | 2022.08.11 |
---|---|
로그인 트리거 생성 스크립트 (0) | 2022.08.10 |
[19c] Outline 기능 이용하여 Hint 없이 실행계획 변경 (0) | 2022.06.07 |
alter table [테이블명] compress VS alter table [테이블명] move compress (0) | 2022.05.04 |
INDEX Rebuild시 parallel옵션 사용에 따른 degree확인 테스트(partitioned index 포함) (0) | 2022.05.03 |
댓글