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

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

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

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

Ошибка ORA-02291: integrity constraint violated - parent key not found

Обновлено: 26.08.2026 · Официальная документация ↗
  • Запросы INSERT или UPDATE завершаются с ошибкой ORA-02291: integrity constraint (SCHEMA.FK_NAME) violated - parent key not found.
  • Вставка дочерней записи ссылается на несуществующий первичный или уникальный ключ в родительской таблице.
  • Сбои в ETL-процессах и синхронизации данных между базами.

1. Определение таблицы и полей внешнего ключа

SELECT a.table_name AS child_table, 
       a.constraint_name AS fk_name, 
       c_pk.table_name AS parent_table,
       b.column_name AS fk_column
FROM all_constraints a
JOIN all_cons_columns b ON a.constraint_name = b.constraint_name
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 DISTINCT child.fk_column 
FROM child_table child 
LEFT JOIN parent_table parent ON child.fk_column = parent.pk_column
WHERE parent.pk_column IS NULL;

3. Временное отключение ограничения для массовой загрузки (Осторожно)

ALTER TABLE child_table DISABLE CONSTRAINT fk_name;

-- Выполнение загрузки родительских и дочерних данных...

-- Включение с проверкой целостности
ALTER TABLE child_table ENABLE CONSTRAINT fk_name;

4. Включение ограничения в режиме NOVALIDATE

Если в таблице уже есть исторические некорректные данные, но новые нужно валидировать:

ALTER TABLE child_table ENABLE NOVALIDATE CONSTRAINT fk_name;
💡 Практика специалистов: В типовых базах 1С внешние ключи (FK) на уровне СУБД Oracle обычно не создаются (целостность контролируется платформой на уровне метаданных). Ошибка ORA-02291 характерна для кастомных таблиц, системных схем и прямых SQL-интеграций.

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

Почему возникает ORA-02291?

Значение, вставляемое в столбец с Foreign Key, отсутствует в родительской таблице (в столбце Primary Key или Unique Constraint), что нарушает реляционную целостность.

Как найти имя ограничения, если текст ошибки обрезан?

Запросите ALL_CONSTRAINTS по маске constraint_name из текста системного исключения.

Может ли значение NULL в столбце Foreign Key вызвать ORA-02291?

Нет, значение NULL в столбце внешнего ключа допускается стандартом SQL и не проверяется по родительской таблице (если на столбце нет ограничения NOT NULL).

Что такое DEFERRABLE Foreign Key?

Это ограничение, проверка которого может быть отложена до момента выполнения COMMIT (SET CONSTRAINTS ALL DEFERRED), позволяя вставлять дочерние строки раньше родительских внутри одной транзакции.

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