Обновление больших таблиц с заменой строк выполняется в ORA-30036: невозможно расширить сегмент - PullRequest
0 голосов
/ 24 января 2019

Обновление больших таблиц с заменой строк выполняется в ORA-30036: невозможно расширить сегмент

Таблица похожа (с индексом на ID):

CREATE TABLE "DB"."C_DATA" 
(   
        "ID" VARCHAR2(32 CHAR) NOT NULL ENABLE, 
    "KEY" VARCHAR2(512 CHAR) NOT NULL ENABLE, 
    "VALUE" CLOB, 
    "UNIQUE_ID" VARCHAR2(512 CHAR), 
    "DT_CREATE" TIMESTAMP (6) DEFAULT sysdate, 
    CONSTRAINT "C_DATA_PK" PRIMARY KEY ("ID")
)

В столбце VALUE находятся строки различной длины от нескольких символов до 1000 символов. Я должен обновить столбец и заменить некоторые символы, скажем, заменить запятые на точки с запятой:

UPDATE DB.C_DATA tbl
   SET VALUE = REPLACE(tbl.VALUE, ',', ';')
   WHERE VALUE like '%,%';

С этим у меня сейчас две проблемы:
1) Когда я запускаю это, я сталкиваюсь с «ORA-30036: невозможно расширить сегмент…»
2) Для некоторых значений мне кажется, что это не работает, и не все символы заменены правильно.

Add2: если я работаю с меньшим набором данных, у меня возникает проблема, заключающаяся в том, что для более длинных записей он, кажется, не выполняет свою работу. Так же, как игнорирование замены. (это связано со второй проблемой?)

Add1: как только я тестирую с большим набором данных в БД, он выходит из строя, как ORA-30036 (даже не думая о полном наборе данных (50.000.000 строк)) Ясно, что табличное пространство может быть увеличено, но сейчас это не вариант, Будет ли способ указать базе данных разбить этот оператор на меньшие задания и выполнять их друг за другом, чтобы не иметь полного набора в пространстве отмены? Отсутствие этого выполнения / применения не будет проблемой (если оно заканчивается за конечное время). Если это не выполнимо в оракуле SQL / PLSQL - какой (сценарий) подход был бы возможен?

...