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

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

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

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

Ошибка ORA-02292: integrity constraint violated - child record found

Обновлено: 26.08.2026 · Официальная документация ↗
  • Операции DELETE или TRUNCATE завершаются с ошибкой ORA-02292: integrity constraint (SCHEMA.FK_NAME) violated - child record found.
  • Попытка удалить строку из справочника/таблицы блокируется наличием связанных строк в зависимых таблицах.
  • Очистка устаревших архивных данных завершается аварийным откатом транзакции.

1. Поиск дочерней таблицы, вызвавшей блокировку удаления

SELECT a.table_name AS child_table, 
       a.constraint_name, 
       c_pk.table_name AS parent_table
FROM all_constraints a
JOIN all_constraints c_pk ON a.r_constraint_name = c_pk.constraint_name
WHERE a.constraint_name = 'FK_NAME' AND a.owner = 'SCHEMA_NAME';

2. Просмотр зависимых дочерних записей

SELECT * FROM child_table WHERE parent_id_fk = 12345;

3. Настройка каскадного удаления (ON DELETE CASCADE)

Пересоздайте ограничение внешнего ключа для автоматического удаления дочерних строк:

ALTER TABLE child_table DROP CONSTRAINT fk_name;

ALTER TABLE child_table ADD CONSTRAINT fk_name 
  FOREIGN KEY (parent_id_fk) REFERENCES parent_table(id) 
  ON DELETE CASCADE;

4. Удаление зависимых записей вручную

DELETE FROM child_table WHERE parent_id_fk = 12345;
DELETE FROM parent_table WHERE id = 12345;
COMMIT;
💡 Практика специалистов: Всегда создавайте B-Tree индексы на столбцах внешних ключей в дочерних таблицах. Это не только предотвращает тяжелые локи TM при DELETE, но и кардинально ускоряет валидацию ORA-02292.

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

Почему TRUNCATE TABLE падает с ошибкой ORA-02266 / ORA-02292?

Команда TRUNCATE является DDL-операцией и не может выполняться на таблице, на которую ссылаются включенные внешние ключи других таблиц, даже если дочерние таблицы пусты.

Что делает опция ON DELETE SET NULL?

При удалении записи в родительской таблице Oracle автоматически установит значение NULL в соответствующих полях дочерней таблицы вместо генерации ошибки ORA-02292.

Как временно удалить данные без удаления дочерних строк?

Отключите ограничение: ALTER TABLE child_table DISABLE CONSTRAINT fk_name; выполните удаление и включите обратно в режиме NOVALIDATE.

Влияет ли отсутствие индекса на внешнем ключе на скорость удаления?

Да, если на столбцах Foreign Key в дочерней таблице нет индекса, удаление строки из родительской таблицы вызывает полную блокировку всей дочерней таблицы (Table Share Lock).

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