在现有的未分区表

时间:2017-09-20 19:07:08

标签: oracle date database-partitioning

我想知道一种分区现有表的简单方法。我想Ranges和使用日期字段都可以。

但是我在Oracle网站上看到两个选项(见下面的链接)

https://docs.oracle.com/database/122/VLDBG/evolve-nopartition-table.htm#VLDBG00302

将非分区表转换为分区表似乎比使用联机重新定义分区收集表更容易,只需按照相关步骤进行。

但是我在这里看到了(见下面的链接)

https://asktom.oracle.com/pls/apex/f?p=100:11:::NO:RP:P11_QUESTION_ID:9533887100346178338

我们看到了

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_REDEFINITION 。请参阅此处以获取示例

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:869096700346654484

所以我正在使用..

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production    0
PL/SQL Release 12.1.0.2.0 - Production  0
"CORE   12.1.0.2.0  Production" 0
TNS for Linux: Version 12.1.0.2.0 - Production  0
NLSRTL Version 12.1.0.2.0 - Production  0

我是否只能使用(限于)在线重新定义来分区表?

按年创建分区的简洁方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您仍然需要分区提示的答案,可以在here右边找到一个解释。

对于第二个问题,您可以使用从Oracle 11g创建自动分区。这里是一些代码示例:

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是最大日期。您不必创建MAX_VALUE分区。

如何启用或更改间隔?

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

如何禁用它?

ALTER TABLE <TABLE name> SET INTERVAL ();

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