0

我想在 10g 中以 1 个月的间隔对一个 txn 表进行分区。具有 txn_date 的表。

我希望分区是自动的。我认为这在 11 中是可能的,但有什么方法可以在 10g 中实现。

create table part
(
   txn_Date date
)
PARTITION BY RANGE (txn_date)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
   partition p1 values less than (TO_DATE('01-NOV-2007','DD-MON-YYYY'))
);
4

1 回答 1

0

您可以安排作业在适当的时候添加这些分区。由于这是一个 DDL,这将使用动态 SQL 来完成。

例如。对于保存按月分区的数据的表,您可以在每个月的最后一个周末有一个工作,该工作会为下个月创建分区。

create or replace procedure p_part_maintenance_mnthy
as
declare
  v_partition_name all_tab_partitions.partition_name%type;
  v_limit varchar2(50);
begin

  select to_char(trunc(add_months(sysdate,1),'MM'),'MonYYYY')
    into v_partition_name 
    from dual; --eg. output Oct2012

  select to_char(trunc(add_months(sysdate,2),'MM'),'dd-mon-yyyy')
    into v_limit
    from dual; -- eg. output 01-nov-2012

execute immediate 'ALTER TABLE sales ADD PARTITION ' || v_partition_name ||
                   ' VALUES LESS THAN (' || v_limit || ') tablespace XYZ';

end;
/

通常,所有类似的函数调用,如上述(每日、每月和每年)都将放在一个包中,并将 table_name 作为输入。这些是根据需要从各个过程中调用的。

于 2012-09-21T18:09:46.387 回答