현재 프로젝트 중인데, 기존 운영되고 있는 테이블과 솔루션으로 들어올 테이블 명이 동일하게 존재한다고 합니다.
구축 예정인 DB 테이블명을 동일하게 사용하되, 스키마를 분리하여 솔루션 내 스키마 명시하지 않아도(시노님 사용) 문제가 없는지 검토해달라는 요청이 와서 테스트 해보았습니다.
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;
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;
SELECT * FROM test_table;
결과: 1건 조회 (hnm_edw.test_table 참조).
이유는 Private Synonym이 현재 스키마에서 우선적으로 검색되기 때문.
SELECT * FROM test_table;
결과: 10건 조회 (hnm_ntc.test_table 참조).
이유는 sys 계정의 Private Synonym이 참조되기 때문.
Oracle Database에서 Synonym을 사용할 때, 객체를 검색하는 우선순위는 다음과 같습니다:
각자 계정이 아닌 제 3의 계정으로 로그인하여 테이블을 스키마 없이 사용하기 위해서는 private 시노님을 사용하면 문제없을 것 같다.