1、按月创建分区
create table T_MHDP
(
ID VARCHAR2(50) not null,
FLT_AIRCODE VARCHAR2(4),
FLT_NUMBER NUMBER(7),
FLT_DATE DATE
) partition by range (FLT_DATE)
(
partition PART201105 values less than (TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace TS_MHDP_1105
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
),
partition PART201106 values less than (TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace TS_MHDP_1106
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
),
partition PART201107 values less than (TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace TS_MHDP_1107
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
),
partition PARTDEFAULT values less than (TO_DATE(' 9999-12-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace TS_MHDP
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)
);
2、创建分区表
CREATE TABLE TABLE_PARTITION(
COL1 NUMBER,
COL2 VARCHAR2(10)
)
partition by range(COL1)(
partition TAB_PARTOTION_01 values less than (450000),
partition TAB_PARTOTION_02 values less than (900000),
partition TAB_PARTOTION_03 values less than (1350000),
partition TAB_PARTOTION_04 values less than (1800000),
partition TAB_PARTOTION_OTHER values less THAN (MAXVALUE)
);
Gregorian日历 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
1、查询当前用户下有哪些是分区表:
SELECT * FROM USER_PART_TABLES;
2、查询当前用户下分区表的分区信息:
SELECT * FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME=?;
3、查询某用户下二级分区的信息(只有创建了二级分区才有数据):
SELECT * FROM USER_TAB_SUBPARTITIONS;
4、删除分区
ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_03 UPDATE GLOBAL INDEXES
5、查询某一分区中的数据
SELECT * FROM TABLE_PARTITION partition(TAB_PARTOTION_01);
6、查询子分区中的数据
SELECT * FROM TABLE_PARTITION subpartition(TAB_PARTOTION_01);
7、使用分区删除数据
delete t_test(表名) partition(t_test_2013)
8、询当前用户下分区索引的分区信息:
SELECT * FROM USER_IND_PARTITIONS T WHERE T.INDEX_NAME=?
9、查看表的实际大小
select sum(bytes/1024/1024/1024) from user_segments where segment_name='TB_DATA_EQ_PICK_LOG'
10、查看每个分区的大小
select partition_name,bytes/1024/1024/1024 from user_segments where segment_name='TB_DATA_EQ_PICK_LOG'
INTERVAL PARTITION
一、interval partition
11g之前,分区必须是手工或者存储过程预分配新分区。
interval 分区是oracle 11g引入的新技术,无需DBA预分配新分区,插入数据时系统会根据range列和已分配的分区自动判断新数据是否可以插入到已存在的分区中,如果不能满足插入已存在的分区,系统自动分配一个新分区来存放新插入的数据。
interal 分区减少了dba对分区的操作,保证了分区的准确安全性。
月自动创建分区
1.建表
create table month_part (c1 number,c3 date)
partition by range(c3)
interval(numtoyminterval (1,'month'))
(partition part1 values less than (to_date('2010-01-01','YYYY-MM-DD')),
partition part2 values less than (to_date('2010-02-01','YYYY-MM-DD'))
);
numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,
表明x的单位,这个函数把x转为interval day to second数据类型
常用的单位有 ('day','hour','minute','second')
example
SQL> select sysdate,sysdate+numtodsinterval(3,'hour') as res from dual;
SYSDATE RES
------------------- -------------------
2007-09-05 01:45:34 2007-09-05 04:45:34
numtoyminterval 与numtodsinterval函数类似,将x转为interval year to month数据类型
常用的单位有'year','month'
example
SQL> select sysdate,sysdate+numtoyminterval(3,'year') as res from dual;
SYSDATE RES
------------------- -------------------
2007-09-05 01:54:53 2010-09-05 01:54:53
