postgres_fdw 및 dblink 확장을 사용하여 PostgreSQL를 통해 OCI 데이터베이스에서 데이터베이스 간 액세스 사용
소개
PostgreSQL가 포함된 Oracle Cloud Infrastructure Database(PostgreSQL가 포함된 OCI 데이터베이스)는 postgres_fdw 및 dblink와 같은 확장을 사용하여 데이터베이스 간 연결을 지원합니다. 이러한 확장을 통해 PostgreSQL 데이터베이스에서 원활한 액세스 및 데이터 공유가 가능하며, 분석, 통합 쿼리 또는 레거시 통합 시나리오에 유용합니다.
dblink 란 무엇입니까?
DBlink는 원격 PostgreSQL 데이터베이스에서 SQL 문을 직접 실행할 수 있는 PostgreSQL 확장입니다. 결과 집합을 행으로 반환하거나 원격 서버에서 명령을 실행합니다.
postgres_fdw 란 무엇입니까?
postgres_fdw(외래 데이터 래퍼)는 데이터베이스가 원격 PostgreSQL 서버의 테이블에 로컬 테이블처럼 접속하고 질의할 수 있도록 해주는 PostgreSQL 확장입니다. dblink와 달리 원격 테이블을 로컬 객체로 매핑하고 더 많은 절차 제어를 제공합니다.
이 자습서에서는 각각에 대한 예와 함께 PostgreSQL 인스턴스가 포함된 OCI 데이터베이스에서 postgres_fdw 및 dblink 확장의 설정에 대해 알아봅니다.
목표
서로 다른 가상 클라우드 네트워크(VCN) 및 서로 다른 지역에 위치한 PostgreSQL 데이터베이스 시스템을 통해 두 OCI 데이터베이스 간에 안전하고 안정적인 네트워크 통신을 가능하게 합니다. 이렇게 설정하면 데이터베이스 연결이 VCN 경계에서 원활하게 작동합니다. 여기에는 프라이빗 뷰를 사용한 DNS 확인 경로 지정 및 설정을 위한 LPG(로컬 피어링 게이트웨이) 구성이 포함됩니다. 목표는 postgres_fdw 또는 dblink와 같은 데이터베이스 확장에 대해 VCN/지역 간 연결을 지원하는 것입니다.
필수 조건
- PostgreSQL 데이터베이스가 있는 OCI 데이터베이스에서 postgres_fdw 또는 dblink 확장을 생성하고 관리하려면 사용자에게 다음이 있어야 합니다.
- 데이터베이스 액세스 권한
- 사용자에게 부여된 OCI_ADMIN_ROLE입니다.
- PostgreSQL 데이터베이스 시스템(소스 및 대상)이 포함된 OCI 데이터베이스에는 네트워크 연결이 있어야 합니다.
작업 1: PostgreSQL를 사용하여 OCI 데이터베이스에서 postgres_fdw 및 dblink 확장을 사용으로 설정합니다.
-
OCI 콘솔에서 확장을 사용으로 설정합니다.
-
dblink 또는 postgres_fdw 확장자에 대해 사용으로 설정되는 구성 파일을 만듭니다.
-
데이터베이스 시스템에 구성을 적용합니다.
-
-
데이터베이스 레벨에서 확장을 사용으로 설정합니다.
OCI 콘솔에서 확장을 사용으로 설정한 후 데이터베이스에 접속하고 다음 SQL 명령을 실행합니다.
CREATE EXTENSION postgres_fdw; CREATE EXTENSION dblink;
작업 2: 서로 다른 VCN의 데이터베이스 시스템 간 네트워크 연결 구성
서로 다른 VCN에 있는 PostgreSQL 데이터베이스 시스템과 두 OCI 데이터베이스 간의 통신을 사용으로 설정하려면 다음 단계를 수행합니다.
-
로컬 피어링 게이트웨이(LPG) 생성.
각 VCN에 LPG를 생성하여 이들 간의 피어링 연결을 설정합니다.
-
경로 테이블 구성
-
각 VCN에 대해 라우트 규칙을 포함하도록 LPG와 연결된 라우트 테이블을 업데이트합니다.
-
대상 CIDR 블록을 다른 대상 VCN의 주소 범위로 설정하고 다음 홉을 해당하는 LPG로 지정합니다.
-
-
프라이빗 뷰를 사용하여 DNS 분석 설정
-
OCI 콘솔로 이동하여 프라이빗 뷰를 검색하여 두 VCN에 대한 DNS 구성에 액세스합니다.
-
각 VCN의 전용 뷰를 열고 영역 항목을 생성합니다.
-
-
각 데이터베이스 시스템에 대한 영역 레코드 만들기.
각 VCN의 개인 뷰에서 다른 VCN에 있는 데이터베이스 시스템의 FQDN(정규화된 도메인 이름)을 나타내는 영역을 추가합니다.
-
DNS 레코드 추가.
-
새 영역 항목 옆에 있는 3개의 점 아이콘을 누르거나 FQDN 링크를 누릅니다.
-
레코드 관리를 선택하고 레코드 추가를 누릅니다.
-
유형 A(IPv4 주소)를 선택하고 TTL을 500으로 설정한 다음 반대쪽 VCN에 있는 대상 데이터베이스 시스템의 기본 끝점 IP 주소를 입력합니다.
-
레코드 추가를 누른 다음 변경사항 게시를 누릅니다.
-
작업 3: 서로 다른 VCN 및 다른 지역의 데이터베이스 시스템 간 네트워크 연결 구성
서로 다른 VCN 및 다른 지역에 위치한 PostgreSQL 데이터베이스 시스템과 두 OCI 데이터베이스 간의 통신을 사용으로 설정합니다.
-
DRG(동적 경로 지정 게이트웨이) 생성
각 지역에 DRG를 생성하여 해당 VCN에 연결합니다.
-
경로 테이블 구성
-
각 VCN에 대해 DRG와 연관된 경로 테이블을 업데이트합니다.
-
다른 VCN의 대상 CIDR 블록이 있는 경로 규칙을 추가하고 다음 홉을 연결된 DRG로 지정합니다.
-
-
프라이빗 뷰를 사용하여 DNS 분석 설정
-
OCI 콘솔로 이동하여 프라이빗 뷰를 검색하여 각 VCN의 DNS 설정에 액세스합니다.
-
각 VCN에 대한 개인 뷰를 열고 영역 항목을 생성합니다.
-
-
각 데이터베이스 시스템에 대한 영역 레코드 만들기.
각 VCN의 전용 뷰에서 다른 VCN에 있는 데이터베이스 시스템의 FQDN을 나타내는 영역을 추가합니다.
-
DNS 레코드 추가.
-
새 영역 항목 옆에 있는 3개의 점 아이콘을 누르거나 FQDN 링크를 누릅니다.
-
레코드 관리를 선택하고 레코드 추가를 누릅니다.
-
유형 A(IPv4 주소)를 선택하고 TTL을 500으로 설정한 다음 반대 데이터베이스 시스템의 기본 끝점 IP 주소를 입력합니다.
-
레코드 추가를 누른 다음 변경사항 게시를 누릅니다.
-
작업 4: 예제로 postgres_fdw 확장을 구성합니다.
-
외부 데이터 래퍼(FDW) 서버 생성.
CREATE SERVER
명령은postgres_fdw
래퍼를 사용하여fdw_serv
이라는 외부 서버를 정의합니다. 접속 세부정보(예: 소스 PostgreSQL 데이터베이스의 호스트, 데이터베이스 이름 및 포트)를 지정합니다. 이는 대상 PostgreSQL 인스턴스 내의 소스 데이터에 액세스하기 위한 논리적 참조 역할을 합니다.CREATE SERVER <fdw_servername> FOREIGN DATA WRAPPER <fdw_servername> OPTIONS (host 'primary.xxxxxx.FQDN_Remote_source_DBSystem.... oci.oraclecloud.com', dbname 'remote_source_dbname', port '5432');
-
사용자 매핑.
CREATE USER MAPPING
명령은 대상 PostgreSQL 사용자(arvindya
)를 소스 데이터베이스 인증서와 연관시킵니다. 이렇게 하면 대상 서버가 정의된 외부 서버에 접속할 때 대상 인증이 허용됩니다. 이렇게 하면 실행된 질의 대상이 소스 서버에서 올바르게 인증됩니다.CREATE USER MAPPING FOR <user_name> SERVER <fdw_servername> OPTIONS (user <user_name>, password <'user_password'>);
-
스키마 소스 임포트.
IMPORT FOREIGN SCHEMA
명령은 소스 서버의 공용 스키마에서 대상 데이터베이스로 모든 테이블을 외래 테이블로 임포트합니다. 이러한 테이블은 로컬로 나타나지만 소스 데이터베이스에서 실시간으로 데이터를 패치(fetch)합니다.IMPORT FOREIGN SCHEMA <schema_name> FROM SERVER <fdw_server_name> INTO public;
예:
-- Create extension
CREATE EXTENSION postgres_fdw;
-- Create FDW Server
CREATE SERVER fdw_serv FOREIGN DATA WRAPPER postgres_fdw OPTIONS (
host 'primary.xxxxxx.Remote Source DBSystem FQDN.....xxxxx.oci.oraclecloud.com',
dbname 'source',
port '5432'
);
-- User Mapping
CREATE USER MAPPING FOR arvindya SERVER fdw_serv OPTIONS (
user '<user_name>',
password '<user_password>'
);
-- Import Schema from source
IMPORT FOREIGN SCHEMA public FROM SERVER fdw_serv INTO public;
-- Validate Data
SELECT * FROM emp;
작업 5: 예와 함께 dblink 확장 구성
dblink_connect
함수는 제공된 접속 문자열을 사용하여 대상 PostgreSQL 데이터베이스에서 소스 PostgreSQL 데이터베이스로 접속을 설정합니다. 여기에는 데이터베이스 이름, 호스트, 포트, 유저 이름 및 암호와 같은 파라미터가 포함됩니다. 연결은 이후 dblink
작업에 사용되는 고유한 이름(myconn
)으로 식별됩니다. 성공한 연결은 원격 질의에 대한 준비 상태를 나타내는 OK를 반환합니다.
SELECT dblink_connect ('Conn_name', 'dbname=<Remote_source_DBName> port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<'user_password'>);
예:
CREATE DATABASE target;
\c target
CREATE EXTENSION dblink;
-- Establish Connection
SELECT dblink_connect ('myconn', 'dbname=source port=5432 host=primary.xxxxxx..Remote_source_DbSystem FQDN..xxxx.oci.oraclecloud.com user=<user_name> password=<user_password>');
-- Select from Source
SELECT * FROM dblink('myconn', 'SELECT * FROM testing') AS t(a int);
-- Execute SQL remotely
SELECT * FROM dblink_exec('myconn', 'create table dblinking_table (id int)');
SELECT * FROM dblink_exec('myconn', 'insert into dblinking_table values(generate_series(1,10))');
SELECT * FROM dblink_exec('myconn', 'delete from dblinking_table where id <= 5');
-- Final Validation
SELECT * FROM dblink('myconn', 'SELECT * FROM dblinking_table') AS t(a int);
관련 링크
승인
- 작성자 - Arvind Yadav(주요 회원 기술 담당자)
추가 학습 자원
docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Enable Inter-Database Access in OCI Database with PostgreSQL using the postgres_fdw and dblink Extensions
G40419-02