interval로 설정된 파티션 삭제하기 0 3 620

by webma [PL/SQL] [2020.02.11 19:45:29]



아래와 같이 TIMESTAMP 기준으로 interval 파티션으로 나눴습니다.

 CREATE TABLE PTEST
  (
      REG_DT      TIMESTAMP,
      SALE        NUMBER,
      
      CONSTRAINT PK_PTEST PRIMARY KEY(REG_DT)
      
  )
  PARTITION BY RANGE(REG_DT)
   interval (numtodsinterval(1,'DAY'))
  (
      PARTITION SYS_01 VALUES LESS THAN ('20191201')
  )

지금 데이터는 잘들어 오고 있습니다.

개발하려는 작업은 프로시저에서 입력파라미터로 특정날짜를 입력받아서

90일전의 파티션을 TRUNCATE 하려고 하는데요

제가 알기로는 interval로 나눈 파티션은 시스템이 자동으로 나눠준다고 알고 있습니다.

이럴경우 어떻게 파티션을 TRUNCATE 시켜야 하는지 해서요..

자료를 찾아보니 FOR문으로 하면 될듯 한데 도통 몰라 도움을 받고자 합니다.

 

그럼 수고하세요

by pajama [2020.02.12 00:38:13]

안녕하세요. ALTER TABLE ... TRUNCATE PARTITION 문장으로 테스트해봤습니다.

아래 문서를 참고했습니다.

https://docs.oracle.com/database/121/VLDBG/GUID-09F5641F-821D-4971-81F8-583F7CD9CAA2.htm

 

SQL> insert into ptest
  2      select date'2020-02-12' - level , floor(dbms_random.value(100, 1000))
  3      from dual
  4      connect by level < 10;

9 rows created.

SQL> @table_partitions

TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME                INITIAL_EXTENT NEXT_EXTENT PCT_INCREASE   NUM_ROWS AVG_ROW_LEN
------------------------------ ------------------------------ ------------------------------ -------------- ----------- ------------ ---------- -----------
PTEST                          SYS_01                         SYSTEM                                  65536     1048576
PTEST                          SYS_P21                        SYSTEM                                  65536     1048576
PTEST                          SYS_P22                        SYSTEM                                  65536     1048576
PTEST                          SYS_P23                        SYSTEM                                  65536     1048576
PTEST                          SYS_P24                        SYSTEM                                  65536     1048576
PTEST                          SYS_P25                        SYSTEM                                  65536     1048576
PTEST                          SYS_P26                        SYSTEM                                  65536     1048576
PTEST                          SYS_P27                        SYSTEM                                  65536     1048576
PTEST                          SYS_P28                        SYSTEM                                  65536     1048576
PTEST                          SYS_P29                        SYSTEM                                  65536     1048576
SQL> select * from ptest;

REG_DT                                                                            SALE
--------------------------------------------------------------------------- ----------
03-FEB-20 12.00.00.000000 AM                                                       946
04-FEB-20 12.00.00.000000 AM                                                       475
05-FEB-20 12.00.00.000000 AM                                                       267
06-FEB-20 12.00.00.000000 AM                                                       932
07-FEB-20 12.00.00.000000 AM                                                       237
08-FEB-20 12.00.00.000000 AM                                                       188
09-FEB-20 12.00.00.000000 AM                                                       258
10-FEB-20 12.00.00.000000 AM                                                       270
11-FEB-20 12.00.00.000000 AM                                                       301

9 rows selected.

SQL> ALTER TABLE ptest TRUNCATE PARTITION FOR(date'2020-02-10');

Table truncated.

SQL> select * from ptest;

REG_DT                                                                            SALE
--------------------------------------------------------------------------- ----------
03-FEB-20 12.00.00.000000 AM                                                       946
04-FEB-20 12.00.00.000000 AM                                                       475
05-FEB-20 12.00.00.000000 AM                                                       267
06-FEB-20 12.00.00.000000 AM                                                       932
07-FEB-20 12.00.00.000000 AM                                                       237
08-FEB-20 12.00.00.000000 AM                                                       188
09-FEB-20 12.00.00.000000 AM                                                       258
11-FEB-20 12.00.00.000000 AM                                                       301

8 rows selected.

 

 


by webma [2020.02.12 22:20:59]

by pajama 님 

몇일을 이것땜시 고민했었는데, 덕분에 해결했습니다.

도움을 주셔서 너무 감사드립니다.

일찍 감사하다는 말을 전하고 싶었는데

이리저리 바빠서 못했네요..

오늘도 즐거운 하루 보내세요

 

 

 


by 우리집아찌 [2020.02.13 07:50:11]

global index 있으면 파티션 삭제시 주의하세요

index invalid 됩니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입