Tutoriel : Interroger Oracle à partir d’un cluster Big Data SQL Server

S’applique à : SQL Server 2019 (15.x)

Important

Le module complémentaire Clusters Big Data Microsoft SQL Server 2019 sera mis hors service. La prise en charge de la plateforme Clusters Big Data Microsoft SQL Server 2019 se terminera le 28 février 2025. Tous les utilisateurs existants de SQL Server 2019 avec Software Assurance seront entièrement pris en charge sur la plateforme, et le logiciel continuera à être maintenu par les mises à jour cumulatives SQL Server jusqu’à ce moment-là. Pour plus d’informations, consultez le billet de blog d’annonce et les Options Big Data sur la plateforme Microsoft SQL Server.

Ce tutoriel montre comment interroger les données Oracle à partir d’un cluster Big Data SQL Server 2019. Pour exécuter ce tutoriel, vous devez avoir accès à un serveur Oracle. Un compte d’utilisateur Oracle avec des privilèges de lecture sur l’objet externe est requis. L’authentification des utilisateurs du proxy Oracle est prise en charge. Si vous n’y avez pas accès, ce tutoriel peut vous donner une idée du fonctionnement de la virtualisation de données pour les sources de données externes dans un cluster Big Data SQL Server.

Dans ce tutoriel, vous allez apprendre à :

  • Créer une table externe pour les données d’une base de données Oracle externe.
  • Associer ces données à des données à valeur élevée dans l’instance maître.

Conseil

Si vous préférez, vous pouvez télécharger et exécuter un script pour les commandes de ce tutoriel. Pour obtenir des instructions, consultez les exemples de virtualisation de données sur GitHub.

Prérequis

Créer une table Oracle

Les étapes suivantes permettent de créer un exemple de table nommée INVENTORY dans Oracle.

  1. Connectez-vous à une instance Oracle et à une base de données que vous souhaitez utiliser pour ce tutoriel.

  2. Exécutez l’instruction suivante pour créer la table INVENTORY :

     CREATE TABLE "INVENTORY"
     (
         "INV_DATE" NUMBER(10,0) NOT NULL,
         "INV_ITEM" NUMBER(10,0) NOT NULL,
         "INV_WAREHOUSE" NUMBER(10,0) NOT NULL,
         "INV_QUANTITY_ON_HAND" NUMBER(10,0)
     );
    
     CREATE INDEX INV_ITEM ON HR.INVENTORY(INV_ITEM);
    
  3. Importez le contenu du fichier inventory.csv dans cette table. Ce fichier a été créé par les exemples de scripts de création de la section Conditions préalables.

Créer une source de données externe

La première étape consiste à créer une source de données externe qui peut accéder à votre serveur Oracle.

  1. Dans Azure Data Studio, connectez-vous à l’instance maître SQL Server de votre cluster Big Data. Pour plus d’informations, consultez Se connecter à l’instance maître SQL Server.

  2. Double-cliquez sur la connexion dans la fenêtre Serveurs pour afficher le tableau de bord de serveur de l’instance maître SQL Server. Sélectionnez Nouvelle requête.

    Requête d’instance maître SQL Server

  3. Exécutez la commande Transact-SQL suivante pour remplacer le contexte par celui de la base de données Sales dans l’instance maître.

    USE Sales
    GO
    
  4. Créez des informations d’identification étendues à la base de données pour vous connecter au serveur Oracle. Fournissez les informations d’identification appropriées à votre serveur Oracle dans l’instruction suivante.

    CREATE DATABASE SCOPED CREDENTIAL [OracleCredential]
    WITH IDENTITY = '<oracle_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_user_password,nvarchar(100),manager>';
    
  5. Créez une source de données externe qui pointe vers le serveur Oracle.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',CREDENTIAL = [OracleCredential]);
    

Facultatif : Authentification du proxy Oracle

Oracle prend en charge l’authentification du proxy pour fournir un contrôle d’accès précis. Un utilisateur proxy se connecte à la base de données Oracle à l’aide de ses informations d’identification et emprunte l’identité d’un autre utilisateur de la base de données.

Un utilisateur proxy peut être configuré pour disposer d’un accès limité par rapport à l’utilisateur dont l’identité est empruntée. Par exemple, un utilisateur proxy peut être autorisé à se connecter à l’aide d’un rôle de base de données spécifique de l’utilisateur dont l’identité est empruntée. L’identité de l’utilisateur qui se connecte à la base de données Oracle par le biais d’un utilisateur proxy est conservée dans la connexion, même si plusieurs utilisateurs se connectent à l’aide de l’authentification proxy. Cela permet à Oracle d’appliquer le contrôle d’accès et d’auditer les actions effectuées pour le compte de l’utilisateur réel.

Si votre scénario requiert l’utilisation d’un utilisateur de proxy Oracle, remplacez les étapes 4 et 5 précédentes par les suivantes.

  1. Créez des informations d’identification étendues à la base de données pour vous connecter au serveur Oracle. Fournissez les informations d’identification d’utilisateur de proxy appropriées à votre serveur Oracle dans l’instruction suivante.

    CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = '<oracle_proxy_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_proxy_user_password,nvarchar(100),manager>';
    
  2. Créez une source de données externe qui pointe vers le serveur Oracle.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',
    CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
    CREDENTIAL = [OracleProxyCredential]);
    

Créer une table externe

Créez ensuite une table externe nommée inventory_ora sur la table INVENTORY sur le serveur Oracle.

CREATE EXTERNAL TABLE [inventory_ora]
    ([inv_date] DECIMAL(10,0) NOT NULL, [inv_item] DECIMAL(10,0) NOT NULL,
    [inv_warehouse] DECIMAL(10,0) NOT NULL, [inv_quantity_on_hand] DECIMAL(10,0))
WITH (DATA_SOURCE=[OracleSalesSrvr],
        LOCATION='<oracle_service_name,nvarchar(30),xe>.<oracle_schema,nvarchar(128),HR>.<oracle_table,nvarchar(128),INVENTORY>');

Notes

Les noms de table et de colonne utilisent l’identificateur entre guillemets SQL ANSI lors de l’interrogation d’Oracle. Par conséquent, les noms respectent la casse. Il est important de spécifier le nom dans la définition de table externe qui correspond à la casse exacte des noms de table et de colonne dans les métadonnées Oracle.

Interroger les données

Exécutez la requête suivante pour associer les données de la table externe iventory_ora aux tables de la base de données Sales locale.

SELECT TOP(100) w.w_warehouse_name, i.inv_item, SUM(i.inv_quantity_on_hand) as total_quantity
  FROM [inventory_ora] as i
  JOIN item as it
    ON it.i_item_sk = i.inv_item
  JOIN warehouse as w
    ON w.w_warehouse_sk = i.inv_warehouse
 WHERE it.i_category = 'Books' and i.inv_item BETWEEN 1 and 18000 --> get items within specific range
 GROUP BY w.w_warehouse_name, i.inv_item;

Nettoyer

Utilisez la commande suivante pour supprimer les objets de base de données créés dans ce tutoriel.

DROP EXTERNAL TABLE [inventory_ora];
DROP EXTERNAL DATA SOURCE [OracleSalesSrvr] ;
DROP DATABASE SCOPED CREDENTIAL [OracleCredential];

Étapes suivantes

Découvrez comment ingérer des données dans le pool de données :