它目前VARCHAR2(200)
在数据库中,但需要提升到VARCHAR(1000)
,所以我正在尝试运行这个脚本:
ALTER TABLE CONTRACTOR MODIFY
(
NOTE VARCHAR2(1000)
);
甲骨文给了我这个:
ORA-01429: 索引组织表: 没有数据段来存储溢出的行片段
这是一个 10g 的数据库。有什么想法吗?我可以创建一个重复的列,复制数据,然后删除旧列,但在我这样做之前我想先知道这个错误是什么。
它目前VARCHAR2(200)
在数据库中,但需要提升到VARCHAR(1000)
,所以我正在尝试运行这个脚本:
ALTER TABLE CONTRACTOR MODIFY
(
NOTE VARCHAR2(1000)
);
甲骨文给了我这个:
ORA-01429: 索引组织表: 没有数据段来存储溢出的行片段
这是一个 10g 的数据库。有什么想法吗?我可以创建一个重复的列,复制数据,然后删除旧列,但在我这样做之前我想先知道这个错误是什么。
根据文档,您需要为可能太大而无法放入单个块中的行指定溢出段。
考虑(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
当我在谷歌上搜索“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 粉丝感兴趣。