← 개발일지

ORA-02292 FK 제약조건 오류 해결 방법


문제: ORA-02292 FK 제약조건 오류

ORA-02292 오류는 Foreign Key(FK) 제약조건 때문에 발생합니다.
부모 데이터를 삭제하거나 수정하려고 할 때, 해당 데이터를 참조하는 자식 레코드가 존재하면 DB가 작업을 막습니다.


환경

  • Database: Oracle
  • Error Code: ORA-02292
  • 상황: DELETE 또는 UPDATE 실행 시 발생

원인: Referential Integrity 보호

이 오류의 핵심은 하나입니다.

"이 데이터를 다른 테이블에서 사용 중인데 왜 삭제하려 하는가?"

즉, DB는 Referential Integrity(참조 무결성) 를 유지하기 위해 삭제를 차단합니다.


해결 방법 (빠른 디버깅 순서)

1. FK 관계 확인

SELECT a.table_name AS child_table,  
c.table_name AS parent_table  
FROM user_constraints a  
JOIN user_constraints c  
ON a.r_constraint_name = c.constraint_name  
WHERE a.constraint_name = 'FK_NAME';

2. 자식 데이터 확인

SELECT *FROM child_tableWHERE fk_column = :id;

여기서 데이터가 조회되면, 이 레코드가 삭제를 막고 있는 원인입니다.


3. 해결 전략

방법 1: 자식 먼저 삭제

DELETE FROM child_table WHERE fk_column = :id;DELETE FROM parent_table WHERE id = :id;

방법 2: ON DELETE CASCADE

자식 데이터를 자동으로 삭제하도록 설정할 수 있습니다.

-- Foreign Key optionON DELETE CASCADE

주의: 대량 삭제 위험


방법 3: Soft Delete (권장)

UPDATE parent_table SET deleted = 'Y' WHERE id = :id;

실무에서 자주 발생하는 실수

잘못된 삭제 순서

// Wrong orderdeleteParent(id);deleteChild(id);

올바른 순서

// Correct orderdeleteChild(id);deleteParent(id);

핵심 정리

  • FK 오류는 데이터 관계 문제이지 단순 SQL 에러가 아니다
  • 항상 child → parent 순서로 처리
  • 설계 단계에서:
    • CASCADE vs Soft Delete 결정 필요

Takeaway

이 오류를 빠르게 해결하려면 한 가지를 기억하면 됩니다.

"FK 에러는 무조건 자식 테이블부터 확인한다"

이 원칙만 지켜도 대부분의 문제는 몇 분 안에 해결할 수 있습니다.