2026년 07월 14일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01432 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01432 public synonym to be dropped does not exist 는?
ORA-01432 에러는 Oracle 데이터베이스에서 DROP PUBLIC SYNONYM 명령어를 실행할 때, 삭제하려는 공용 동의어(Public Synonym)가 실제로 존재하지 않을 경우 발생하는 에러입니다. 주로 이미 삭제된 동의어를 다시 삭제하려 하거나, 동의어 이름을 잘못 입력했을 때 나타납니다. 특히 배포 스크립트나 마이그레이션 작업 중 동의어 관리가 체계적으로 이루어지지 않으면 자주 마주치게 되는 에러입니다.
주요 발생 원인
1. 존재하지 않는 Public Synonym 삭제 시도
가장 빈번하게 발생하는 원인으로, 이미 삭제되었거나 애초에 생성되지 않은 Public Synonym을 DROP하려고 할 때 발생합니다. 배포 스크립트를 반복 실행하거나, 다른 담당자가 먼저 해당 동의어를 삭제한 이후에 동일한 스크립트를 재실행하는 경우에 자주 나타납니다. 운영 환경과 개발 환경 간의 동기화가 맞지 않아 발생하는 경우도 많습니다.
2. Public Synonym과 Private Synonym 혼동
Public Synonym 대신 Private(일반) Synonym이 생성되어 있는 경우, DROP PUBLIC SYNONYM 명령으로는 해당 동의어를 삭제할 수 없어 에러가 발생합니다. Oracle에서 Public Synonym은 DBA_SYNONYMS 뷰의 OWNER 컬럼 값이 PUBLIC으로 설정된 것이며, 일반 Synonym과는 완전히 별개의 객체로 관리됩니다. 이를 혼동하여 잘못된 DROP 명령어를 실행하면 ORA-01432가 발생합니다.
3. 오타 또는 대소문자 오류로 인한 동의어 이름 불일치
Oracle에서 객체 이름은 기본적으로 대문자로 저장되지만, 따옴표(“)를 사용해 소문자 또는 혼합 케이스로 생성된 동의어는 정확한 이름을 입력해야 조회 및 삭제가 가능합니다. 동의어 이름에 오타가 있거나, 생성 시 사용한 이름과 다른 케이스로 입력할 경우 Oracle은 해당 동의어를 찾지 못해 ORA-01432 에러를 반환합니다. 특히 타 시스템에서 마이그레이션된 스크립트를 그대로 사용하는 경우 이런 문제가 발생하기 쉽습니다.
해결 방법
해결책 1: 동의어 존재 여부 먼저 확인 후 삭제
Public Synonym을 삭제하기 전에 반드시 DBA_SYNONYMS 또는 ALL_SYNONYMS 뷰를 통해 존재 여부를 확인합니다.
-- Public Synonym 존재 여부 확인
SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME
FROM DBA_SYNONYMS
WHERE SYNONYM_NAME = 'MY_SYNONYM'
AND OWNER = 'PUBLIC';
-- 존재할 경우에만 삭제
DROP PUBLIC SYNONYM MY_SYNONYM;
해결책 2: IF EXISTS 패턴을 활용한 안전한 삭제 (PL/SQL)
Oracle 23c 이전 버전에서는 DROP ... IF EXISTS 구문을 지원하지 않으므로, PL/SQL 예외 처리를 활용해 안전하게 삭제하는 방법을 권장합니다.
-- PL/SQL을 이용한 안전한 Public Synonym 삭제
BEGIN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM MY_SYNONYM';
DBMS_OUTPUT.PUT_LINE('Public Synonym MY_SYNONYM 삭제 완료');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -1432 THEN
DBMS_OUTPUT.PUT_LINE('Public Synonym MY_SYNONYM 이 존재하지 않아 삭제를 건너뜁니다.');
ELSE
RAISE;
END IF;
END;
/
해결책 3: Private Synonym과 혼동 시 구분하여 처리
동의어가 Public인지 Private인지 정확히 구분한 후 적절한 명령어를 사용합니다.
-- Public Synonym 목록 조회
SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, DB_LINK
FROM DBA_SYNONYMS
WHERE OWNER = 'PUBLIC'
AND SYNONYM_NAME LIKE 'MY%'
ORDER BY SYNONYM_NAME;
-- Private Synonym 목록 조회 (특정 사용자 소유)
SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME
FROM DBA_SYNONYMS
WHERE OWNER = 'SCOTT'
AND SYNONYM_NAME LIKE 'MY%';
-- Public Synonym 삭제 (DBA 권한 필요)
DROP PUBLIC SYNONYM MY_SYNONYM;
-- Private Synonym 삭제 (해당 스키마 권한 필요)
DROP SYNONYM SCOTT.MY_SYNONYM;
해결책 4: 대소문자 구분 동의어 처리
따옴표로 생성된 대소문자 구분 동의어를 삭제할 때는 정확한 이름을 따옴표와 함께 사용해야 합니다.
-- 대소문자 구분 동의어 확인
SELECT SYNONYM_NAME
FROM DBA_SYNONYMS
WHERE OWNER = 'PUBLIC'
AND SYNONYM_NAME = 'my_synonym'; -- 소문자로 저장된 경우
-- 대소문자 구분 동의어 삭제 (큰따옴표 필수)
DROP PUBLIC SYNONYM "my_synonym";
해결책 5: Oracle 23c에서 IF EXISTS 구문 사용
Oracle 23c 이상을 사용하는 경우, IF EXISTS 구문을 직접 활용할 수 있습니다.
-- Oracle 23c 이상에서 사용 가능
DROP PUBLIC SYNONYM IF EXISTS MY_SYNONYM;
예방 방법
1. 배포 스크립트에 조건부 삭제 로직 표준화
운영 환경에 배포되는 모든 스크립트에서 Public Synonym을 삭제할 때는 반드시 존재 여부를 먼저 확인하는 PL/SQL 래퍼(wrapper)를 표준 템플릿으로 사용해야 합니다. 이를 팀 내 코딩 컨벤션으로 확립하고, 코드 리뷰 시 체크리스트 항목에 포함시키면 ORA-01432 에러를 원천적으로 방지할 수 있습니다.
-- 표준 배포 스크립트 템플릿 예시
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM DBA_SYNONYMS
WHERE OWNER = 'PUBLIC'
AND SYNONYM_NAME = 'MY_SYNONYM';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM MY_SYNONYM';
DBMS_OUTPUT.PUT_LINE('[SUCCESS] MY_SYNONYM 삭제 완료');
ELSE
DBMS_OUTPUT.PUT_LINE('[SKIP] MY_SYNONYM 존재하지 않음, 삭제 건너뜀');
END IF;
END;
/
2. 동의어 관리 대장(Synonym Inventory) 유지
개발, 스테이징, 운영 환경별로 현재 존재하는 Public Synonym 목록을 주기적으로 추출하여 관리 대장을 유지하는 것이 중요합니다. 배포 전후로 동의어 목록을 비교하면 누락이나 중복 삭제를 사전에 방지할 수 있으며, 환경 간 불일치 문제도 조기에 발견할 수 있습니다.
-- 환경별 Public Synonym 현황 추출 쿼리
SELECT OWNER,
SYNONYM_NAME,
TABLE_OWNER,
TABLE_NAME,
DB_LINK,
SYSDATE AS SNAPSHOT_DATE
FROM DBA_SYNONYMS
WHERE OWNER = 'PUBLIC'
ORDER BY SYNONYM_NAME;
관련 에러
- ORA-01431:
PUBLIC키워드 없이 공용 동의어를 생성하려 할 때 발생하는 권한 관련 에러 - ORA-00955: 동일한 이름의 객체가 이미 존재할 때 발생하며, Public Synonym 생성 시 중복 이름으로 자주 나타남
- ORA-01434: Private Synonym이 존재하지 않을 때
DROP SYNONYM명령 실행 시 발생 (ORA-01432의 Private 버전) - ORA-01775: Public Synonym이 참조하는 객체가 존재하지 않거나 루프를 형성할 때 발생하는 동의어 체인 에러
- ORA-00980: Public Synonym이 가리키는 대상 객체가 존재하지 않을 때 쿼리 실행 중 발생하는 에러
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.