Partitioning table based on Quarter
How to create and maintain a quarterly partitions for a Table?
Range partitions
Creating a table with Quarterly Partitions
CREATE TABLE "STG"."QPT" ( "QPT_NBR" NUMBER(*,0), "START_DT" DATE ) TABLESPACE "QPT_TBS" PARTITION BY RANGE ("START_DT") ( PARTITION "Q1_2023" VALUES LESS THAN (TO_DATE(' 2023-04-01 00:00:00', ' SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "QPT_PART_23" , PARTITION "Q2_2023" VALUES LESS THAN (TO_DATE(' 2023-07-01 00:00:00', ' SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "QPT_PART_23" , PARTITION "Q3_2023" VALUES LESS THAN (TO_DATE(' 2023-10-01 00:00:00', ' SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "QPT_PART_23" , PARTITION "Q4_2023" VALUES LESS THAN (TO_DATE(' 2024-01-01 00:00:00', ' SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLESPACE "QPT_PART_25" , PARTITION "AA_COD_PMAX" VALUES LESS THAN (MAXVALUE) TABLESPACE "QPT_TBS" ); |
Creating Index
CREATE INDEX "STG"."QPT_PK" ON "STG"."QPT" ("QPT_NBR") TABLESPACE "QPT_INDX" PARALLEL 4 ALTER TABLE "STG"."QPT" ADD CONSTRAINT "QPT_PKEY" PRIMARY KEY ("QPT_NBR") USING INDEX "STG"."QPT_PK" ENABLE |
creating a new Quarterly range partitions.
set lines 300 pages 300; set time on; set timing on; alter table STG.QPT split partition PMAX AT (TO_DATE ('2024-04-01 00:00:00','SYYYY-MM-DDHH24:MI:SS','NLS_CALENDAR=GREGORIAN')) INTO (PARTITION Q1_2024 TABLESPACE QPT_PART_24 , PARTITION PMAX); alter table STG.QPT split partition PMAX AT (TO_DATE ('2024-07-01 00:00:00','SYYYY-MM-DDHH24:MI:SS','NLS_CALENDAR=GREGORIAN')) INTO (PARTITION Q2_2024 TABLESPACE QPT_PART_24 , PARTITION PMAX); alter table STG.QPT split partition PMAX AT (TO_DATE ('2024-10-01 00:00:00','SYYYY-MM-DDHH24:MI:SS','NLS_CALENDAR=GREGORIAN')) INTO (PARTITION Q3_2024 TABLESPACE QPT_PART_24 , PARTITION PMAX); alter table STG.QPT split partition PMAX AT (TO_DATE ('2025-01-01 00:00:00','SYYYY-MM-DDHH24:MI:SS','NLS_CALENDAR=GREGORIAN')) INTO (PARTITION Q4_2024 TABLESPACE QPT_PART_24 , PARTITION PMAX); |
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=’QPT’ and DI.OWNER=’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=’QPT’ and DI.OWNER=’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
- Partitioning table based on Month
- To Disable advanced compression on table partitions
- https://support.oracle.com
- https://oracle.com