[Database/Oracle] 스키마 이름과 데이터베이스 링크
프로젝트 개발을 하다보면 다른 협력사들의 데이터베이스를 참조해야 할 일이 있다.
일반적으로 모든 데이터베이스를 열어두지 않고 제한된 스키마 이름의 View, Function, Stored Procedure 등으로 일부 데이터를 제공하는 경우가 많은데, 다른 데이터베이스의 일부 스키마를 참조하여 쿼리를 만들려고 한다면, 링크를 만들어 편하게 만들 수 있다.
스키마와 스키마 이름
스키마란 데이터베이스 구조와 제약 조건에 대한 명세이다. 즉 데이터베이스 구조를 칭하는 말이다.
스키마 이름이란 스키마, 즉 해당 데이터베이스 객체들의 사용자라고 생각하면 된다.
MYSQL 등 다른 데이터베이스에서의 User에 해당한다.
하나의 테이블, 뷰 등 객체들을 생성하고 운영하는 Onwer 스키마 이름이 있으며, CRUD 권한, 구조 변경 권한 등을 차등적으로 부여받은 스키마 이름들에 의해 사용되는 것이 일반적이다.
만약 다른 스키마 이름의 객체를 이용하려 한다면 다음과 같이 사용한다.
SELECT * FROM BOB.EXAMPLE_TABLE;
이는 BOB의 소유인 EXAMPLE_TABLE을, 권한을 부여받았을 때 참조하여 사용하는 쿼리이다.
형태는 [스키마 이름].[객체] 의 형태로 사용한다.
데이터베이스 링크
이제 다른 데이터베이스의 스키마 이름과의 링크를 생성해보자.
CREATE DATABASE LINK "링크 이름"
CONNECT TO "스키마 이름" IDENTIFIED BY VALUES ':1'
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 데이터베이스 호스트)(PORT = 데이터베이스 포트))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 데이터베이스 이름)
)
)';
다음과 같이 링크를 생성하면 해당 링크의 스키마 이름에 이용 권한이 부여된 개체들을 사용할 수 있게 된다.
SELECT * FROM OTHER_DB_VIEW@DB_LINK_NAME;
사용할 개체 뒤에 @(데이터베이스 링크 이름)을 붙여서 참조하여 사용한다.
만약 데이터베이스 링크의 다른 스키마 이름을 사용하려고 하면 어떻게 하면 될까?
SELECT * FROM OTHER_SCHEMA_NAME.OTHER_DB_VIEW@DB_LINK_NAME;
앞에 방식과 마찬가지로 앞에 스키마 이름을 붙여서 사용하면 된다.
'Database > 데이터베이스' 카테고리의 다른 글
[Database] 낙관적 락과 비관적 락 (0) | 2023.05.10 |
---|---|
[Database] 트랜잭션(Transaction), ACID 및 Isolation Level (0) | 2023.02.25 |
[Database] 데이터베이스 정규화 (0) | 2023.02.04 |
[Database/Oracle] 데이터베이스 동의어 (0) | 2022.06.27 |