SQL_SYNONYM 생성/삭제 & DATA DICTIONARY
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 |
동의어의 생성/삭제 방법과 데이터 딕셔너리를 살펴보았습니다.
동의어를 생성하면 다른 계정에서 사용을 허가받은 테이블의 이름을 편리하게 작성할 수 있습니다.