Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在oracle中创建每月分区?_Oracle_Oracle12c - Fatal编程技术网

如何在oracle中创建每月分区?

如何在oracle中创建每月分区?,oracle,oracle12c,Oracle,Oracle12c,我有一张2017年和2018年的数据表。需要在该表上创建每月分区 所以我创建了一个非分区表,并从原始表加载了所有数据。现在,我将新表转换为每月分区的表 当我改变得到的错误为 ORA-14300:分区键映射到最大值之外的分区 允许的分区数 我的剧本是 ALTER TABLE ORDERHDR_PART MODIFY PARTITION BY RANGE (LASTUPDATE) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) ( PARTITION ORDE

我有一张2017年和2018年的数据表。需要在该表上创建每月分区

所以我创建了一个非分区表,并从原始表加载了所有数据。现在,我将新表转换为每月分区的表

当我改变得到的错误为

ORA-14300:分区键映射到最大值之外的分区 允许的分区数

我的剧本是

ALTER TABLE ORDERHDR_PART MODIFY 
PARTITION BY RANGE (LASTUPDATE) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
  (
   PARTITION ORDERHDR_PART_JAN VALUES less than (TO_DATE('01-02-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_FEB VALUES less than (TO_DATE('01-03-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_MAR VALUES less than (TO_DATE('01-04-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_APR VALUES less than (TO_DATE('01-05-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_MAY VALUES less than (TO_DATE('01-06-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_JUN VALUES less than (TO_DATE('01-07-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_JUL VALUES less than (TO_DATE('01-08-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_AUG VALUES less than (TO_DATE('01-09-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_SEP VALUES less than (TO_DATE('01-10-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_OCT VALUES less than (TO_DATE('01-11-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_NOV VALUES less than (TO_DATE('01-12-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_DEC VALUES less than (TO_DATE('01-01-2019','DD-MM-YYYY'))
   )ONLINE;

我认为你的方法是错误的

首先创建一个分区的表,例如

CREATE TABLE ORDERHDR_PART (....)
PARTITION BY RANGE (LASTUPDATE) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
  (
  PARTITION ORDERHDR_INITIAL VALUES less than (DATE '2000-01-01')
  );
然后将现有数据传输到新表

您可以使用一个简单的
插入ORDERHDR\U部件选择*fromOrderHDR\U 2017
Oracle将根据
LASTUPDATE
值自动创建每月分区。 使用这种方法,您可能会复制(临时)数据和/或面临性能问题

另一种方法是使用,应该是这样的

ALTER TABLE ORDERHDR_PART 
  EXCHANGE PARTITION FOR (DATE '2017-01-01')
  WITH TABLE ORDERHDR_2017
  INCLUDING INDEXES;
我不知道是否自动创建了“分区(日期'2017-01-01'),也许您必须运行
INSERT-INTO-ORDERHDR_零件(LASTUPDATE)值(日期'2017-01-01');回滚以便首先创建它

您将在所有月份得到一个分区,之后您可以使用拆分分区。应该是这样的:

ALTER TABLE ORDERHDR_PART SPLIT PARTITION FOR (DATE '2017-01-01') INTO ( 
   PARTITION ORDERHDR_PART_JAN VALUES less than (TO_DATE('01-02-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_FEB VALUES less than (TO_DATE('01-03-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_MAR VALUES less than (TO_DATE('01-04-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_APR VALUES less than (TO_DATE('01-05-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_MAY VALUES less than (TO_DATE('01-06-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_JUN VALUES less than (TO_DATE('01-07-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_JUL VALUES less than (TO_DATE('01-08-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_AUG VALUES less than (TO_DATE('01-09-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_SEP VALUES less than (TO_DATE('01-10-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_OCT VALUES less than (TO_DATE('01-11-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_NOV VALUES less than (TO_DATE('01-12-2018','DD-MM-YYYY')),
   PARTITION ORDERHDR_PART_DEC VALUES less than (TO_DATE('01-01-2019','DD-MM-YYYY'))
);
注意,默认情况下,不能删除范围分区表的初始分区。如果遇到此问题,请执行:

ALTER TABLE ORDERHDR_PART SET INTERVAL ();
ALTER TABLE ORDERHDR_PART DROP PARTITION ORDERHDR_INITIAL;
ALTER TABLE ORDERHDR_PART SET INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'));

请指定您正在使用的完整Oracle版本。例如:Oracle数据库12c企业版12.2.0.1.0版。我希望您使用的是12.2,因为该功能在12.1中也不可用,如果您在中发布问题,您可能会得到更好的回答。您是否会问两次相同的问题?