본문 바로가기

Oracle

[Oracle] 시노님(Synonym) 의미 및 생성/조회/삭제

1. 시노님(Synonym) 의미

  • 오라클 객체인 테이블, 뷰, 프로시저, 시퀀스에 대해 별칭을 짓는 것을 의미
  • 객체 자체가 아닌 직접적인 참조를 할 때 사용하기 때문에 보통 다른 스키마의 객체를 참조할 때 많이 사용함.
  • 시노님 없는 경우
SELECT * FROM HR.EMPLOYEE;
  • 시노님 있는 경우(HR.EMPLOYEE의 시노님을 EMPLOYEE로 생성함)
SELECT * FROM EMPLOYEE;

 


 

2. 시노님(Synonym) 사용 이유

  • 다른 스키마의 객체를 참조할 때 해당 객체의 이름이 변경되어도 SQL문을 다 고칠 필요 없이 시노님만 재정의 하면 됨.
  • 시노님을 짧은 이름으로 짓는다면, SQL문 단순화 시킬 수 있음
  • 실제 스키마의 객체를 숨길 수 있어 보안 유지 가능
  • 시노님을 사용할 수 있는 권한이 있는 사용자라면, 참조하고 있는 객체의 소유자, 서버와 같은 정보를 모르더라도 사용 가능.

 


 

3. 시노님(Synonym) 종류

  3-1. PUBLIC Synonym

  • 모든 사용자가 해당 시노님 사용할 수 있음. 모든 사용자에게 공유되는 공용자원임.
  • DBA가 관리.

 

  3-2. PRIVATE Synonym

  • 일반적으로 시노님은 PRIVATE 시노님으로 생성됨
  • 시노님을 생성한 스키마 소유자만 해당 시노님 사용 가능
  • USER_A만 시노님명_A 사용 가능
CREATE SYNONYM 시노님명_A FOR USER_A.TABLE_A;
  • 다른 사용자(USER_B)가 USER_A의 시노님을 사용하려면, 시노님 소유자의 스키마를 명시적으로 지정해야함.
SELECT * FROM USER_A.TABLE_A;

 

 


 

4. 시노님(Synonym) 생성

  4-1. 생성을 위한 권한 필요(DBA 권한이 있는 sys계정으로 진행)

GRANT CREATE SYNONYM, PUBLIC SYNONYM TO 사용자_A;

 

  4-2. 생성하기

CREATE [OR REPLACE] [PUBLIC] SYNONYM '스키마명.시노님명' FOR '스키마명.대상오브젝트명';
  • 기존에 있는 시노님을 덮어쓰는 경우 OR REPLACE 지정.
  • 이미 존재하는 시노님 이름으로 생성한다면, 자동으로 재작성되며 덮어쓰기가 됨.
  • PUBLIC 시노님의 경우 필수적으로 CREATE PUBLIC SYNONYM 명령어 사용해야함
  • 함수, 프로시저도 시노님 생성 가능
  • 시노님을 이용해 오브젝트를 사용할 때는, 오브젝트에 대한 권한이 필요함(SELECT, UPDATE, INSERT, DELETE 등)

 


 

5. 시노님(Synonym) 조회

테이블명 의미
DBA_SYNONYMS 데이터베이스의 모든 시노님 조회(시스템 계정으로 DBA만 조회 가능)
ALL_SYNONYMS 현재 사용자가 사용 가능한(엑세스 할 수 있는) 시노님
USER_SYNONYMS 현재 사용자가 소유한 시노님 정보

 


 

6. 시노님(Synonym) 이름변경

RENAME 기존시노님명 TO 변경할시노님명;

 


 

7. 시노님(Synonym)  삭제

  • PUBLIC 시노님은 꼭 PUBLIC을 붙여 삭제해야함
DROP [PUBLIC/PRIVATE] SYNONYM 시노님명;

 

  • 테이블이 삭제될 때 시노님은 삭제되지 않으니, 테이블이 없는데, 시노님이 있는 경우도 삭제해야함(PRIVATE인 경우)
SELECT 'DROP SYNONYM '||OWNER||'.'|| SYNONYM_NAME ||';'
  FROM DBA_SYNONYMS a 
 WHERE (a.TABLE_OWNER , a.TABLE_name) NOT IN (SELECT owner, table_name FROM dba_Tables WHERE OWNER IN (조건))
   AND OWNER <> 'PUBLIC'
   AND OWNER <> 'SYS'
 ORDER BY OWNER, SYNONYM_NAME 
;

 

  • 시노님 삭제를 하기 위해서는 DROP SYNONYM(또는 DROP ANY SYNONYM), DROP PULBIC SYNONYM 권한이 필요함
-- 시스템 계정에서 실행
GRANT DROP SYNONYM, DROP PUBLIC SYNONYM TO 사용자_A;