본문 바로가기
Dev. Cookbook/SQL, Oracle, MariaDB

[ORACLE] 시노님(Synonym) 삭제 오류, ORA-01434 : private synonym to be dropped does not exist

by breezyday 2022. 4. 26.

Oracle에서 Synonym은 Oracle 객체(Table, View, Sqeuence, Procedure 등)에 대체되는 이름을 말합니다.

 

Synonym은 다른 사용자의 객체를 참조할 때 많이 사용합니다. 다른 사용자의 객체를 참조할 경우, Synonym을 생성해서 사용하면 추후 참조하고 있는 객체가 이름을 바꾸거나 이동할 경우 객체를 사용하는 모든 SQL문을 수정하는 것이 아니라 Synonym 만 다시 정의하여 사용할 수 있습니다.

또한 Synonym은 객체의 이름이 길거나 어려운 경우 사용하기 편리한 짧은 이름을 주어 SQL 코딩을 단순화할 수 있습니다. 객체의 소유나 권한을 제한하는 데도 사용되어 Synonym을 사용하려면 이름만 알면 사용할 수 있습니다.

1. Synonym 문법

synonym을 생성 및 삭제 하는 기본 문법은 아래와 같습니다.

 

-- synonym 생성
CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명 
FOR [스키마명.]객체명;

-- synonym 삭제
DROP [PUBLIC] SYNONYM [스키마명.]시노님명;

2. Synonym 생성 및 삭제

-- Synonym 생성 : ora_user로 작업
CREATE OR REPLACE SYNONYM syn_channel FOR channels;
CREATE OR REPLACE PUBLIC SYNONYM syn_channel FOR channels;

-- Synonym 생성 확인
SELECT * FROM all_synonyms
 WHERE table_name = 'CHANNELS';

 

all_synonyms 조회 결과

 

PUBLIC synonymPRIVATE synonym구별됩니다.

위 생성 결과를 보면 synonym 이름이 같은 것을 확인할 수 있습니다. 

 

따라서 삭제할 때의 SQL문도 PUBLIC과 PRIVATE를 구별하여 작성해야 합니다.

 

DROP SYNONYM syn_channel;
DROP PUBLIC SYNONYM syn_channel;

 

만약 PUBLIC을 명시하지않고 PUBLIC synonym을 삭제하거나,

PRIVATE synonym을 PUBLIC을 명시하고 삭제하려고 하면, 이미 삭제된 경우 아래와 같은 오류가 발생합니다.

 

ORA-01432: public synonym to be dropped does not exist 오류

ORA-01434: private synonym to be dropped does not exist 오류

 

ORA-01432: 삭제할 공개 동의어가 존재하지 않습니다
01432. 00000 -  "public synonym to be dropped does not exist"

 

ORA-01434: 삭제할 비공개 동의어가 존재하지 않습니다
01434. 00000 -  "private synonym to be dropped does not exist"

 

위의 오류가 발생한다면 synonym이 PRIVATE 인지 PUBLIC 인지 확인하고 다시 시도해 보면 됩니다.

 

 

제목 배경 이미지

댓글