oracle11g 自动分区,Oracle11g下自动创建分区

11g之前,维护分区需要手工。11g之后使用interval来实现自动扩展分区,简化了维护。

根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))

根据月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))

根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))

根据时分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})

下面用按月自动扩展来做个试验:

SQL> create table t_range (id number not null PRIMARY KEY, test_date date)

partition by range (test_date) interval (numtoyMinterval (1,'MONTH'))

(

partition p_2014_01_01 values less than (to_date('2014-01-01', 'yyyy-mm-dd'))

);

--看到只有一个分区

SQL> select partition_name from user_tab_partitions where table_name='T_RANGE';

PARTITION_NAME

------------------------------

P_2014_01_01

SQL> insert /*+append */ into t_range select rownum,

to_date(to_char(sysdate - 140, 'J') +

trunc(dbms_random.value(0, 80)),

'J')

from dual

connect by rownum <= 100000;

SQL> commit;

--可以看到SYS开头的分区是自动扩展的

SQL> select partition_name from user_tab_partitions where table_name='T_RANGE';

PARTITION_NAME

------------------------------

P_2014_01_01

SYS_P21

SYS_P22

SYS_P23

--再看看t_range的表结构

create table T_RANGE

(

ID NUMBER not null,

TEST_DATE DATE

)

partition by range (TEST_DATE)

(

partition P_2014_01_01 values less than (TO_DATE(' 2014-01-01 00:00:00',

'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),

partition SYS_P21 values less than (TO_DATE(' 2014-02-01 00:00:00',

'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),

partition SYS_P22 values less than (TO_DATE(' 2014-03-01 00:00:00',

'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),

partition SYS_P23 values less than (TO_DATE(' 2014-04-01 00:00:00',

'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

);

-- Create/Recreate primary, unique and foreign key constraints

alter table T_RANGE

add primary key (ID);

--如果对分区名不太爽,则可以自己修改一下:

alter table t_range rename partition SYS_P21 to p_2014_02_01;

alter table t_range rename partition SYS_P22 to p_2014_03_01;

alter table t_range rename partition SYS_P23 to p_2014_04_01;

摘自官方文档:

Restrictions on Interval Partitioning The INTERVAL clause is subject to the restrictions listed in "Restrictions on Partitioning in General" and "Restrictions on Range Partitioning". The following additional restrictions apply:

You can specify only one partitioning key column, and it must be of NUMBER, DATE, FLOAT, or TIMESTAMP data type.

This clause is not supported for index-organized tables.

This clause is not supported for tables containing nested table columns or varray columns.

You cannot create a domain index on an interval-partitioned table.

Interval partitioning is not supported at the subpartition level.

Serializable transactions do not work with interval partitioning. Trying to insert data into a partition of an interval partitioned table that does not yet have a segment causes an error.

In the VALUES clause:

You cannot specify MAXVALUE (an infinite upper bound), because doing so would defeat the purpose of the automatic addition of partitions as needed.

You cannot specify NULL values for the partitioning key column.

分享到:

更多

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 创建分区表的语法如下: ``` CREATE TABLE table_name (column1 datatype1, column2 datatype2,...) PARTITION BY RANGE (column_name) ( PARTITION partition_name1 VALUES LESS THAN (value1), PARTITION partition_name2 VALUES LESS THAN (value2), PARTITION partition_name3 VALUES LESS THAN (MAXVALUE) ); ``` 其中,table_name 是表,column1、column2 是列和数据类型,column_name 是用于分区的列。 PARTITION BY RANGE 是分区方式,指定分区键,这里使用了 RANGE 分区方式。 分区称和分区边界值在 VALUES LESS THAN 之后指定,分区边界值是指定范围内的最大或最小值。 例如,以下示例将创建一个为 sales 的表,该表使用 sales_date 列作为分区键,并在 2019 年前、2019 年、2020 年和 2021 年之后分成四个分区,每个分区使用不同的表空间: ``` CREATE TABLE sales (id INT PRIMARY KEY, sales_date DATE, sales_amount NUMBER(10,2)) PARTITION BY RANGE (sales_date) ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019', 'DD-MON-YYYY')), PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019', 'DD-MON-YYYY')), PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019', 'DD-MON-YYYY')), PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2020', 'DD-MON-YYYY')), PARTITION sales_q1_2020 VALUES LESS THAN (TO_DATE('01-APR-2020', 'DD-MON-YYYY')), PARTITION sales_q2_2020 VALUES LESS THAN (TO_DATE('01-JUL-2020', 'DD-MON-YYYY')), PARTITION sales_q3_2020 VALUES LESS THAN (TO_DATE('01-OCT-2020', 'DD-MON-YYYY')), PARTITION sales_q4_2020 VALUES LESS THAN (TO_DATE('01-JAN-2021', 'DD-MON-YYYY')), PARTITION sales_future VALUES LESS THAN (MAXVALUE) ) TABLESPACE sales_ts; ``` 在此示例中,我们根据销售日期对表进行了分区,并提交了三个月和四个季度的数据,每个季度使用了不同的分区。 最后一个分区是用于未来销售数据的。 使用 TABLESPACE 关键字指定为每个分区使用不同的表空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值