Remarque :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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
- Lisez le document Create Database Links with Customer-Managed Heterogeneous Connectivity to Non-Oracle Databases on a Private Endpoint
- Passez en revue les prérequis mentionnés dans le document
- ADB-S - Autonomous Transaction Processing 19c sur une adresse privée
- Non Oracle Database - Microsoft SQL Server 2019 Express Edition, nom de base de données - AdventureWorks, port TCP (1433) exécuté sur une machine virtuelle Windows sur une adresse privée
- Système d'exploitation de machine virtuelle Windows - Windows Server 2019
- Oracle Database Gateway - Oracle Database Gateway for SQL Server, Port - TCP (1521), TCPS (2484)
- Téléchargez les passerelles Oracle Database à partir d'ici, puis installez et configurez Oracle Database Gateway for SQL Server.
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
Description de l'illustration adb-s-db-link-to-mssql.png
Option 1 : créer des liens de base de données sans portefeuille (TLS)
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.
- ORACLE_HOME\dg4msql\admin\initdg4msql.ora
- ORACLE_HOME\network\admin\listener.ora
- ORACLE_HOME\network\admin\sqlnet.ora
- ORACLE_HOME\network\admin\tnsnames.ora
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
Tâche 1.2 : création d'un lien de base de données à partir d'une instance Autonomous Database sans portefeuille
-
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 ServerAdventureWorks
. -
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 SQLORACLE
.BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'DB_LINK_CRED', username => 'ORACLE', --Ensure username is in UPPERCASE password => 'USER_PASSWORD' ); END; /
-
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. -
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.
Option 2 : créer des liens de base de données avec un portefeuille (TCPS)
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 :
-
C:\app\oracle\product\19.0.0\tghome_1\walletserver
-
C:\app\oracle\product\19.0.0\tghome_1\walletclient
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 :
-
ORACLE_HOME\dg4msql\admin\initdg4msql.ora
-
ORACLE_HOME\network\admin\listener.ora
-
ORACLE_HOME\network\admin\sqlnet.ora
-
ORACLE_HOME\network\admin\tnsnames.ora
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)
)
Tâche 2.2 : création d'un lien de base de données à partir d'une instance Autonomous Database avec un portefeuille
-
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 ServerAdventureWorks
. -
Copiez le portefeuille client (
cwallet.sso
) deC:\app\oracle\product\19.0.0\tghome_1\walletclient
vers la banque d'objets OCI. -
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; /
-
-
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';
-
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. -
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; /
-
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; /
-
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
- Auteur - Deviprasad Moolya (architecte cloud principal)
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.
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.