Tutorial: Consulta Oracle desde Clústeres de macrodatos de SQL Server

Se aplica a: síSQL Server 2019 (15.x)

En este tutorial, se muestra cómo consultar datos de Oracle desde un clúster de macrodatos de SQL Server 2019. Para ejecutar este tutorial, necesita acceder a un servidor de Oracle. Se requiere una cuenta de usuario de Oracle con privilegios de lectura para el objeto externo. Se admite la autenticación de usuario de proxy de Oracle. Si no tiene acceso, este tutorial puede proporcionarle una idea general de cómo funciona la virtualización de datos para orígenes de datos externos en un clúster de macrodatos de SQL Server.

En este tutorial, aprenderá a:

  • Crear una tabla externa de datos de una base de datos de Oracle externa.
  • Combinar estos datos con datos de alto valor en la instancia maestra.

Sugerencia

Si lo prefiere, puede descargar y ejecutar un script con los comandos de este tutorial. Para obtener instrucciones, vea los ejemplos de virtualización de datos en GitHub.

Requisitos previos

Crear una tabla de Oracle

En los pasos siguientes, creará una tabla de ejemplo llamada INVENTORY en Oracle.

  1. Conéctese a una base de datos y una instancia de Oracle que quiera usar para este tutorial.

  2. Ejecute la instrucción siguiente para crear la tabla 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. Importe el contenido del archivo inventory.csv en esa tabla. El archivo se ha creado con los scripts de creación de ejemplo de la sección Requisitos previos.

Crear un origen de datos externo

El primer paso es crear un origen de datos externo que pueda acceder al servidor de Oracle.

  1. En Azure Data Studio, conéctese a la instancia maestra de SQL Server del clúster de macrodatos. Para obtener más información, vea Conectarse a una instancia maestra de SQL Server.

  2. Haga doble clic en la conexión de la ventana Servidores para mostrar el panel del servidor de la instancia maestra de SQL Server. Seleccione Nueva consulta.

    Consultar una instancia maestra de SQL Server

  3. Ejecute el siguiente comando de Transact-SQL para cambiar el contexto de la base de datos Ventas de la instancia maestra.

    USE Sales
    GO
    
  4. Cree una credencial con ámbito de la base de datos para conectarse al servidor de Oracle. Proporcione las credenciales adecuadas para el servidor de Oracle en la instrucción siguiente.

    CREATE DATABASE SCOPED CREDENTIAL [OracleCredential]
    WITH IDENTITY = '<oracle_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_user_password,nvarchar(100),manager>';
    
  5. Cree un origen de datos externo que apunte al servidor de Oracle.

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

Opcional: autenticación de proxy de Oracle

Oracle admite la autenticación de proxy para proporcionar un control de acceso específico. Un usuario de proxy se conecta a la base de datos de Oracle con sus credenciales y suplanta a otro usuario en la base de datos.

Un usuario de proxy se puede configurar para tener acceso limitado en comparación con el usuario que se va a suplantar. Por ejemplo, se puede permitir a un usuario de proxy conectarse mediante un rol de base de datos específico del usuario que se va a suplantar. La identidad del usuario que se conecta a la base de datos de Oracle a través del usuario de proxy se conserva en la conexión, incluso si varios usuarios se conectan mediante la autenticación de proxy. Esto permite a Oracle aplicar el control de acceso y auditar las acciones realizadas en nombre del usuario real.

Si su escenario requiere el uso de un usuario de proxy de Oracle, reemplace los pasos 4 y 5 anteriores por lo siguiente.

  1. Cree una credencial con ámbito de la base de datos para conectarse al servidor de Oracle. Proporcione las credenciales de usuario de proxy de Oracle adecuadas para el servidor de Oracle en la instrucción siguiente.

    CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = '<oracle_proxy_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_proxy_user_password,nvarchar(100),manager>';
    
  2. Cree un origen de datos externo que apunte al servidor de Oracle.

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

Crear una tabla externa

Después, cree una tabla externa denominada iventory_ora en la tabla INVENTORY del servidor de 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>');

Nota

Los nombres de tabla y de columna usarán el identificador entre comillas de SQL de ANSI al realizar consultas en Oracle. Como resultado, los nombres distinguen mayúsculas de minúsculas. Es importante especificar el nombre en la definición de la tabla externa que coincida con el uso de mayúsculas exacto de los nombres de tabla y de columna de los metadatos de Oracle.

Consultar los datos

Ejecute la consulta siguiente para combinar los datos de la tabla externa iventory_ora con las tablas de la base de datos de Sales local.

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;

Limpieza

Use este comando para quitar los objetos de la base de datos creados en este tutorial.

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

Pasos siguientes

Obtenga información sobre cómo ingerir datos en el grupo de datos: