Руководство по созданию запроса Oracle из Кластера больших данных SQL Server

Область применения: SQL Server 2019 (15.x)

Важно!

Поддержка надстройки "Кластеры больших данных" Microsoft SQL Server 2019 будет прекращена. Мы прекратим поддержку Кластеров больших данных SQL Server 2019 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на платформе, а программное обеспечение будет продолжать поддерживаться через SQL Server накопительных обновлений до этого времени. Дополнительные сведения см. в записи блога объявлений и в статье о параметрах больших данных на платформе Microsoft SQL Server.

В этом руководстве описывается, каким образом выполняется запрос данных Oracle из кластера больших данных SQL Server 2019. Для работы с этим руководством требуется доступ к серверу Oracle. Требуется учетная запись пользователя Oracle с правами на чтение для внешнего объекта. Поддерживается проверка подлинности пользователя через прокси-сервер Oracle. Если у вас нет доступа к серверу, из этого руководства вы можете узнать о принципах виртуализации данных для внешних источников в кластере больших данных SQL Server.

В этом руководстве описано следующее:

  • Создание внешней таблицы для данных во внешней базе данных Oracle.
  • Объединение этих данных с важными данными в главном экземпляре.

Совет

При необходимости вы можете скачать и выполнить скрипт, содержащий команды из этого руководства. См. инструкции в разделе Примеры виртуализации данных на сайте GitHub.

Предварительные требования

Создание таблицы Oracle

Далее описывается создание примера таблицы с именем INVENTORY в Oracle.

  1. Подключитесь к базе данных и экземпляру Oracle, которые вы хотите использовать для этого руководства.

  2. Чтобы создать эту таблицу 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. Импортируйте содержимое файла inventory.csv в эту таблицу. Этот файл был создан с помощью примеров скриптов создания в разделе Предварительные требования.

Создание внешнего источника данных

Для начала необходимо создать внешний источник данных, который может обращаться к вашему серверу Oracle.

  1. В Azure Data Studio установите подключение к главному экземпляру SQL Server в кластере больших данных. Дополнительные сведения см. в разделе Подключение к главному экземпляру SQL Server.

  2. Дважды щелкните подключение в окне Серверы, чтобы открыть панель мониторинга сервера для главного экземпляра SQL Server. Выберите Создать запрос.

    Запрос главного экземпляра SQL Server

  3. Выполните следующую команду Transact-SQL, чтобы изменить контекст на базу данных Sales в главном экземпляре.

    USE Sales
    GO
    
  4. Создайте учетные данные в области базы данных для подключения к серверу Oracle. Предоставьте соответствующие учетные данные серверу Oracle в следующей инструкции.

    CREATE DATABASE SCOPED CREDENTIAL [OracleCredential]
    WITH IDENTITY = '<oracle_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_user_password,nvarchar(100),manager>';
    
  5. Создайте внешний источник данных, который указывает на сервер Oracle.

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

Необязательно. Проверка подлинности прокси-сервера Oracle

Oracle поддерживает проверку подлинности прокси-сервера для обеспечения точной детализации управления доступом. Пользователь прокси-сервера подключается к базе данных Oracle, используя ее учетные данные, и олицетворяет другого пользователя в базе данных.

Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя. Например, пользователю прокси-сервера можно разрешить подключаться с помощью определенной роли базы данных олицетворенного пользователя. Удостоверение пользователя, подключающегося к базе данных Oracle через прокси-сервер, сохраняется в соединении, даже если с помощью проверки подлинности прокси-сервера подключаются несколько пользователей. Это позволяет Oracle принудительно применять управление доступом и выполнять аудит действий, выполняемых от имени фактического пользователя.

Если в сценарии требуется использование пользователя прокси-сервера Oracle, вместо шагов 4 и 5 сделайте следующие.

  1. Создайте учетные данные в области базы данных для подключения к серверу Oracle. Предоставьте соответствующие учетные данные пользователя прокси-сервера Oracle для сервера Oracle в следующей инструкции.

    CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = '<oracle_proxy_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_proxy_user_password,nvarchar(100),manager>';
    
  2. Создайте внешний источник данных, который указывает на сервер Oracle.

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

Создание внешней таблицы

Далее создайте внешнюю таблицу с именем iventory_ora на основе таблицы INVENTORY на сервере 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>');

Примечание

При выполнении запросов к Oracle в именах таблиц и столбцов будет использоваться идентификатор SQL ANSI в кавычках. В связи с этим в таких именах учитывается регистр букв. В определении внешней таблицы важно указывать имена, которые в точности соответствуют именам таблиц и столбцов в метаданных Oracle.

Запрос данных

Выполните следующий запрос, чтобы объединить данные во внешней таблице iventory_ora с таблицами в локальной базе данных Sales.

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;

Очистка

Выполните следующую команду, чтобы удалить объекты базы данных, созданные в рамках этого руководства.

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

Дальнейшие действия

Сведения о приеме данных в пул данных: