Data Base_Oracle/SQL

SQL_SYNONYM 생성/삭제 & DATA DICTIONARY

pathas 2020. 1. 10. 16:31

SYNONYM 생성_PRIVATE

동의어를 생성하기 위해서는 관리자로부터
create synonym 권한을 부여받아야 함

§ 형식

[ SQL> create synonym 동의어이름 for 대상객체명(=테이블명); ]

# 예제

▶ b_dept2에 buser라는 동의어 생성
[ SQL> create synonym buser for b_dept2;
동의어가 생성되었습니다.
select * from tab; ]

TNAME TABTYPE CLUSTERID
BUSER SYONONYM  
... ... ...

▷ buser 테이블 확인
[ SQL> select * from buser; ]

DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU

▷ buser 테이블에서 부서번호가 50인 레코드 삭제
[ SQL> delete from buser where deptno=50;
1 행이 삭제되었습니다.
select * from buser ;
select * from b_dept2; ]

DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

※ buser에서 삭제한 내용이 b_dept2에도 반영됨
즉, 동의어는 테이블의 별칭이라고 할 수 있음

SYNONYM 생성_PUBLIC

관리자가 만들어 주는 모든 계정에서 사용 가능한 공용 동의어

§ 형식

[ SQL> create [public] synonym 동의어명 for 소유자명.테이블명; ]

 

※ 관리자가 특정 계정의 테이블에 접근할 권한을 임의로 줄 수 없기 때문에
이미 소유자에 의해 권한이 부여된 상태여야 함

# 예제

▷ 관리자 계정 로그인
[ SQL> conn sys/##### as sysdba
연결되었습니다. ]

 

▶ scott이 test1에 권한을 부여한 b_dept2 테이블에 공용 동의어 생성
[ SQL> create public synonym butest for scott.b_dept2;
동의어가 생성되었습니다. ]

 

▷ test1 계정에서 butest 동의어 확인
[ SQL> select * from butest; ]

DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 TEST SEOUL

※ scott 계정에서는 butest 동의어를 사용할 수 있지만
test1 이외의 일반 계정은 scott에게 권한을 부여받지 않았기 때문에 사용 불가

SYNONYM 삭제

권한이 회수되어도 동의어가 자동으로 삭제되지는 않기 때문에
수동으로 삭제 해주어야 함

§ 형식

private synonym 삭제
[ SQL> drop synonym 동의어명; ]

 

public synonym 삭제
[ SQL> drop [public] synonym 동의어명; ]

# 예제

▶ test1 계정에서 buser2 동의어 삭제
[ SQL> drop synonym buser2;
동의어가 삭제되었습니다. ]

 

▷ test 1 계정에서 butest 공용 동의어 삭제
[ SQL> drop synonym butest;
1행에 오류:
ORA-01434: 삭제할 비공개 동의어가 존재하지 않습니다 ]

 

※ butest는 sys계정에서 생성한 것이기 때문에 발생하는 에러
sys계정으로 로그인해서 삭제해야함

SYNONYM DATA DICTIONARY

user_synonyms
동의어 이름, 테이블 소유 계정, 테이블 이름, DB 링크 정보가 담겨 있는 Oracle 자체 테이블

 

▷ user_synonyms 구조 확인
[ SQL> desc user_synonyms ]

이름 널? 유형
SYNONYM_NAME NOT NULL VARCHAR2(30)
TABLE_OWNER   VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
DB_LINK   VARCHAR2(128)

▷ user_synonyms 내용 확인
[ SQL> select * from user_synonyms ]

SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
BUSER SCOTT B_DEPT2  

동의어의 생성/삭제 방법과 데이터 딕셔너리를 살펴보았습니다.

동의어를 생성하면 다른 계정에서 사용을 허가받은 테이블의 이름을 편리하게 작성할 수 있습니다.