스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

ORACLE Synonym 본문

개발/Oracle SQL

ORACLE Synonym

워너-비 2018. 7. 18. 11:31

Synonym

 

목적

Synonyms 오라클 데이터베이스 객체인 테이블, 뷰, 시퀀스, 프로시저 등을 참조하는 Alias이다.

(객체 자체가 아닌 참조만하는 것에 유의한다.)

기본적으로 데이터베이스에서 개체를 찾으면 자신의 스키마에서 개체를 검색한다. 따라서 타 사용자의 스키마에서 객체를 조회하려고 하면 오라클이 오류를 반환한다.

 

 

장점 및 사용이유

1. Synonyms은 객체의 참조를 보다 쉽게 만든다.

다른 스키마의 객체를 참조할 때, Synonym을 사용하여야만 해당 테이블을 참조할 수 있다. 이는 데이터베이스의 위치 투명성을 제공한다.

2. 유지보수에 편리성을 제공한다.

실무에서 객체의 이름을 바꾸거나 이동할 경우, Synonym을 사용하면, 해당 객체를 사용하는 SQL문을 모두 고치지 않고, Synonym만 재정의하면 되므로 편리하다. SQL 하드코딩을 지양함에 따른 장점인 것이다.

3. 객체의 이름이 길 경우 사용하기 편한 짧은 대체이름으로 사용하여 SQL문을 단순화 시킬 수 있다.

4. 객체를 참조하는 사용자의 오브젝트 세부사항을 감출 수 있어 보안을 유지할 수 있다.

Synonym을 사용하는 유저들은 Synonym이 참조하는 객체에 대한 소유자, 이름, 서버이름을 몰라도 Synonym 명칭만 알면 사용가능하다.

 

 

종류

1. Private Synonyms : Synonym을 생성하는 데이터베이스 사용자는 소유자로써 액세스 할 수 있는 유일한 사용자가 된다.

2. Public Synonyms : 공용 사용자 그룹이 소유하며, 모든 데이터베이스 사용자가 액세스할 수 있다. Public Synonym을 생성한 개인 사용자가 소유권한을 갖는 것이 아니며, Public 사용자 그룹에 소유가 된다.

 

 

기본문법

private synonym 생성과 삭제

1

 2 

sql> CREATE SYNONYM synonym_name FOR object_name;

sql> DROP SYNONYM synonym_name; 

 

 

public synonym 생성과 삭제

1

 2 

sql> CREATE PUBLIC SYNONYM synonym_name FOR object_name;

sql> DROP SYNONYM  synonym_name;

 

 

 

우선순위

같은 이름의 로컬 데이터베이스 객체가 있는 경우 우선순위는 다음과 같다.

1. local object

2. private synonym

3. public synonym

 

 

예제

-- 1. 먼저 scott/tiger USER로 접속해서 test USER에게 emp 테이블을 조작할 권한을 부여한다.
SQL> GRANT ALL ON  emp TO test;

 

-- 2. test USER로 접속해 SYNONYM을 생성한다.
SQL> CONNECT test/test
SQL> CREATE SYNONYM scott_emp FOR scott.emp ;

-- scott USER가 소유하고 있는 emp 테이블에 대해 scott_emp라는 일반 SYNONYM을 생성했다.
-- scott 사용자의 emp테이블을 test 사용자가 scott_emp라는 SYNONYM으로 사용한다.

 

-- 3. SYNONYM을 이용한 쿼리
SQL> SELECT empno, ename FROM  scott_emp;

-- 일반 테이블 쿼리
SQL> SELECT empno,  ename FROM  scott.emp;


-- 이 두 쿼리의 결과는 같다.

 

   EMPNO ENAME
-------- ---------
    7369 SMITH
    7499 ALLEN
...

 

-- 4. SYNONYM 삭제
SQL> DROP SYNONYM scott_emp;

-- SYNONYM을 이용한 조회
SQL> SELECT empno,  ename FROM  scott_emp;


         라인 1 에 오류:
     ORA-00942: 테이블 또는 뷰가 존재하지 않습니다. 

 

Comments