Oracle 在现有未分区表上创建年份日期分区

Oracle 在现有未分区表上创建年份日期分区,oracle,date,database-partitioning,Oracle,Date,Database Partitioning,我想知道一种对现有表进行分区的简单方法。我认为按范围和使用日期字段将起作用 但是,我在Oracle站点上看到了两个选项(请参见下面的链接) 将非分区表转换为分区表似乎比使用联机重新定义分区集合表更容易,只需执行所涉及的步骤即可 然而,我在这里看到(见下面的链接) 我们看到 SQL> ALTER TABLE a MODIFY 2 PARTITION BY RANGE(x) INTERVAL (10) 3 ( PARTITION P1 VALUES LESS THAN (10)

我想知道一种对现有表进行分区的简单方法。我认为按范围和使用日期字段将起作用

但是,我在Oracle站点上看到了两个选项(请参见下面的链接)

将非分区表转换为分区表似乎比使用联机重新定义分区集合表更容易,只需执行所涉及的步骤即可

然而,我在这里看到(见下面的链接)

我们看到

SQL> ALTER TABLE a MODIFY
  2  PARTITION BY RANGE(x) INTERVAL (10)
  3  ( PARTITION P1 VALUES LESS THAN (10),
  4  PARTITION P2 VALUES LESS THAN (20),
  5  PARTITION P3 VALUES LESS THAN (30)
  6  )
  7  update indexes
  8  (xpa local,
  9  xiea global partition by range(y)
 10  (partition ip1 values less than (MAXVALUE))
 11  ) ;

Table altered.
所有这些都只在12.2中有效。如果您使用的是12.1,则需要使用DBMS_重新定义。请参见这里的示例

所以当我使用

Oracle数据库12c企业版12.1.0.2.0版-64位生产0
PL/SQL版本12.1.0.2.0-生产0
“核心12.1.0.2.0产品”0
TNS for Linux:12.1.0.2.0版-生产0
NLSRTL版本12.1.0.2.0-生产0
我是否只能使用(限于)对分区表的在线重新定义


什么是按年创建分区的干净方法?

如果您仍然需要分区提示的答案,您可以找到正确的解释

对于第二个问题,您可以从Oracle11g使用自动分区创建。下面是一些代码示例:

PARTITION BY RANGE (date_col) 
  INTERVAL(NUMTOYMINTERVAL(1, 'YEAR'))
    ( PARTITION p0 VALUES LESS THAN (TO_DATE('01-01-2016', 'DD-MM-YYYY')),
      PARTITION p1 VALUES LESS THAN (TO_DATE('01-01-2017', 'DD-MM-YYYY')),
      PARTITION p2 VALUES LESS THAN (TO_DATE('01-01-2018', 'DD-MM-YYYY')),
      PARTITION p3 VALUES LESS THAN (TO_DATE('01-01-2019', 'DD-MM-YYYY')) );
范围分区的高值是转换点。数据库会自动为超出该转换点的数据创建间隔分区。 在我们的示例中,过渡点是01-01-2019,因为01-01-2019是最长日期。您不必创建最大值分区

如何启用或更改间隔?

ALTER TABLE t_part SET INTERVAL(NUMTOYMINTERVAL(1,'YEAR'));
ALTER TABLE <TABLE name> SET INTERVAL ();
如何禁用它?

ALTER TABLE t_part SET INTERVAL(NUMTOYMINTERVAL(1,'YEAR'));
ALTER TABLE <TABLE name> SET INTERVAL ();
ALTER TABLE SET INTERVAL();

您可以找到有关此函数的一些信息。如果您需要更多信息,请告诉我。

是的,如果您使用12.1,您唯一的选择就是使用dbms\u重新定义。