Oracle 11g数据库的分区表扩展(按年度)

一般一张表超过2G的大小,Oracle推荐使用分区表。oracle 11g支持自动分区,也可按年度、季度、月份手动扩展分区。

有一张分区表定义如下,需扩展2020年分区。
CREATE TABLE US_REAL.T_TRADE
(
ID NUMBER(14) NOT NULL,
TRADE_NO VARCHAR2(20 BYTE) NOT NULL,
AMOUNT NUMBER(12,2),
-- OTHER
)
TABLESPACE TS_US_REAL
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
BUFFER_POOL DEFAULT
)
LOGGING
PARTITION BY RANGE (ID)
(
PARTITION PT_TRADE _2018 VALUES LESS THAN (20181300000000)
LOGGING
NOCOMPRESS
TABLESPACE TS_TRADE_2018
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 8M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
),
PARTITION PT_TRADE _2019 VALUES LESS THAN (20191300000000)
LOGGING
NOCOMPRESS
TABLESPACE TS_TRADE _2019
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 8M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
)
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING
ENABLE ROW MOVEMENT;

1.新建表空间 TS_TRADE_YYYY

执行语句
CREATE TABLESPACE TS_TRADE_2020 DATAFILE SIZE 500M AUTOEXTEND ON NEXT 500M MAXSIZE 32000M
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

2.扩展表分区 PT_TRADE_YYYY

扩展表分区SQL语法:
alter table [scheam.]表名 add partition 分区名 values (分区字段)
tablespace tbs_tbname --表空间
pctfree 10 --预留的空间大小,10%
initrans 1 --是一个 block 上初始预分配给并行交易控制的空间
maxtrans 255 --如果initrans 不够了,自动扩展,最大这个值

执行语句
alter table US_REAL.T_TRADE add
PARTITION PT_TRADE_2020 VALUES LESS THAN (20201300000000)
LOGGING
NOCOMPRESS
TABLESPACE TS_TRADE _2020
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 8M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
) ;