您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

11g分区表按时间自动创建

 

11g新特性_分区表按时间自动创建(Interval Partitioning(MONTH、YEAR))

 

Interval Partitioning(MONTH、YEAR)

 

create table sales6

(

sales_id    number,

sales_dt    date

)

partition by range (sales_dt)

interval (numtoyminterval(1,'MONTH'))

(

partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))

);

 

SQL>insert into sales6 values (1,'01-jun-07');

1 row created.

 

SQL> select partition_name, high_value from user_tab_partitions where table_name = 'SALES6';

 

PARTITION_NAME       HIGH_VALUE

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

P0701                TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-M

                     M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

SYS_P23              TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-M

                     M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

                 

                    

注意新分区 SYS_P42,其上限为 6 月 1 日,因此该分区可以保留 2006 年 5 月的数据。该分区是通过拆分 SYS_P41 分区创建的(针对 6 月份)。因此,当您定义一个间隔分区方案时,Oracle 会自动创建和维护分区。

 

如果您希望将分区存储在特定表空间中,可以使用 store in 子句执行该操作:

 

interval (numtoyminterval(1,'MONTH'))

store in (par01,par02,par03,par04,par05,par06,par07,par08,par09,par10,par011,par012)

 

该子句以循环方式将分区存储在表空间 TS1、TS2 和 TS3 中。

 

 

如:

 

create tablespace par01 datafile '+DGDATGA' size 10m ;

create tablespace par02 datafile '+DGDATGA' size 10m ;

create tablespace par03 datafile '+DGDATGA' size 10m ;

create tablespace par04 datafile '+DGDATGA' size 10m ;

create tablespace par05 datafile '+DGDATGA' size 10m ;

create tablespace par06 datafile '+DGDATGA' size 10m ;

create tablespace par07 datafile '+DGDATGA' size 10m ;

create tablespace par08 datafile '+DGDATGA' size 10m ;

create tablespace par09 datafile '+DGDATGA' size 10m ;

create tablespace par010 datafile '+DGDATGA' size 10m ;

create tablespace par011 datafile '+DGDATGA' size 10m ;

create tablespace par012 datafile '+DGDATGA' size 10m ;

 

alter user fmismain quota unlimited on par01;

alter user fmismain quota unlimited on par02;

alter user fmismain quota unlimited on par03;

alter user fmismain quota unlimited on par04;

alter user fmismain quota unlimited on par05;

alter user fmismain quota unlimited on par06;

alter user fmismain quota unlimited on par07;

alter user fmismain quota unlimited on par08;

alter user fmismain quota unlimited on par09;

alter user fmismain quota unlimited on par010;

alter user fmismain quota unlimited on par011;

alter user fmismain quota unlimited on par012;

 

 

 

create table sales12

(

sales_id    number,

sales_dt    date

)

partition by range (sales_dt)

interval (numtoyminterval(1,'MONTH'))

store in (par01,par02,par03,par04,par05,par06,par07,par08,par09,par010,par011,par012)

(

partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))

);

 

 

insert into sales12 values (1,'01-jun-07');

 

select partition_name, high_value from user_tab_partitions where table_name = 'SALES12';

 

 

 

insert into sales12 values (1,'01-may-07');

 

select table_name,partition_name,tablespace_name,high_value from user_tab_partitions where table_name = 'SALES12';

 

SQL> select table_name,partition_name,tablespace_name,high_value from user_tab_partitions where table_name = 'SALES12';

 

TABLE_NAME           PARTITION_NAME       TABLESPACE_NAME                HIGH_VALUE

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

SALES12              P0701                FMISMAIN                       TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-M

                                                                         M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

SALES12              SYS_P41              PAR05                          TO_DATE(' 2007-06-01 00:00:00', 'SYYYY-M

                                                                         M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

SALES12              SYS_P25              PAR06                          TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-M

                                                                         M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

 

 

CREATE TABLE interval_tab (

  id           NUMBER,

  code         VARCHAR2(10),

  description  VARCHAR2(50),

  created_date DATE

)

PARTITION BY RANGE (created_date)

INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))

(

   PARTITION part_01 values LESS THAN (TO_DATE('01-NOV-2007','DD-MON-YYYY'))

);

 

 

EXEC DBMS_STATS.gather_table_stats(USER, 'INTERVAL_TAB');

 

COLUMN table_name FORMAT A20

COLUMN partition_name FORMAT A20

COLUMN high_value FORMAT A40

 

SELECT table_name, partition_name, high_value, num_rows

FROM   user_tab_partitions

ORDER BY table_name, partition_name;

 

 

 

INSERT INTO interval_tab VALUES (1, 'ONE', 'One', TO_DATE('16-OCT-2007', 'DD-MON-YYYY'));

INSERT INTO interval_tab VALUES (2, 'TWO', 'Two', TO_DATE('31-OCT-2007', 'DD-MON-YYYY'));

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, 'INTERVAL_TAB');

 

SELECT table_name, partition_name, high_value, num_rows

FROM   user_tab_partitions

ORDER BY table_name, partition_name;

 

 

INSERT INTO interval_tab VALUES (3, 'THREE', 'Three', TO_DATE('01-NOV-2007', 'DD-MON-YYYY'));

INSERT INTO interval_tab VALUES (3, 'THREE', 'Three', TO_DATE('01-NOV-2007', 'DD-MON-YYYY'));

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, 'INTERVAL_TAB');

 

SELECT table_name, partition_name, high_value, num_rows

FROM   user_tab_partitions

ORDER BY table_name, partition_name;

 

 

INSERT INTO interval_tab VALUES (5, 'FIVE', 'Five', TO_DATE('01-JAN-2008', 'DD-MON-YYYY'));

INSERT INTO interval_tab VALUES (4, 'FOUR', 'Four', TO_DATE('31-JAN-2008', 'DD-MON-YYYY'));

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, 'INTERVAL_TAB');

 

SELECT table_name, partition_name, high_value, num_rows

FROM   user_tab_partitions

ORDER BY table_name, partition_name;

 

 

 

INSERT INTO interval_tab VALUES (5, 'FIVE', 'Five', TO_DATE('01-JAN-2008', 'DD-MON-YYYY'));

INSERT INTO interval_tab VALUES (4, 'FOUR', 'Four', TO_DATE('31-JAN-2008', 'DD-MON-YYYY'));

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, 'INTERVAL_TAB');

 

SELECT table_name, partition_name, high_value, num_rows

FROM   user_tab_partitions

ORDER BY table_name, partition_name;

 

 

TABLE_NAME           PARTITION_NAME       HIGH_VALUE                                 NUM_ROWS

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

INTERVAL_TAB         PART_01              TO_DATE(' 2007-11-01 00:00:00', 'SYYYY-M          2

                                          M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

INTERVAL_TAB         SYS_P21              TO_DATE(' 2007-12-01 00:00:00', 'SYYYY-M          2

                                          M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

 

INTERVAL_TAB         SYS_P22              TO_DATE(' 2008-02-01 00:00:00', 'SYYYY-M          5

                                          M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

相关文章 [上一篇] Unix下find 的用法
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号