【问题标题】:Why am I getting "ORA-01429: Index-Organized Table" when trying to modify column from VARCHAR2(200) to VARCHAR2(1000)?为什么在尝试将列从 VARCHAR2(200) 修改为 VARCHAR2(1000) 时出现“ORA-01429:索引组织表”?
【发布时间】:2011-04-26 13:45:59
【问题描述】:

目前在数据库中是VARCHAR2(200),但需要提升为VARCHAR(1000),所以我正在尝试运行这个脚本:

ALTER TABLE CONTRACTOR MODIFY
(
    NOTE VARCHAR2(1000)
);

Oracle 给了我这个:

ORA-01429:索引组织表:没有数据段来存储溢出的行片段

这是一个 10g 的数据库。有什么想法吗?我可以创建一个重复的列,复制数据,然后删除旧列,但我想先知道这个错误是什么,然后再这样做。

【问题讨论】:

    标签: oracle alter-table varchar2


    【解决方案1】:

    根据documentation,您需要为可能太大而无法放入单个块中的行指定溢出段。

    考虑(10.2.0.3 -- 8k 块):

    SQL> CREATE TABLE contractor (
      2     ID NUMBER PRIMARY KEY,
      3     data_1 CHAR(1000),
      4     data_2 CHAR(1000),
      5     data_3 CHAR(1000),
      6     data_4 CHAR(1000),
      7     data_5 CHAR(1000),
      8     NOTE VARCHAR2(200)
      9  ) 
     10  ORGANIZATION INDEX;
    
    ORA-01429: Index-Organized Table: no data segment to store overflow row-pieces
    

    但是,当你指定一个溢出段时:

    SQL> CREATE TABLE contractor (
      2     ID NUMBER PRIMARY KEY,
      3     data_1 CHAR(1000),
      4     data_2 CHAR(1000),
      5     data_3 CHAR(1000),
      6     data_4 CHAR(1000),
      7     data_5 CHAR(1000),
      8     NOTE VARCHAR2(200)
      9  )
     10  ORGANIZATION INDEX 
     11  OVERFLOW TABLESPACE USER_DATA;
    
    Table created
    

    【讨论】:

    • 而且你不能有任何索引条目跨度块 - 这就是限制仍然存在的原因。您不能在具有 2K 块大小的表空间中索引 VARCHAR2(4000)。
    【解决方案2】:

    我遇到了这个排名很高的页面 当我用谷歌搜索“ORA-01429”时。当我尝试在 Oracle 11G 表中拆分 OVERFLOW 分区时,我也遇到了同样的异常。

    *Incorrect*:
    alter table sales SPLIT PARTITION OVERFLOW at (TO_DATE('01-FEB-2017 00:00:00', 'DD-MON-YYYY HH24:MI:SS')) 
      INTO (PARTITION sales_m01_2017, PARTITION OVERFLOW);
    
    *Fixed*:
    alter table sales SPLIT PARTITION OVERFLOW at (TO_DATE('01-FEB-2017 00:00:00', 'DD-MON-YYYY HH24:MI:SS')) 
      INTO (PARTITION sales_m01_2017, PARTITION "OVERFLOW");
    

    我通过以下方式解决了我的问题: https://community.oracle.com/thread/2244949?tstart=0

    OVERFLOW 必须像“OVERFLOW”一样用双引号引起来。我想在这里分享它是为了让其他在拆分 OVERFLOW 分区时面临相同 ORA 异常的 stackoverflow 粉丝感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 2015-02-27
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2020-06-23
      • 2021-10-03
      • 2011-02-11
      相关资源
      最近更新 更多