Oracle Synonym 우선순위와 동작 테스트

장수윤·2025년 1월 17일

현재 프로젝트 중인데, 기존 운영되고 있는 테이블과 솔루션으로 들어올 테이블 명이 동일하게 존재한다고 합니다.
구축 예정인 DB 테이블명을 동일하게 사용하되, 스키마를 분리하여 솔루션 내 스키마 명시하지 않아도(시노님 사용) 문제가 없는지 검토해달라는 요청이 와서 테스트 해보았습니다.

실험 시나리오

1. 테이블 생성

hnm_edw.test_table:
hnm_edw.mem_de_lst에서 1건의 데이터를 가져와 생성.

CREATE TABLE hnm_edw.test_table AS
SELECT * FROM hnm_edw.mem_de_lst WHERE ROWNUM <= 1;

hnm_ntc.test_table:
hnm_edw.mem_de_lst에서 10건의 데이터를 가져와 생성.

CREATE TABLE hnm_ntc.test_table AS
SELECT * FROM hnm_edw.mem_de_lst WHERE ROWNUM <= 10;

2. Synonym 생성

hnm_ntc.test_table을 참조하는 private synonym.

CREATE SYNONYM sys.test_table FOR hnm_ntc.test_table;

hnm_edw.test_table을 참조하는 Private Synonym.

CREATE SYNONYM u1234.test_table FOR hnm_edw.test_table;

3. 데이터 조회

  • u1234 계정에서 실행:
SELECT * FROM test_table;

결과: 1건 조회 (hnm_edw.test_table 참조).
이유는 Private Synonym이 현재 스키마에서 우선적으로 검색되기 때문.

  • sys 계정에서 실행:
SELECT * FROM test_table;

결과: 10건 조회 (hnm_ntc.test_table 참조).
이유는 sys 계정의 Private Synonym이 참조되기 때문.

Synonym 우선순위

Oracle Database에서 Synonym을 사용할 때, 객체를 검색하는 우선순위는 다음과 같습니다:

  1. 현재 스키마의 객체 탐색:
    테이블, 뷰, 또는 Private Synonym을 현재 스키마에서 우선적으로 검색.
  2. Public Synonym 탐색:
    Public Synonym은 모든 스키마에서 사용할 수 있으며, 현재 스키마에서 동일 이름의 객체가 없을 경우 참조.
  3. 명시적인 스키마 지정:
    쿼리에서 특정 스키마를 명시하면, 그 스키마의 객체를 직접 참조.

실험 결과

각자 계정이 아닌 제 3의 계정으로 로그인하여 테이블을 스키마 없이 사용하기 위해서는 private 시노님을 사용하면 문제없을 것 같다.

profile
oracle db

0개의 댓글