Oracle 12.2:无法对未分区的表进行分区

Oracle 12.2:无法对未分区的表进行分区,oracle,oracle12c,partitioning,Oracle,Oracle12c,Partitioning,尝试从非分区表创建分区表。表在dba_表中列为partitioned=NO,所有索引都是index_type=NORMAL read from user_索引。使用Oracle 12.2,也使用兼容模式12.2 正在尝试运行以下代码: ALTER TABLE my_big_table MODIFY PARTITION BY RANGE (year) INTERVAL (5) ( PARTITION p1 VALUES LESS THAN (2000), PARTITION p2 VAL

尝试从非分区表创建分区表。表在dba_表中列为partitioned=NO,所有索引都是index_type=NORMAL read from user_索引。使用Oracle 12.2,也使用兼容模式12.2

正在尝试运行以下代码:

ALTER TABLE my_big_table MODIFY
 PARTITION BY RANGE (year) INTERVAL (5) (
  PARTITION p1 VALUES LESS THAN (2000),
  PARTITION p2 VALUES LESS THAN (2005),
  PARTITION p3 VALUES LESS THAN (2010),
  PARTITION p4 VALUES LESS THAN (2015),
  PARTITION p5 VALUES LESS THAN (2020))
UPDATE INDEXES ONLINE;
返回的错误为ORA-14427:表不支持修改分区状态DDL

但是,在来自同一数据库、方案和同一用户的另一个大表上运行上述SQL代码,可以成功地对另一个表进行分区

如何获得有关我的“大”表无法分区的更多详细信息

下面是从dbms_元数据导出的DDL。获取_DDL('TABLE','MY_BIG_TABLE','MY_SCHEME')。所有姓名均已匿名:

  CREATE TABLE "..."."..." 
   (
    "..." VARCHAR2(3) NOT NULL ENABLE, 
    "..." VARCHAR2(30) NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." VARCHAR2(20), 
    "..." VARCHAR2(20) NOT NULL ENABLE, 
    "..." VARCHAR2(20) NOT NULL ENABLE, 
    "..." VARCHAR2(1) NOT NULL ENABLE, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(12), 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(1) NOT NULL ENABLE, 
    "..." DATE, 
    "..." DATE, 
    "..." DATE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." FLOAT(126), 
    "..." VARCHAR2(20), 
    "..." VARCHAR2(20), 
    "..." FLOAT(126), 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(3), 
    "..." VARCHAR2(80), 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(30) DEFAULT '', 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(30), 
    "..." VARCHAR2(30), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." NUMBER NOT NULL ENABLE, 
    "..." DATE NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0, 
    "..." FLOAT(126), 
    "..." FLOAT(126) NOT NULL ENABLE, 
    "..." FLOAT(126) DEFAULT 0 NOT NULL ENABLE, 
    "..." DATE, 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." VARCHAR2(38), 
    "..." DATE, 
    "..." NUMBER(10,8) DEFAULT 0 NOT NULL ENABLE, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(1) DEFAULT 'N' NOT NULL ENABLE, 
    "..." VARCHAR2(20), 
    "..." NUMBER, 
    "..." DATE, 
    "..." FLOAT(126), 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." FLOAT(126), 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(1), 
    "..." VARCHAR2(1) DEFAULT 'Y' NOT NULL ENABLE, 
    "..." FLOAT(126), 
    "..." DATE, 
    "..." NUMBER NOT NULL ENABLE, 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(20), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." FLOAT(126), 
    "..." NUMBER, 
    "..." NUMBER, 
    "..." VARCHAR2(5) DEFAULT 'USD' NOT NULL ENABLE, 
     CONSTRAINT "..." UNIQUE ("...")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 11550720 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "..."  ENABLE, 
     CONSTRAINT "..." CHECK ( ASSUMED_OS_DATE_UPDATE_IND IN ('Y','N')) ENABLE, 
     CONSTRAINT "..." CHECK ( KEEP_ALL_QUOTES_IND IN ('Y','N')) ENABLE, 
     CONSTRAINT "..." PRIMARY KEY ("...", "...", "...", "...", "...", "...")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 8396800 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "..."  ENABLE, 
     CONSTRAINT "..." UNIQUE ("...")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "..."  ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...", "...", "...", "...", "...")
      REFERENCES "..."."..." ("...", "...", "...", "...", "...") ON DELETE CASCADE ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE, 
     CONSTRAINT "..." FOREIGN KEY ("...")
      REFERENCES "..."."..." ("...") ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 77905920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "..." 
解决方案:

错误是由物化视图依赖项引起的。删除物化视图解决了这个问题,并且没有出现无法对非分区表进行分区的错误。在要分区的表上使用SQL Developer列出的依赖项

Oracle数据库应该更具体地说明错误消息。错误应告知依赖性问题,即具体化视图的特定名称,而不是显示通用ORA-14427:表不支持修改分区状态DDL


已创建Oracle支持票证(SR 3-19188124751),并将此问题与修复一起通知。

您确定
我的大表
尚未分区吗?您的声明基本上没有问题。所以问题是
my_big_表
表的定义。如果您无法找出实际问题所在,则需要编辑问题并在此处发布完整的DDL。如果原始表已分区,则会得到完整的DDL。因此,请仔细检查该表是否未按您所说的那样分区。共享my_big_tables的DDL选择从dba_tables分区,其中table_name='my_big_table';--显示NO,这将使其成为非分区表