참고:
- 이 사용지침서에서는 Oracle Cloud에 접근해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 완료하면 이러한 값을 클라우드 환경에 고유한 값으로 대체합니다.
Autonomous Database에서 고객 관리형 이기종 연결을 사용하여 전용 끝점의 Microsoft SQL Server에 데이터베이스 링크 생성
소개
데이터베이스에서 작업하는 동안에는 조직 데이터가 여러 데이터베이스에 저장되므로 다른 데이터베이스의 객체에 액세스해야 합니다. 여기서{\f2732 Oracle Database Link}를 사용하면 데이터베이스 링크가 다른 데이터베이스의 객체에 액세스할 수 있는 스키마 객체가 됩니다{\f2732 .} 다른 데이터베이스가 Oracle Database 시스템일 필요는 없습니다. 그러나 비오라클 시스템에 액세스하려면 Oracle Heterogeneous Services를 사용해야 합니다.
이 자습서에서는 전용 끝점의 ADB-S(Oracle Autonomous Database Serverless)에서 전용 끝점에 있는 Microsoft SQL Server 데이터베이스(비Oracle 데이터베이스)에 액세스하는 방법에 대해 설명합니다. ADB-S에서 비Oracle 데이터베이스에 액세스하려면 Autonomous Database에서 Oracle Database Gateway로의 데이터베이스 링크를 생성해야 합니다.
Autonomous Database에서 Oracle Database Gateway로 데이터베이스 링크를 생성하여 전용 끝점에 있는 비Oracle 데이터베이스에 액세스할 수 있는 두 가지 옵션이 있습니다.
• 전자 지갑 없이 전용 끝점에서 Microsoft SQL Server 데이터베이스에 대한 고객 관리 이기종 접속을 사용하여 데이터베이스 링크 생성(TLS)
• 전자 지갑(TCPS)을 사용하여 전용 끝점에서 Microsoft SQL Server 데이터베이스에 대한 고객 관리 이기종 연결을 사용하여 데이터베이스 링크 생성
목표
Autonomous Database에서 고객 관리 이기종 연결을 사용하여 전용 끝점의 Microsoft SQL Server(비Oracle Database)에 대한 데이터베이스 링크를 생성합니다.
필요 조건
- Create Database Links with Customer-Managed Heterogeneous Connectivity to Non-Oracle Databases on a Private Endpoint(고객 관리 이기종 연결을 사용하여 전용 끝점의 비오라클 데이터베이스에 데이터베이스 연결 생성) 문서 읽기
- 문서에 언급된 필요 조건을 검토합니다.
- ADB-S - 전용 끝점의 Autonomous Transaction Processing 19c
- 비Oracle Database - Microsoft SQL Server 2019 Express Edition, 데이터베이스 이름 - AdventureWorks, 전용 끝점의 Windows VM에서 실행되는 포트 TCP(1433)
- Windows VM 운영 체제 - Windows Server 2019
- Oracle Database Gateway - Oracle Database Gateway for SQL Server, Port - TCP(1521), TCPS(2484)
- 여기에서 Oracle Database Gateway를 다운로드한 다음 Oracle Database Gateway for SQL Server를 설치 및 구성합니다.
간단하게 유지하기 위해 Windows Server 2019와 동일한 OCI VM 인스턴스에 Oracle Database Gateway for SQL Server 및 Microsoft SQL Server 2019를 설치했습니다.
구조
다음은 솔루션의 샘플 상위 레벨 아키텍처입니다.
adb-s-db-link-to-mssql.png 그림에 대한 설명
옵션 1: 전자 지갑(TLS) 없이 데이터베이스 링크 생성
작업 1.1: Oracle Database Gateway for SQL Server 구성
시작하기 전에 Oracle Database Gateway for SQL Server가 올바르게 구성되었는지 확인해야 합니다. Oracle Database Gateway for SQL Server를 설치하는 동안 ORACLE_HOME를 구성하고 ORACLE_HOME 위치를 기록해 두십시오. 이 자습서의 위치는 'C:\app\oracle\product\19.0.0\tghome_1'입니다.
4개의 중요한 파일이 올바르게 구성되어 있는지 확인해야 합니다.
- ORACLE_HOME\dg4msql\admin\initdg4msql.ora
- ORACLE_HOME\network\admin\listener.ora
- ORACLE_HOME\network\admin\sqlnet.ora
- ORACLE_HOME\network\admin\tnsnames.ora
이 튜토리얼의 테스트 환경에서 파일이 어떻게 보이는지 보여줍니다.
ORACLE_HOME\dg4msql\admin\initdg4msql.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
ORACLE_HOME\network\admin\listener.ora
# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4msql)
(ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
(PROGRAM=dg4msql)
)
)
ORACLE_HOME\network\admin\sqlnet.ora
# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES)
ORACLE_HOME\network\admin\tnsnames.ora
dg4msql=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(CONNECT_DATA=(SID=dg4msql))
(HS=OK)
)
Oracle Database Gateway 서비스를 재시작합니다. 이 자습서에서는 서비스 콘솔(Services.msc
)을 사용하는 'OracleOraGTW19Home1TNSListener'입니다.
lsnrctl status
명령을 사용하여 리스너 상태를 확인할 수 있습니다.
C:\Users\opc>lsnrctl status
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUL-2023 11:45:54
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mssqlvm1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 - Production
Start Date 19-JUL-2023 09:14:23
Uptime 0 days 2 hr. 31 min. 32 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\oracle\product\19.0.0\tghome_1\network\admin\listener.ora
Listener Log File C:\app\oracle\diag\tnslsnr\MSSQLVM1\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MSSQLVM1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=MSSQLVM1)(PORT=2484)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "dg4msql" has 1 instance(s).
Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
작업 1.2: 전자 지갑 없이 Autonomous Database 인스턴스에서 데이터베이스 링크 생성
-
MS SQL Server 데이터베이스에 대한 액세스 권한이 있는 로그인을 MS SQL Server에 생성합니다. 예를 들어 MS SQL Server 데이터베이스
AdventureWorks
에 액세스할 수 있는 SQL 로그인ORACLE
을 MS SQL Server에 생성했습니다. -
Autonomous Database에 연결하여 MS SQL Server 데이터베이스에 액세스하기 위한 인증서를 생성합니다.
DBMS_CLOUD.CREATE_CREDENTIAL
로 지정하는 사용자 이름과 비밀번호는 데이터베이스 링크 내에서 사용되는 MS SQL Server 데이터베이스의 인증서입니다. 이 자습서에서는 SQL 로그인ORACLE
에 대한 인증서를 제공했습니다.BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'DB_LINK_CRED', username => 'ORACLE', --Ensure username is in UPPERCASE password => 'USER_PASSWORD' ); END; /
-
이제 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK를 사용하여 Autonomous Database에서 Oracle Database Gateway for SQL Server에 대한 데이터베이스 링크를 생성합니다.
BEGIN DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK( db_link_name => 'MSSQLLINK', hostname => 'gatewayhostname', port => '1521', service_name => 'dg4msql', ssl_server_cert_dn => NULL, credential_name => 'DB_LINK_CRED', directory_name => NULL, private_target => TRUE, gateway_link => TRUE, gateway_params => NULL); END; /
주: Oracle Database가 아닌 대상이 전용 끝점에 있는 경우
private_target
매개변수를 TRUE로 설정해야 합니다. -
Oracle DB 링크를 사용하여 MS SQL Server 데이터베이스를 질의합니다.
SELECT * FROM HumanResources.Employee@MSSQLLINK;
ADB-S의 전자 지갑 없이 Oracle DB 링크를 사용하여 전용 끝점에 있는 MS SQL Server 데이터베이스를 질의할 수 있습니다.
옵션 2: 전자 지갑(TCPS)으로 데이터베이스 링크 생성
작업 2.1: Oracle Database Gateway for SQL Server 구성
이제 전자 지갑이 있는 전용 끝점에서 Microsoft SQL Server 데이터베이스에 대한 고객 관리 이기종 접속으로 데이터베이스 링크를 생성하기 전에 전자 지갑을 생성해야 합니다. orapki를 사용하여 자체 서명된 전자 지갑을 생성할 수 있습니다.
Oracle Database Gateway for SQL Server가 설치된 동일한 시스템에 서버 및 클라이언트 전자 지갑이 생성됩니다. 게이트웨이가 이 시스템에 설치되었으므로 orapki
이 이미 'C:\app\oracle\product\19.0.0\tghome_1\bin'에 있습니다.
서버 및 클라이언트 전자 지갑에 대한 두 개의 폴더를 생성하겠습니다.
-
C:\app\oracle\product\19.0.0\tghome_1\walletserver
-
C:\app\oracle\product\19.0.0\tghome_1\walletclient
서버 전자 지갑을 생성하고 서버 인증서를 추가하는 명령어:
orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
클라이언트 전자 지갑(wallet)을 생성하고 클라이언트 인증서를 추가하는 명령:
orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
이제 서버 전자 지갑에서 인증서를 익스포트하여 클라이언트 전자 지갑으로 임포트하고 클라이언트 전자 지갑에서 인증서를 익스포트하고 서버 전자 지갑으로 임포트해야 합니다.
전자 지갑에서 인증서를 익스포트하는 명령:
orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt
orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt
전자 지갑으로 인증서를 임포트하는 명령어:
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt
이제 다음 네 개의 파일이 올바르게 업데이트되었는지 확인합니다.
-
ORACLE_HOME\dg4msql\admin\initdg4msql.ora
-
ORACLE_HOME\network\admin\listener.ora
-
ORACLE_HOME\network\admin\sqlnet.ora
-
ORACLE_HOME\network\admin\tnsnames.ora
이 튜토리얼의 테스트 환경에서 파일이 어떻게 보이는지 보여줍니다.
ORACLE_HOME\dg4msql\admin\initdg4msql.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
ORACLE_HOME\network\admin\listener.ora
# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
WALLET_LOCATION =
(SOURCE =
(METHOD = File)
(METHOD_DATA =
(DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4msql)
(ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
(PROGRAM=dg4msql)
)
)
ORACLE_HOME\network\admin\sqlnet.ora
# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SSL_SERVER_DN_MATCH= (ON)
WALLET_LOCATION =
(SOURCE =
(METHOD = File)
(METHOD_DATA =
(DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
)
)
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES)
ORACLE_HOME\network\admin\tnsnames.ora
dg4msql=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(CONNECT_DATA=(SID=dg4msql))
(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=2484))
(CONNECT_DATA=(SID=dg4msql))
(HS=OK)
)
작업 2.2: 전자 지갑이 있는 Autonomous Database 인스턴스에서 데이터베이스 링크 생성
-
MS SQL Server 데이터베이스에 대한 액세스 권한이 있는 로그인을 MS SQL Server에 생성합니다. 예를 들어 MS SQL Server 데이터베이스
AdventureWorks
에 액세스할 수 있는 SQL 로그인ORACLE
을 MS SQL Server에 생성했습니다. -
클라이언트 전자 지갑(
cwallet.sso
)을C:\app\oracle\product\19.0.0\tghome_1\walletclient
에서 OCI Object Store로 복사합니다. -
Autonomous Database에 연결하고 인증서를 생성하여
cwallet.sso
파일을 복사한 객체 저장소에 액세스합니다.-
다른 오브젝트 스토리지 서비스의 사용자 이름 및 암호 매개변수에 대한 자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.
-
필요한 매개변수 정보를 가져오려면 Required Keys and OCIDs를 참조하십시오.
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OCI_KEY_CRED', user_ocid => 'ocid1.user.oc1..aaaa.....7igkq', tenancy_ocid => 'ocid1.tenancy.oc1..aaaa....xo3da', private_key => 'MIIEvgIBA.........S0EOOYN4ijczB', fingerprint => 'f2:db:f9:18:a4:..:..:..:f4:f6:6c:39:96:16:aa:27'); END; /
-
-
이제 Autonomous Database에 전자 지갑 파일
cwallet.sso
에 대한 디렉토리를 생성합니다.CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
-
DBMS_CLOUD.GET_OBJECT를 사용하여 대상 게이트웨이 자체 서명된 전자 지갑을 이전 단계인
DBLINK_WALLET_DIR
에서 생성한 디렉토리에 업로드합니다.BEGIN DBMS_CLOUD.GET_OBJECT( credential_name => 'OCI_KEY_CRED', object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/<namespace>/b/<bucketname>/o/cwallet.sso', directory_name => 'dblink_wallet_dir'); END;
object_uri
를 가져오려면 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오. -
MS SQL Server 데이터베이스에 액세스하기 위한 인증서를 생성합니다.
DBMS_CLOUD.CREATE_CREDENTIAL
로 지정하는 사용자 이름과 비밀번호는 데이터베이스 링크 내에서 사용되는 MS SQL Server 데이터베이스의 인증서입니다. 이 자습서에서는 SQL 로그인 'ORACLE'에 대한 인증서를 제공했습니다.BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'DB_LINK_CRED', username => 'ORACLE', --Ensure username is in UPPERCASE password => 'USER_PASSWORD' ); END; /
-
이제 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK를 사용하여 Autonomous Database에서 Oracle Database Gateway for SQL Server에 대한 데이터베이스 링크를 생성합니다.
BEGIN DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK( db_link_name => 'MSSQLLINKWW', hostname => 'mssqlvm1', port => '2484', service_name => 'dg4msql', ssl_server_cert_dn => 'CN=windows', credential_name => 'DB_LINK_CRED', directory_name => 'dblink_wallet_dir', gateway_link => TRUE, private_target => TRUE, gateway_params => NULL); END; /
-
이제 Oracle DB 링크를 사용하여 MS SQL Server 데이터베이스를 쿼리해 보겠습니다.
SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
다음 단계
이 자습서에서는 고객 관리 이기종 연결을 통해 Autonomous Database에서 Private Endpoint의 Microsoft SQL Server(비Oracle Database)에 대한 데이터베이스 링크를 구성하는 방법을 배웠습니다. 전자 지갑(TLS)이 없는 옵션과 전자 지갑(TCPS)이 모두 사용되었습니다.
다른 비Oracle 데이터베이스에 대해서도 유사한 단계를 사용할 수 있습니다. Oracle Database Gateway를 적절하게 구성했는지 확인해야 합니다.
수락
- 작성자 - Deviprasad Moolya(주요 클라우드 아키텍트)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer를 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Create database links from Autonomous Database with Customer-Managed Heterogeneous Connectivity to Microsoft SQL Server on a Private Endpoint
F84999-01
August 2023
Copyright © 2023, Oracle and/or its affiliates.