Előfordulhat, hogy nem cserélhető partíciókra van szükségünk, hanem automatikusan keletkezőkre. Az intervallum partíciók DATE
típusú mezőkkel működnek, vegyünk példának egy log táblát:
create table app_logs
(
id number generated always as identity primary key,
pkg_name varchar2(30) not null,
sub_name varchar2(30) not null,
msg varchar2(4000) not null,
loglevel number(2) default 10 not null,
created_at date default sysdate not null
)
partition by range (created_at)
interval (numtoyminterval(1, 'year'))
(
partition p_2022 values less than (to_date('2023-01-01', 'yyyy-mm-dd'))
);
Ha csak range
partíciókat használnánk, és elfelejtkeznénk az új partíció hozzáadásáról, akkor 2023-01-01-jén minden ide logoló kódunk hibát dobna. Teszteljük a fenti táblát egy nem létező partícióba tartozó adat beszúrásával:
insert
into app_logs (
pkg_name, sub_name, msg,
created_at
)
values (
'test_pkg', 'test_sub', 'hello!',
to_date('23-01-01 13:31', 'yy-mm-dd hh24:mi')
);
Bement! Ha megvizsgáljuk a tábla partícióit, az általunk definiált mellett látnunk kell egy újat is SYS_% névvel:
select *
from all_tab_partitions
where table_name = upper('app_logs');