SQL----- Ошибка при попытке экспортировать результаты запроса в CSV

Я выполняю большой запрос (6 миллионов записей), в котором много ВНУТРЕННИХ СОЕДИНЕНИЙ с другими таблицами, но когда я пытаюсь экспортировать результаты запроса в CSV, я получаю следующие результаты. Некоторое время я гуглил, но результата не было.

ORA-01555: snapshot too old: rollback segment number 69 with name
"_SYSSMU69_2356811035$" too small
ORA-0263: "snapshot too old: rollback segment number %s with name \"%s\" too small" 
*Cause: rollback records needed by a reader for consistent read are overwritten by other writers
*Action:  If in Automatic Undo Management mode, increase undo_retention setting. Otherwise, rollback segments 
Vendor code 1555

1 ответ

Позвольте мне объяснить вам, что происходит. Когда Oracle выполняет запрос, результат запроса, независимо от того, сколько времени занимает запрос, должен соответствовать картине этих данных в момент инициации запроса.

Ошибки ORA-1555 могут возникать, когда запрос не может получить достаточно отмены для создания копии данных во время запуска запроса. Зафиксированные "версии" блоков поддерживаются вместе с новыми незафиксированными "версиями" этих блоков, чтобы запросы могли получать доступ к данным, которые существовали в базе данных на момент запроса. Они называются блоками "согласованного чтения" и поддерживаются с помощью управления отменой Oracle.

Эта согласованность обеспечивается табличным пространством UNDO. В вашем случае наиболее вероятный сценарий выглядит следующим образом:

  • Запрос, запускающий csv, запускается в определенный момент времени. Oracle выполняет запрос, чтобы получить 6 миллионов строк, которые были в этих таблицах в тот момент времени.
  • Во время выполнения запроса несколько других процессов выполняют операции DML с затронутыми записями, поэтому данные, которые были до этого, перемещаются в табличное пространство UNDO (сегменты отката - это тип сегментов, хранящихся в табличном пространстве UNDO)
  • Однако, если ваша отмена небольшая или вашего undo_retention недостаточно, для сохранения целостности базы данных Oracle перезапишет эти сегменты отката новыми, если в этом табличном пространстве недостаточно места.

Попробуйте следующее:

  • Увеличить табличное пространство отмены
  • Увеличьте параметр undo_retention.

В старых версиях Oracle есть множество ошибок, связанных с ORA-1555, и другие возможности, когда данные отмены представляют собой сегменты lob и т. Д. Если у вас есть доступ к поддержке, здесь вы найдете основную заметку

ORA-1555 Основная записка

ORA-1555 Диагностика и устранение неисправностей

Другие вопросы по тегам