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 에러는 무조건 자식 테이블부터 확인한다"
이 원칙만 지켜도 대부분의 문제는 몇 분 안에 해결할 수 있습니다.