ORA-01562: не удалось расширить номер сегмента отката

Я читаю файл построчно и передаю данные в БД после каждой строки. Входной файл содержит 100K строк. Время от времени я получаю ошибку ORA-01562: failed to extend rollback segment number, и это не для конкретной строки и не для определенного файла. Ошибка случайная. Это происходит в производственной системе.

И MAXEXTENTS для этой таблицы уже установлено на UNLIMITED. Я не могу воспроизвести ошибку в своей среде разработки.

Как справиться с этим сценарием? Какие еще шаги мне нужно предпринять, чтобы я не получил эту ошибку в будущем?


person NJMR    schedule 18.07.2017    source источник
comment
Если это производственная система - просто позвоните в поддержку оракула и откройте кейс. Они помогают очень быстро и имеют глубокие знания. Насколько велики ваши сегменты отката? Вместе с этой ошибкой должна быть и вторая.   -  person Mandraenke    schedule 18.07.2017


Ответы (1)


Что вам нужно сделать, так это shrink сегмент отката или add другой сегмент отката.

В вашем случае похоже, что у вас есть только сегмент отката one, сегмент отката SYSTEM по умолчанию.

Вы должны добавить как минимум еще один сегмент отката.

Вот команды, которые помогут вам

выдавать эти инструкции при входе в систему как пользователь SYSTEM.

Сжатие сегмента отката вручную:

Чтобы сжать сегмент отката с помощью, вы должны иметь системную привилегию ALTER ROLLBACK SEGMENT.

Вы можете вручную уменьшить размер сегмента отката с помощью команды SQL ALTER ROLLBACK SEGMENT. Сегмент отката, который вы пытаетесь сжать, должен быть в сети.

Следующий оператор уменьшает сегмент отката RBS1 до 100 КБ:

ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;

Отображение информации о сегменте отката:

Представление словаря данных DBA_ROLLBACK_SEGS хранит информацию о сегментах отката базы данных. Например, следующий запрос перечисляет имя, связанное табличное пространство и состояние каждого сегмента отката в базе данных:

SELECT segment_name, tablespace_name, status
         FROM sys.dba_rollback_segs;

Вывод

SEGMENT_NAME  TABLESPACE_NAME     STATUS
 ------------- ----------------    ------
SYSTEM        SYSTEM             ONLINE
 PUBLIC_RS     SYSTEM             ONLINE
 USERS_RS      USERS              ONLINE

Создание сегментов отката:

Для создания сегментов отката у вас должна быть системная привилегия CREATE ROLLBACK SEGMENT. Чтобы создать дополнительные сегменты отката для базы данных, используйте либо страницу свойств Create Rollback Segment в Enterprise Manager, либо команду SQL CREATE ROLLBACK SEGMENT. Табличное пространство, содержащее новый сегмент отката, должно быть подключено к сети.

Следующий оператор создает общедоступный сегмент отката с именем USERS_RS в табличном пространстве USERS, используя параметры хранения по умолчанию для табличного пространства USERS:

CREATE PUBLIC ROLLBACK SEGMENT users_rs TABLESPACE users;
person XING    schedule 18.07.2017