Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ORA-01555 1С:Предприятие и СУБД

Ошибка ORA-01555: snapshot too old — причины и решение в Oracle и 1С

Обновлено: 26.08.2026 · Официальная документация ↗
  • Длительные транзакции, пакетные обработки 1С, закрытие месяца или выгрузки данных аварийно прерываются с ошибкой ORA-01555: snapshot too old: rollback segment number ... too small.
  • В alert.log фиксируются регулярные сообщения с указанием Query Duration и SQL ID.
  • Вью V$UNDOSTAT фиксирует частые ненулевые значения в столбце SSOLDERRCNT (Snapshot Too Old Error Count).

1. Анализ статистики UNDO и длительности проблемного запроса

Выполните запрос для определения пиковой длительности запросов и нехватки времени хранения undo-данных:

SELECT begin_time, end_time, undoblks, maxquerylen, ssolvercnt, ssolderrcnt 
FROM v$undostat 
ORDER BY begin_time DESC;

2. Увеличение параметра UNDO_RETENTION

Установите значение параметра UNDO_RETENTION (в секундах) больше, чем максимальная длительность выполняемых транзакций/отчетов (например, 4 часа = 14400 сек):

ALTER SYSTEM SET undo_retention = 14400 SCOPE=BOTH;

3. Включение режима гарантии хранения UNDO (RETENTION GUARANTEE)

По умолчанию Oracle может перезаписать unexpired undo-блоки при нехватке места в табличном пространстве. Включение гарантии запрещает перезапись:

ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;

4. Расширение табличного пространства UNDO

Если табличное пространство заполнено, увеличьте datafile или включите авторасширение:

ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/DB1/undotbs01.dbf' 
  AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;

5. Оптимизация на стороне приложения (1С / PL/SQL)

  • Исключите коммиты внутри курсорных циклов (FETCH ... COMMIT), которые приводят к инвалидации снимка данных.
  • Для тяжелых запросов 1С оптимизируйте индексы, чтобы сократить время сканирования таблиц.
💡 Практика специалистов: В базах 1С:Предприятие на Oracle ORA-01555 часто возникает при фоновых регламентных заданиях и расчете себестоимости. Всегда включайте RETENTION GUARANTEE и следите за размером UNDO-файлов.

Частые вопросы (FAQ)

Почему возникает ошибка ORA-01555 при механизме Read Consistency?

Oracle обеспечивает согласованность чтения по состоянию на момент запуска запроса (SCN). Если параллельные транзакции изменили данные и зафиксировали их, а соответствующие блоки в UNDO были перезаписаны до завершения чтения, Oracle не может восстановить старую версию блока и генерирует ORA-01555.

Как параметр RETENTION GUARANTEE влияет на DML-операции?

При включенной гарантии, если место в UNDO табличном пространстве исчерпано, новые транзакции модификации данных будут падать с ошибкой ORA-30036 (unable to extend segment), защищая уже запущенные длительные запросы от ORA-01555.

Как рассчитать необходимый размер UNDO Tablespace?

Используйте формулу: Undo_Size = (Max_Query_Length * Undo_Blocks_Per_Second * Block_Size) + Overhead. На практике рекомендуется выделить не менее 32–64 ГБ для высоконагруженных баз 1С.

Может ли ORA-01555 возникнуть из-за задержек фиксации (Delayed Block Cleanout)?

Да, если массивные изменения в блоках не были очищены в момент коммита, следующий запрос полного сканирования таблицы попытается восстановить транзакционную информацию через UNDO и может упасть с ORA-01555.

Полезные материалы
Рекомендуем