4

現在VARCHAR2(200)、データベースにはありますが、に上げる必要があるためVARCHAR(1000)、次のスクリプトを実行しようとしています:

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

オラクルは私にこれを与えます:

ORA-01429: 索引構成表: オーバーフロー行ピースを格納するデータ・セグメントがありません

これは 10g データベースです。どうしたの?重複した列を作成し、データをコピーしてから古い列を削除することもできますが、それを行う前に、このエラーが何であるかを最初に知りたいです。

4

2 に答える 2

13

ドキュメントによると、行が大きすぎて 1 つのブロックに収まらない場合は、オーバーフロー セグメントを指定する必要があります。

考慮してください (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
于 2011-04-26T14:45:34.453 に答える