Remarque :

Créer des liens de base de données à partir d'Autonomous Database avec une connectivité hétérogène gérée par le client à Microsoft SQL Server sur une adresse privée

Introduction

Dans une organisation, les données sont stockées dans plusieurs bases de données. Pendant que vous travaillez sur une base, vous devez accéder aux objets d'une autre base de données. C'est là qu'Oracle Database Link peut vous aider, un lien de base de données est un objet de schéma dans une base de données qui vous permet d'accéder aux objets d'une autre base de données. L'autre base de données ne doit pas nécessairement être un système Oracle Database. Toutefois, pour accéder aux systèmes autres qu'Oracle, vous devez utiliser Oracle Heterogeneous Services.

Dans ce tutoriel, nous aborderons la façon dont vous pouvez accéder à une base de données Microsoft SQL Server (base de données non Oracle) située sur une adresse privée à partir d'Oracle Autonomous Database Serverless (ADB-S) sur une adresse privée. Pour accéder à des bases de données autres qu'Oracle à partir d'ADB-S, nous devons créer des liens de base de données d'une instance Autonomous Database vers une instance Oracle Database Gateway.

Deux options permettent de créer des liens de base de données d'une instance Autonomous Database vers une instance Oracle Database Gateway afin d'accéder à des bases de données non Oracle se trouvant sur une adresse privée :

Création de liens de base de données avec une connectivité hétérogène gérée par le client à la base de données Microsoft SQL Server sur une adresse privée sans portefeuille (TLS)

Création de liens de base de données avec une connectivité hétérogène gérée par le client à la base de données Microsoft SQL Server sur une adresse privée avec un portefeuille (TCPS)

Objectifs

Créez des liens de base de données à partir d'Autonomous Database avec une connectivité hétérogène gérée par le client à Microsoft SQL Server (non-Oracle Database) sur une adresse privée.

Prérequis

Pour simplifier, nous avons installé Oracle Database Gateway for SQL Server et Microsoft SQL Server 2019 sur la même instance de machine virtuelle OCI avec Windows Server 2019.

Architecture

Voici un exemple d'architecture de haut niveau de la solution

Image 1

Description de l'illustration adb-s-db-link-to-mssql.png

Tâche 1.1 : Configurer Oracle Database Gateway for SQL Server

Avant de commencer, nous devons nous assurer qu'Oracle Database Gateway for SQL Server est configuré correctement. Lors de l'installation d'Oracle Database Gateway for SQL Server, vous allez configurer ORACLE_HOME, notez l'emplacement ORACLE_HOME. Pour ce tutoriel, l'emplacement est 'C:\app\oracle\product\19.0.0\tghome_1'.

Quatre fichiers importants doivent être configurés correctement.

Voici l'aspect des fichiers dans notre environnement de test pour ce tutoriel.

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

Redémarrez le service Oracle Database Gateway. Pour ce tutoriel, il s'agit d'OracleOraGTW19Home1TNSListener à l'aide de la console de services (Services.msc).

Vous pouvez vérifier le statut du processus d'écoute à l'aide de la commande 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. Créez une connexion sur MS SQL Server qui a accès à la base de données MS SQL Server. Par exemple, nous avons créé une connexion SQL ORACLE sur MS SQL Server qui a accès à la base de données MS SQL Server AdventureWorks.

  2. Connectez-vous à Autonomous Database et créez des informations d'identification pour accéder à la base de données MS SQL Server. Le nom utilisateur et le mot de passe que vous indiquez avec DBMS_CLOUD.CREATE_CREDENTIAL correspondent aux informations d'identification de la base de données MS SQL Server utilisées dans le lien de base de données. Pour ce tutoriel, nous avons fourni des informations d'identification pour la connexion SQL ORACLE.

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DB_LINK_CRED',
      username => 'ORACLE',	--Ensure username is in UPPERCASE
      password => 'USER_PASSWORD'
      );
    END;
    /
    
  3. Créez à présent le lien de base de données sur Autonomous Database vers Oracle Database Gateway for SQL Server à l'aide de 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;
     /
    
    

    Remarque : le paramètre private_target doit être défini sur TRUE lorsque la base de données non Oracle Database cible se trouve sur une adresse privée.

  4. Interrogez la base de données MS SQL Server à l'aide du lien Oracle DB.

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

Vous pouvez interroger la base de données MS SQL Server située sur une adresse privée à l'aide du lien Oracle DB sans portefeuille à partir d'ADB-S.

Tâche 2.1 : Configurer Oracle Database Gateway for SQL Server

Avant de créer les liens de base de données avec une connectivité hétérogène gérée par le client à la base de données Microsoft SQL Server sur une adresse privée avec un portefeuille, nous devons créer un portefeuille. Nous pouvons créer un portefeuille auto-signé à l'aide d'orapki.

Nous allons créer le portefeuille du serveur et du client sur le même ordinateur qu'Oracle Database Gateway for SQL Server. Etant donné que la passerelle a été installée sur cet ordinateur, orapki est déjà présent ici : C:\app\oracle\product\19.0.0\tghome_1\bin.

Créons deux dossiers pour le portefeuille du serveur et du client :

Commandes permettant de créer un portefeuille de serveur et d'ajouter un certificat de serveur :

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

Commandes permettant de créer un portefeuille client et d'ajouter un certificat client :

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

Maintenant, nous devons exporter les certificats à partir du portefeuille de serveur et les importer dans le portefeuille client, exporter les certificats à partir du portefeuille client et les importer dans le portefeuille de serveur.

Commandes permettant d'exporter les certificats à partir des portefeuilles :

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

Commandes pour importer les certificats dans les portefeuilles :

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

Assurez-vous maintenant que les quatre fichiers suivants ont été mis à jour correctement :

Voici l'aspect des fichiers dans notre environnement de test pour ce tutoriel.

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. Créez une connexion sur MS SQL Server qui a accès à la base de données MS SQL Server. Par exemple, nous avons créé une connexion SQL ORACLE sur MS SQL Server qui a accès à la base de données MS SQL Server AdventureWorks.

  2. Copiez le portefeuille client (cwallet.sso) de C:\app\oracle\product\19.0.0\tghome_1\walletclient vers la banque d'objets OCI.

  3. Connectez-vous à Autonomous Database et créons des informations d'identification pour accéder à la banque d'objets dans laquelle vous avez copié le fichier cwallet.sso.

    • Reportez-vous à CREATE_CREDENTIAL pour plus d'informations sur les paramètres de nom utilisateur et de mot de passe des différents services de stockage d'objet.

    • Pour obtenir les informations sur les paramètres requis, reportez-vous à Clés et OCID requis.

      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. Nous allons maintenant créer un répertoire sur Autonomous Database pour le fichier de portefeuille cwallet.sso.

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. Nous allons utiliser DBMS_CLOUD.GET_OBJECT pour télécharger le portefeuille auto-signé de la passerelle cible vers le répertoire créé à l'étape précédente, 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;
    

    Pour obtenir le fichier object_uri, reportez-vous à Formats d'URI de stockage d'objet cloud.

  6. Créez des informations d'identification pour accéder à la base de données MS SQL Server. Le nom utilisateur et le mot de passe que vous indiquez avec DBMS_CLOUD.CREATE_CREDENTIAL correspondent aux informations d'identification de la base de données MS SQL Server utilisées dans le lien de base de données. Dans ce tutoriel, nous avons fourni des informations d'identification pour la connexion SQL 'ORACLE'.

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username => 'ORACLE',	--Ensure username is in UPPERCASE
    password => 'USER_PASSWORD'
       );
     END;
     /
    
  7. Créez à présent le lien de base de données sur Autonomous Database vers Oracle Database Gateway for SQL Server à l'aide de 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. Examinons maintenant la base de données MS SQL Server à l'aide du lien Oracle DB.

    SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
    

Etapes suivantes

Dans ce tutoriel, nous avons appris à configurer des liens de base de données à partir d'une instance Autonomous Database avec une connectivité hétérogène gérée par le client à Microsoft SQL Server (non-Oracle Database) sur une adresse privée. Nous avons exploré les deux options, à savoir sans portefeuille (TLS) et avec portefeuille (TCPS).

Des étapes similaires peuvent être utilisées pour d'autres bases de données non Oracle. Vous devez vous assurer que vous avez configuré Oracle Database Gateway correctement.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.