Partitioning table based on Month
How to create and maintain a monthly partitions for a Table?
Range partitions
Creating a table with Monthly Partitions
CREATE TABLE “FORM_STG”.”QPT” ( “NBR” number, “FORM_DATE” DATE ) PARTITION BY RANGE (“FORM_DATE”) (PARTITION “MPT_PJAN_23” VALUES LESS THAN (TO_DATE(‘ 2023-02-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PFEB_23” VALUES LESS THAN (TO_DATE(‘ 2023-03-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PMAR_23” VALUES LESS THAN (TO_DATE(‘ 2023-04-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PAPR_23” VALUES LESS THAN (TO_DATE(‘ 2023-05-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PMAY_23” VALUES LESS THAN (TO_DATE(‘ 2023-06-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PJUN_23” VALUES LESS THAN (TO_DATE(‘ 2023-07-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PJUL_23” VALUES LESS THAN (TO_DATE(‘ 2023-08-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PAUG_23” VALUES LESS THAN (TO_DATE(‘ 2023-09-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PSEP_23” VALUES LESS THAN (TO_DATE(‘ 2023-10-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_POCT_23” VALUES LESS THAN (TO_DATE(‘ 2023-11-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PNOV_23” VALUES LESS THAN (TO_DATE(‘ 2023-12-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” , PARTITION “MPT_PDEC_23” VALUES LESS THAN (TO_DATE(‘ 2024-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ); |
Maintenance
Every year-end new partition should be created for the coming year. For example, for the new year 2024, we need to create monthly partitions before 31st of dec -2023.
creating a new monthly range partitions.
set time on set timing on Alter table FORM_STG.MPT Add partition MPT_PJAN_24 VALUES LESS THAN (TO_DATE(‘ 2024-02-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PFEB_24 VALUES LESS THAN (TO_DATE(‘ 2024-03-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PMAR_24 VALUES LESS THAN (TO_DATE(‘ 2024-04-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PAPR_24 VALUES LESS THAN (TO_DATE(‘ 2024-05-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PMAY_24 VALUES LESS THAN (TO_DATE(‘ 2024-06-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PJUN_24 VALUES LESS THAN (TO_DATE(‘ 2024-07-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PJUL_24 VALUES LESS THAN (TO_DATE(‘ 2024-08-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PAUG_24 VALUES LESS THAN (TO_DATE(‘ 2024-09-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PSEP_24 VALUES LESS THAN (TO_DATE(‘ 2024-10-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_POCT_24 VALUES LESS THAN (TO_DATE(‘ 2024-11-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PNOV_24 VALUES LESS THAN (TO_DATE(‘ 2024-12-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL” ; Alter table FORM_STG.MPT Add partition MPT_PDEC_24 VALUES LESS THAN (TO_DATE(‘ 2025-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “FORM_USERS_TBL”; |
Verify table level Indexes status.
column INDEX_NAME for a33 col OWNER for a22select DI.INDEX_NAME,DI.PARTITIONED,DI.OWNER,di.status from dba_indexes di where DI.TABLE_NAME=’MPT’ and DI.OWNER=’FORM_STG’;no rows selected. |
Verify Partition indexes status.
SQL> select DIP.PARTITION_NAME,DIP.INDEX_NAME,DIP.STATUS from dba_ind_partitions dip,dba_indexes di where DIP.INDEX_NAME=DI.INDEX_NAME and DI.TABLE_NAME=’MPT’ and DI.OWNER=’FORM_STG’ and DIP.STATUS<>’USABLE’; 2 3 4 5 6no rows selected ===>Means all indexes are in USABLE status |
See also
- Yearly partitions in Oracle database
- To Disable advanced compression on table partitions
- https://support.oracle.com
- https://oracle.com