참고:

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)에 대한 데이터베이스 링크를 생성합니다.

필요 조건

간단하게 유지하기 위해 Windows Server 2019와 동일한 OCI VM 인스턴스에 Oracle Database Gateway for SQL Server 및 Microsoft SQL Server 2019를 설치했습니다.

구조

다음은 솔루션의 샘플 상위 레벨 아키텍처입니다.

이미지 1

adb-s-db-link-to-mssql.png 그림에 대한 설명

작업 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

# 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. MS SQL Server 데이터베이스에 대한 액세스 권한이 있는 로그인을 MS SQL Server에 생성합니다. 예를 들어 MS SQL Server 데이터베이스 AdventureWorks에 액세스할 수 있는 SQL 로그인 ORACLE을 MS SQL Server에 생성했습니다.

  2. 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;
    /
    
  3. 이제 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로 설정해야 합니다.

  4. Oracle DB 링크를 사용하여 MS SQL Server 데이터베이스를 질의합니다.

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

ADB-S의 전자 지갑 없이 Oracle DB 링크를 사용하여 전용 끝점에 있는 MS SQL Server 데이터베이스를 질의할 수 있습니다.

작업 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'에 있습니다.

서버 및 클라이언트 전자 지갑에 대한 두 개의 폴더를 생성하겠습니다.

서버 전자 지갑을 생성하고 서버 인증서를 추가하는 명령어:

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

# 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)
  )
  1. MS SQL Server 데이터베이스에 대한 액세스 권한이 있는 로그인을 MS SQL Server에 생성합니다. 예를 들어 MS SQL Server 데이터베이스 AdventureWorks에 액세스할 수 있는 SQL 로그인 ORACLE을 MS SQL Server에 생성했습니다.

  2. 클라이언트 전자 지갑(cwallet.sso)을 C:\app\oracle\product\19.0.0\tghome_1\walletclient에서 OCI Object Store로 복사합니다.

  3. 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;
      /
      
  4. 이제 Autonomous Database에 전자 지갑 파일 cwallet.sso에 대한 디렉토리를 생성합니다.

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. 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 형식을 참조하십시오.

  6. 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;
     /
    
  7. 이제 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;
    /
    
  8. 이제 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를 적절하게 구성했는지 확인해야 합니다.

수락

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer를 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.