Observação:

Criar links de banco de dados do Autonomous Database com Conectividade Heterogênea Gerenciada pelo Cliente para o Microsoft SQL Server em um Ponto Final Privado

Introdução

Em uma organização, os dados são armazenados em vários bancos de dados e em muitas vezes enquanto você está trabalhando em um banco de dados, é necessário acessar objetos em outro banco de dados. É aqui que o Oracle Database Link pode ajudar, um link de banco de dados é um objeto de esquema em um banco de dados que permite acessar objetos em outro banco de dados. O outro banco de dados não precisa ser um sistema Oracle Database. No entanto, para acessar sistemas não-Oracle, você deve usar o Oracle Heterogeneous Services.

Neste tutorial, discutiremos como você pode acessar um Microsoft SQL Server Database (banco de dados não Oracle) que está em um Ponto Final Privado do Oracle Autonomous Database Serverless (ADB-S) em um ponto final privado. Para acessar bancos de dados não Oracle do ADB-S, precisamos criar links de banco de dados de um Autonomous Database para um Oracle Database Gateway.

Há duas opções para criar links de banco de dados de um Autonomous Database para um Oracle Database Gateway para acessar bancos de dados não Oracle que estão em um ponto final privado:

Criar Links de Banco de Dados com Conectividade Heterogênea Gerenciada pelo Cliente com o Banco de Dados do Microsoft SQL Server em um Ponto Final Privado sem uma wallet (TLS)

Criar Links de Banco de Dados com Conectividade Heterogênea Gerenciada pelo Cliente ao Banco de Dados do Microsoft SQL Server em um Ponto Final Privado com uma wallet (TCPS)

Objetivos

Crie links de banco de dados do Autonomous Database com Conectividade Heterogênea Gerenciada pelo Cliente para o Microsoft SQL Server (Não Oracle Database) em um Ponto Final Privado.

Pré-requisitos

Para simplificar, instalamos o Oracle Database Gateway for SQL Server e o Microsoft SQL Server 2019 na mesma Instância de VM do OCI com o Windows Server 2019.

Arquitetura

Veja a seguir uma amostra de arquitetura de alto nível da solução

Imagem 1

Descrição da ilustração adb-s-db-link-to-mssql.png

Tarefa 1.1: Configurar o Oracle Database Gateway for SQL Server

Antes de começarmos, precisamos garantir que o Oracle Database Gateway for SQL Server esteja configurado corretamente. Ao instalar o Oracle Database Gateway for SQL Server, você configurará ORACLE_HOME, anote o local ORACLE_HOME. Para este tutorial, a localização é 'C:\app\oracle\product\19.0.0\tghome_1'.

Há quatro arquivos importantes que você precisa garantir que estão configurados corretamente.

É assim que os arquivos se parecem em nosso ambiente de teste para este tutorial.

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)    
)

Reinicie o serviço Oracle Database Gateway para este tutorial, ele é 'OracleOraGTW19Home1TNSListener' usando a Console de Serviços (Services.msc).

Você pode verificar o status do listener usando o comando 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. Crie um logon no MS SQL Server que tenha acesso ao banco de dados do MS SQL Server. Por exemplo, criamos um Log-in SQL ORACLE no MS SQL Server que tem acesso ao banco de dados do MS SQL Server AdventureWorks.

  2. Conecte-se ao Autonomous Database e crie credenciais para acessar o banco de dados do MS SQL Server. O nome de usuário e a senha especificados com DBMS_CLOUD.CREATE_CREDENTIAL são as credenciais do banco de dados do MS SQL Server usadas no link de banco de dados. Para este tutorial, fornecemos credenciais para o Log-in SQL ORACLE.

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DB_LINK_CRED',
      username => 'ORACLE',	--Ensure username is in UPPERCASE
      password => 'USER_PASSWORD'
      );
    END;
    /
    
  3. Agora crie o link de banco de dados no Autonomous Database para o Oracle Database Gateway for SQL Server usando DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK.

     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;
     /
    
    

    Observação: O parâmetro private_target deve ser definido como TRUE quando o destino que não é do Oracle Database estiver em um ponto final privado.

  4. Consulte o MS SQL Server Database usando o Link do Oracle DB.

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

Você pode consultar o MS SQL Server Database que está em um ponto final privado usando o Oracle DB Link sem wallet do ADB-S.

Tarefa 2.1: Configurar o Oracle Database Gateway for SQL Server

Agora, antes de criar os links de banco de dados com Conectividade Heterogênea Gerenciada pelo Cliente ao Banco de Dados do Microsoft SQL Server em um Ponto Final Privado com uma wallet, precisamos criar uma wallet. Podemos criar uma wallet autoassinada usando orapki.

Estaremos criando a wallet do Servidor e do Cliente na mesma máquina em que o Oracle Database Gateway for SQL Server está instalado. Como o gateway foi instalado nesta máquina, orapki já está presente aqui 'C:\app\oracle\product\19.0.0\tghome_1\bin'.

Vamos criar duas pastas para a wallet do Servidor e do Cliente:

Comandos para criar uma wallet do servidor e adicionar certificado do servidor:

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

Comandos para criar uma wallet do cliente e adicionar certificado do cliente:

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

Agora, precisamos exportar os certificados da wallet do servidor e importá-los para a wallet do cliente e também exportar os certificados da wallet do cliente e importá-los para a wallet do servidor.

Comandos para exportar os certificados das carteiras:

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

Comandos para importar os certificados para as wallets:

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

Agora certifique-se de que os quatro arquivos a seguir estejam atualizados corretamente:

É assim que os arquivos se parecem em nosso ambiente de teste para este tutorial.

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. Crie um logon no MS SQL Server que tenha acesso ao banco de dados do MS SQL Server. Por exemplo, criamos um Log-in SQL ORACLE no MS SQL Server que tem acesso ao banco de dados do MS SQL Server AdventureWorks.

  2. Copie a wallet do cliente (cwallet.sso) de C:\app\oracle\product\19.0.0\tghome_1\walletclient para o Armazenamento de Objetos do OCI.

  3. Conecte-se ao Autonomous Database e vamos criar credenciais para acessar o Armazenamento de Objetos no qual você copiou o arquivo cwallet.sso.

    • Consulte CREATE_CREDENTIAL para obter informações sobre os parâmetros de nome de usuário e senha para diferentes serviços de armazenamento de objetos.

    • Consulte Chaves e OCIDs Necessários para obter as informações de parâmetros necessários.

      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. Agora, criaremos um diretório no Autonomous Database para o arquivo de wallet cwallet.sso.

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. Usaremos DBMS_CLOUD.GET_OBJECT para fazer upload da wallet autoassinada do gateway de destino para o diretório que criamos na etapa anterior, 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;
    

    Para obter o object_uri, consulte Formatos de URI do Cloud Object Storage

  6. Crie credenciais para acessar o banco de dados do MS SQL Server. O nome de usuário e a senha especificados com DBMS_CLOUD.CREATE_CREDENTIAL são as credenciais do banco de dados do MS SQL Server usadas no link de banco de dados. Neste tutorial, fornecemos credenciais para o Log-in SQL 'ORACLE'.

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username => 'ORACLE',	--Ensure username is in UPPERCASE
    password => 'USER_PASSWORD'
       );
     END;
     /
    
  7. Agora crie o link de banco de dados no Autonomous Database para o Oracle Database Gateway for SQL Server usando DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK.

    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. Agora, vamos consultar o MS SQL Server Database usando o Oracle DB Link.

    SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
    

Próximas Etapas

Neste tutorial, aprendemos a configurar Links de Banco de Dados de um Autonomous Database com Conectividade Heterogênea Gerenciada pelo Cliente para o Microsoft SQL Server (Não Oracle Database) em um Ponto Final Privado. Exploramos ambas as opções, isto é, sem uma wallet (TLS) e com uma wallet (TCPS).

Etapas semelhantes podem ser usadas para outros Bancos de Dados Não Oracle. Certifique-se de ter configurado o Oracle Database Gateway adequadamente.

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.