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;
'Oracle' 카테고리의 다른 글
[Oracle] 오라클 데이터베이스 초기화 파라미터 (1) | 2025.05.03 |
---|---|
[Oracle] spfile에서 pfile로 복사해서 비교하기 (0) | 2025.05.03 |
[Oracle] User별 Quota 확인 및 변경(+ Unlimited Tablespace) (0) | 2025.05.03 |
[Oracle] 권한 관리(부여/회수) 및 ROLE 관리 (0) | 2025.05.03 |
[Oracle] DB Link 사용 방법(생성, 삭제, 조회, ORA-12154, ORA-01017에러) (0) | 2025.05.01 |