Nota:

Crear enlaces de base de datos de Autonomous Database con conectividad heterogénea gestionada por el cliente a Microsoft SQL Server en un punto final privado

Introducción

En una organización, los datos se almacenan en varias bases de datos y muchas veces mientras trabaja en una base de datos, debe acceder a los objetos de otra base de datos. Aquí es donde Oracle Database Link puede ayudar, un enlace de base de datos es un objeto de esquema que le permite acceder a los objetos de otra base de datos. La otra base de datos no necesita ser un sistema Oracle Database. Sin embargo, para acceder a sistemas que no sean de Oracle, debe utilizar Oracle Heterogeneous Services.

En este tutorial, analizaremos cómo puede acceder a una base de datos Microsoft SQL Server (base de datos no Oracle) que está en un punto final privado desde Oracle Autonomous Database Serverless (ADB-S) en un punto final privado. Para acceder a bases de datos que no sean de Oracle desde ADB-S, necesitamos crear enlaces de base de datos desde una instancia de Autonomous Database a una de Oracle Database Gateway.

Hay dos opciones para crear enlaces de base de datos de una instancia de Autonomous Database a una instancia de Oracle Database Gateway para acceder a bases de datos no Oracle que están en un punto final privado:

Creación de enlaces de base de datos con conectividad heterogénea gestionada por el cliente a una base de datos de Microsoft SQL Server en un punto final privado sin cartera (TLS)

Creación de enlaces de base de datos con conectividad heterogénea gestionada por el cliente a una base de datos de Microsoft SQL Server en un punto final privado con una cartera (TCPS)

Objetivos

Cree enlaces de base de datos de Autonomous Database con conectividad heterogénea gestionada por el cliente a Microsoft SQL Server (no de Oracle Database) en un punto final privado.

Requisitos

Para simplificarlo, hemos instalado Oracle Database Gateway for SQL Server y Microsoft SQL Server 2019 en la misma instancia de VM de OCI con Windows Server 2019.

Arquitectura

A continuación se muestra un ejemplo de arquitectura de alto nivel de la solución

Imagen 1

Descripción de la ilustración adb-s-db-link-to-mssql.png

Tarea 1.1: Configuración de Oracle Database Gateway for SQL Server

Antes de empezar, debemos asegurarnos de que Oracle Database Gateway for SQL Server está configurado correctamente. Al instalar Oracle Database Gateway for SQL Server, configurará ORACLE_HOME, tome nota de la ubicación ORACLE_HOME. Para este tutorial, la ubicación es 'C:\app\oracle\product\19.0.0\tghome_1'.

Hay cuatro archivos importantes que debe asegurarse de que están configurados correctamente.

Así es como se ven los archivos en nuestro entorno de prueba 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 el servicio de Oracle Database Gateway; para este tutorial es 'OracleOraGTW19Home1TNSListener' mediante la consola de servicios (Services.msc).

Puede comprobar el estado del listener mediante el 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. Cree una conexión en MS SQL Server que tenga acceso a la base de datos de MS SQL Server. Por ejemplo, hemos creado una conexión SQL ORACLE en MS SQL Server que tiene acceso a la base de datos de MS SQL Server AdventureWorks.

  2. Conéctese a Autonomous Database y cree credenciales para acceder a la base de datos de MS SQL Server. El nombre de usuario y la contraseña que especifique con DBMS_CLOUD.CREATE_CREDENTIAL son las credenciales de la base de datos de MS SQL Server que se utilizan en el enlace de base de datos. Para este tutorial, proporcionamos credenciales para la conexión SQL ORACLE.

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DB_LINK_CRED',
      username => 'ORACLE',	--Ensure username is in UPPERCASE
      password => 'USER_PASSWORD'
      );
    END;
    /
    
  3. Ahora cree el enlace de base de datos de Autonomous Database a Oracle Database Gateway for SQL Server mediante 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;
     /
    
    

    Nota: El parámetro private_target se debe definir en TRUE cuando el destino que no sea Oracle Database está en un punto final privado.

  4. Consulte la base de datos de MS SQL Server mediante el enlace de Oracle DB.

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

Puede consultar la base de datos de MS SQL Server que está en un punto final privado mediante el enlace de Oracle DB sin cartera de ADB-S.

Tarea 2.1: Configuración de Oracle Database Gateway for SQL Server

Ahora, antes de crear los enlaces de base de datos con la conectividad heterogénea gestionada por el cliente a la base de datos de Microsoft SQL Server en un punto final privado con una cartera, necesitamos crear una cartera. Podemos crear una cartera autofirmada mediante orapki.

Crearemos la cartera de servidor y cliente en la misma máquina en la que está instalado Oracle Database Gateway for SQL Server. Dado que la puerta de enlace se instaló en esta máquina, orapki ya está presente aquí 'C:\app\oracle\product\19.0.0\tghome_1\bin'.

Vamos a crear dos carpetas para la cartera de servidor y cliente:

Comandos para crear una cartera de servidor y agregar un certificado de 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 crear una cartera de cliente y agregar un certificado de 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

Ahora debemos exportar los certificados de la cartera del servidor e importarlos a la cartera del cliente, así como exportar los certificados de la cartera del cliente e importarlos a la cartera del servidor.

Comandos para exportar los certificados desde las carteras:

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 los certificados a las carteras:

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

Ahora asegúrese de que los cuatro archivos siguientes se actualicen correctamente:

Así es como se ven los archivos en nuestro entorno de prueba 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. Cree una conexión en MS SQL Server que tenga acceso a la base de datos de MS SQL Server. Por ejemplo, hemos creado una conexión SQL ORACLE en MS SQL Server que tiene acceso a la base de datos de MS SQL Server AdventureWorks.

  2. Copie la cartera de cliente (cwallet.sso) de C:\app\oracle\product\19.0.0\tghome_1\walletclient en el almacén de objetos de OCI.

  3. Conéctese a Autonomous Database y vamos a crear credenciales para acceder al almacén de objetos en el que ha copiado el archivo cwallet.sso.

    • Consulte CREATE_CREDENTIAL para obtener información sobre los parámetros de nombre de usuario y contraseña para diferentes servicios de almacenamiento de objetos.

    • Consulte Claves y OCID necesarios para obtener la información de parámetros necesaria.

      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. Ahora crearemos un directorio en Autonomous Database para el archivo de cartera cwallet.sso.

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. Utilizaremos DBMS_CLOUD.GET_OBJECT para cargar la cartera autofirmada del gateway de destino en el directorio creado en el paso 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 obtener object_uri, consulte Formatos de URI de almacenamiento de objetos en la nube

  6. Cree credenciales para acceder a la base de datos de MS SQL Server. El nombre de usuario y la contraseña que especifique con DBMS_CLOUD.CREATE_CREDENTIAL son las credenciales de la base de datos de MS SQL Server que se utilizan en el enlace de base de datos. En este tutorial, proporcionamos credenciales para la conexión SQL 'ORACLE'.

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username => 'ORACLE',	--Ensure username is in UPPERCASE
    password => 'USER_PASSWORD'
       );
     END;
     /
    
  7. Ahora cree el enlace de base de datos de Autonomous Database a Oracle Database Gateway for SQL Server mediante 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. Ahora vamos a consultar la base de datos de MS SQL Server mediante el enlace de Oracle DB.

    SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
    

Pasos Siguientes

En este tutorial, hemos aprendido a configurar enlaces de base de datos desde una instancia de Autonomous Database con conectividad heterogénea gestionada por el cliente a Microsoft SQL Server (no Oracle Database) en un punto final privado. Exploramos ambas opciones, es decir, sin cartera (TLS) y con cartera (TCPS).

Se pueden utilizar pasos similares para otras bases de datos que no sean de Oracle, debe asegurarse de que ha configurado Oracle Database Gateway correctamente.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre los productos, visite Oracle Help Center.