아래와 같이 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문으로 하면 될듯 한데 도통 몰라 도움을 받고자 합니다.
그럼 수고하세요
안녕하세요. ALTER TABLE ... TRUNCATE PARTITION 문장으로 테스트해봤습니다.
아래 문서를 참고했습니다.
https://docs.oracle.com/database/121/VLDBG/GUID-09F5641F-821D-4971-81F8-583F7CD9CAA2.htm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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. |