Копирование данных из Oracle и обратно с помощью Фабрики данных Azure или Azure Synapse Analytics

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

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

В этой статье описывается, как с помощью действия Copy в Фабрике данных Azure копировать данные в базу данных Oracle и из нее. Она составлена на основе статьи Действие Copy в Фабрике данных Azure.

Поддерживаемые возможности

Этот соединитель Oracle поддерживается для следующих возможностей:

Поддерживаемые возможности IR
Действие копирования (источник/приемник) (1) (2)
Действие поиска (1) (2)
Действие скрипта (1) (2)

① Среда выполнения интеграции Azure ② Локальная среда выполнения интеграции

Список хранилищ данных, которые поддерживаются в качестве источников и приемников для действия копирования, приведен в таблице Поддерживаемые хранилища данных и форматы.

В частности, этот соединитель Oracle поддерживает:

  • Следующие версии базы данных Oracle:
    • Oracle 19c R1 (19.1) и более поздней версии
    • Oracle 18c R1 (18.1) и более поздней версии
    • Oracle 12c R1 (12.1) и более поздней версии
    • Oracle 11g R1 (11.1) и более поздней версии
    • Oracle 10g R1 (10.1)м
    • Oracle 9i R2 (9.2) и более поздней версии
    • Oracle 8i R3 (8.1.7) и более поздней версии
    • Служба Oracle Database Cloud Exadata
  • Параллельное копирование из источника Oracle. Дополнительные сведения см. в разделе Параллельное копирование из Oracle.

Примечание.

Прокси-сервер Oracle не поддерживается.

Необходимые компоненты

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

Если же хранилище данных представляет собой управляемую облачную службу данных, можно использовать Azure Integration Runtime. Если доступ предоставляется только по IP-адресам, утвержденным в правилах брандмауэра, вы можете добавить IP-адреса Azure Integration Runtime в список разрешений.

Вы также можете использовать функцию среды выполнения интеграции в управляемой виртуальной сети в Фабрике данных Azure для доступа к локальной сети без установки и настройки локальной среды выполнения интеграции.

Дополнительные сведения о вариантах и механизмах обеспечения сетевой безопасности, поддерживаемых Фабрикой данных, см. в статье Стратегии получения доступа к данным.

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

Начало работы

Чтобы выполнить действие копирования с конвейером, можно воспользоваться одним из приведенных ниже средств или пакетов SDK:

Создание связанной службы для Oracle с помощью пользовательского интерфейса

Выполните приведенные ниже действия, чтобы создать связанную службу для Oracle с помощью пользовательского интерфейса на портале Azure.

  1. Перейдите на вкладку "Управление" в рабочей области Фабрики данных Azure или Synapse и выберите "Связанные службы", после чего нажмите "Создать":

  2. Выполните поиск по запросу "Oracle" и выберите соединитель Oracle.

    Снимок экрана: соединитель Oracle.

  3. Настройте сведения о службе, проверьте подключение и создайте связанную службу.

    Снимок экрана: конфигурация связанной службы для Oracle.

Сведения о конфигурации соединителя

Следующие разделы содержат сведения о свойствах, которые используются для определения сущностей фабрики данных, характерных для соединителя Oracle.

Свойства связанной службы

Связанная служба Oracle поддерживает следующие свойства:

Свойство Описание: Обязательное поле
type Для свойства type необходимо задать значение Oracle. Да
connectionString Указывает сведения, необходимые для подключения к экземпляру базы данных Oracle.
Вы можете также поместить пароль в Azure Key Vault и извлечь конфигурацию password из строки подключения. Ознакомьтесь с приведенными ниже примерами и подробными сведениями в статье Хранение учетных данных в Azure Key Vault.

Поддерживаемые типы подключений: вы можете использовать ИД безопасности Oracle или имя службы Oracle для идентификации базы данных.
— Если вы используете идентификатор безопасности, используйте этот код для подключения: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;
— Если вы используете имя службы, используйте этот код: Host=<host>;Port=<port>;ServiceName=<servicename>;User Id=<username>;Password=<password>;
Для расширенных параметров подключения к собственному коду Oracle можно добавить запись в TNSNAMES. ORA-файл на компьютере, на котором установлена локальная среда выполнения интеграции, и в связанной службе Oracle выберите тип подключения Oracle Service Name и настройте соответствующее имя службы.
Да
connectVia Среда выполнения интеграции, используемая для подключения к хранилищу данных. Дополнительные сведения см. в разделе Предварительные условия. Если не указано другое, по умолчанию используется интегрированная Azure Integration Runtime. No

Совет

Если возникает шибка "ORA-01025: значение параметра UPI вне допустимого диапазона" и вы используете версию Oracle 8i, добавьте WireProtocolMode=1 в строку подключения. Затем повторите попытку.

При наличии нескольких экземпляров Oracle для сценария отработки отказа можно создать связанную службу Oracle и указать основной узел, порт, имя пользователя, пароль и т. д., а также добавить новое значение "Дополнительные свойства подключения" с именем свойства AlternateServers и значением (HostName=<secondary host>:PortNumber=<secondary port>:ServiceName=<secondary service name>) — не пропускайте скобки и обращайте внимание на двоеточия (:) в качестве разделителя. Например, следующее значение альтернативных серверов определяет два альтернативных сервера баз данных для отработки отказа подключения: (HostName=AccountingOracleServer:PortNumber=1521:SID=Accounting,HostName=255.201.11.24:PortNumber=1522:ServiceName=ABackup.NA.MyCompany).

Дополнительные свойства подключения, которые можно задать в строке подключения в зависимости от сценария

Свойство Description Допустимые значения
ArraySize Число байтов, которое соединитель может получить в одном круговом пути сети. Пример: ArraySize=‭10485760‬.

Чем больше значение, тем больше пропускная способность, поскольку получать данные из сети приходится реже. Чем меньше значение, тем меньше время отклика, так как передача данных с сервера выполняется быстрее.
Целое число от 1 до 4294967296 (4 ГБ). Значение по умолчанию: 60000. Значение 1 не определяет число байтов, а указывает на выделение пространства только для одной строки данных.

Включить шифрование для подключения Oracle можно двумя способами:

  • Чтобы использовать шифрование 3DES и AES, на стороне сервера Oracle перейдите к Oracle Advanced Security (OAS) и настройте соответствующие параметры. Дополнительные сведения см. в этой документации по Oracle. Соединитель Oracle Application Development Framework (ADF) автоматически согласовывает метод шифрования таким образом, чтобы при установлении соединения с Oracle использовался тот метод шифрования, который вы настроили в OAS.

  • Чтобы использовать TLS, настройте truststore проверку подлинности SSL-сервера, применяя один из следующих трех методов:

    • Метод 1 (рекомендуется):

      1. Установите TLS/SSL-сертификат, импортируя его в локальное хранилище сертификатов. Встроенный драйвер Oracle может загрузить необходимый сертификат из хранилища сертификатов.

      2. В службе настройте строка подключения Oracle.EncryptionMethod=1

    • Метод 2.

      1. Получите сведения о TLS/SSL-сертификате. Получите сведения о сертификате, закодированном в кодировке DER или расширенной почты (PEM) в кодировке SSL.

        openssl x509 -inform (DER|PEM) -in [Full Path to the DER/PEM Certificate including the name of the DER/PEM Certificate] -text
        
      2. В службе настройте строка подключения Oracle с EncryptionMethod=1 соответствующим TrustStore значением. Например: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;EncryptionMethod=1;TrustStore= data:// -----BEGIN CERTIFICATE-----<certificate content>-----END CERTIFICATE-----

        Примечание.

        • Значение TrustStore поля должно быть префиксировано с data://помощью .
        • При указании содержимого для нескольких сертификатов укажите содержимое каждого сертификата между -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Число дефисов (-----) должно быть одинаковым до и после обоихEND CERTIFICATEBEGIN CERTIFICATE. Например:
          -----BEGIN CERTIFICATE-----<certificate content 1>-----END CERTIFICATE-----
          -----BEGIN CERTIFICATE-----<certificate content 2>-----END CERTIFICATE-----
          -----BEGIN CERTIFICATE-----<certificate content 3>-----END CERTIFICATE-----
        • Поле TrustStore поддерживает содержимое до 8192 символов длиной.
    • Метод 3.

      1. truststore Создайте файл с сильными шифрами, такими как AES256.

        openssl pkcs12 -in [Full Path to the DER/PEM Certificate including the name of the DER/PEM Certificate] -out [Path and name of TrustStore] -passout pass:[Keystore PWD] -keypbe AES-256-CBC -certpbe AES-256-CBC -nokeys -export
        
      2. Поместите truststore файл на локальном компьютере среды выполнения интеграции. Например, поместите файл в C:\MyTrustStoreFile.

      3. В службе настройте строка подключения Oracle с EncryptionMethod=1 соответствующим TrustStore/TrustStorePassword значением. Например, Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;EncryptionMethod=1;TrustStore=C:\\MyTrustStoreFile;TrustStorePassword=<trust_store_password>.

Пример:

{
    "name": "OracleLinkedService",
    "properties": {
        "type": "Oracle",
        "typeProperties": {
            "connectionString": "Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Пример: хранение пароля в Azure Key Vault

{
    "name": "OracleLinkedService",
    "properties": {
        "type": "Oracle",
        "typeProperties": {
            "connectionString": "Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Свойства набора данных

В этом разделе содержится список свойств, поддерживаемых набором данных Oracle. Полный список разделов и свойств, доступных для определения наборов данных, см. в разделе Наборы данных в фабрике данных Azure.

Чтобы скопировать данные из базы данных Oracle или в нее, установите для свойства type набора данных значение OracleTable. Поддерживаются следующие свойства.

Свойство Описание: Обязательное поле
type Для свойства type набора данных необходимо задать значение OracleTable. Да
schema Имя схемы. "Нет" для источника, "Да" для приемника
table Имя таблицы или представления. "Нет" для источника, "Да" для приемника
tableName Имя таблицы или представления со схемой. Это свойство поддерживается только для обеспечения обратной совместимости. Для новой рабочей нагрузки используйте schema и table. "Нет" для источника, "Да" для приемника

Пример:

{
    "name": "OracleDataset",
    "properties":
    {
        "type": "OracleTable",
        "schema": [],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        },
        "linkedServiceName": {
            "referenceName": "<Oracle linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Свойства действия копирования

Этот раздел содержит список свойств, поддерживаемых источником и приемником Oracle. Полный список разделов и свойств, доступных для определения действий, см. в разделе Конвейеры и действия в фабрике данных Azure.

Oracle в качестве источника

Совет

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

Чтобы копировать данные из Oracle, установите тип источника в действии Copy — OracleSource. В разделе source действия копирования поддерживаются следующие свойства:

Свойство Описание: Обязательное поле
type Свойству type источника действия копирования необходимо задать значение OracleSource. Да
oracleReaderQuery Используйте пользовательский SQL-запрос для чтения данных. Например, "SELECT * FROM MyTable".
При включении секционированной нагрузки необходимо привязать все соответствующие встроенные параметры раздела в запросе. Примеры см. в разделе Параллельное копирование из Oracle.
No
convertDecimalToInteger Тип Oracle NUMBER с нулевым или неопределенным масштабом будет преобразован в соответствующее целое число. Допустимые значения: true и false (по умолчанию). No
partitionOptions Задает параметры секционирования данных, используемые для загрузки данных из Oracle.
Допустимые значения: Нет (по умолчанию), PhysicalPartitionsOfTable и DynamicRange.
Если параметр секционирования включен (любое значение, кроме None), степень параллелизма для параллельной загрузки данных из Базы данных Oracle управляется параметром parallelCopies в действии Copy.
No
partitionSettings Позволяет указать группу параметров для секционирования данных.
Применяется, если параметр секционирования имеет значение, отличное от None.
No
partitionNames Список физических секций, которые необходимо скопировать.
Применяется, если параметр секции имеет значение PhysicalPartitionsOfTable. Если для получения исходных данных используется запрос, подключите ?AdfTabularPartitionName в предложении WHERE. Пример можно найти в разделе Параллельное копирование из Oracle.
No
partitionColumnName Укажите имя исходного столбца целочисленного типа, который будет использоваться для секционирования по диапазонам при параллельном копировании. Если значение не указано, автоматически определяется первичный ключ таблицы, который используется в качестве столбца секционирования.
Применяется, если параметр секции имеет значение DynamicRange. Если для получения исходных данных используется запрос, подключите ?AdfRangePartitionColumnName в предложении WHERE. Пример можно найти в разделе Параллельное копирование из Oracle.
No
partitionUpperBound Максимальное значение столбца секционирования для копирования данных.
Применяется, если параметр секции имеет значение DynamicRange. Если для получения исходных данных используется запрос, подключите ?AdfRangePartitionUpbound в предложении WHERE. Пример можно найти в разделе Параллельное копирование из Oracle.
No
partitionLowerBound Минимальное значение столбца секционирования для копирования данных.
Применяется, если параметр секции имеет значение DynamicRange. Если для получения исходных данных используется запрос, подключите ?AdfRangePartitionLowbound в предложении WHERE. Пример можно найти в разделе Параллельное копирование из Oracle.
No

Пример: копирование данных с помощью простого запроса без секции

"activities":[
    {
        "name": "CopyFromOracle",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Oracle input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "OracleSource",
                "convertDecimalToInteger": false,
                "oracleReaderQuery": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Oracle в качестве приемника

Чтобы скопировать данные в базу данных Oracle, в действии Copy задайте тип приемника OracleSink. В разделе sink действия Copy поддерживаются следующие свойства.

Свойство Описание: Обязательное поле
type Для свойства типа приемника действия копирования должно быть задано OracleSinkзначение . Да
writeBatchSize Вставляет данные в таблицу SQL, когда размер буфера достигает значения writeBatchSize.
Допустимые значения: целое число (количество строк).
Нет (значение по умолчанию — 10 000)
writeBatchTimeout Время ожидания до выполнения операции пакетной вставки, пока не завершится срок ее действия.
Допустимые значения: временной диапазон. Например, 00:30:00 (30 минут).
No
preCopyScript Перед записью данных в базу данных Oracle при каждом запуске указывайте SQL-запрос для выполнения действия Copy. Это свойство можно использовать для очистки предварительно загруженных данных. No
 maxConcurrentConnections Верхний предел одновременных подключений, установленных для хранилища данных при выполнении действия. Указывайте значение только при необходимости ограничить количество одновременных подключений.  Без

Пример:

"activities":[
    {
        "name": "CopyToOracle",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Oracle output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "OracleSink"
            }
        }
    }
]

Параллельное копирование из Oracle

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

Снимок экрана с параметрами секционирования

Если включено копирование с секционированием, служба выполняет параллельные запросы к источнику Oracle для загрузки данных по секциям. Степень параллелизма определяется с помощью параметра parallelCopies для действия копирования. Например, если parallelCopies имеет значение 4, служба одновременно создаст и выполнит четыре запроса с учетом указанного способа и параметров секционирования, где каждый запрос извлекает часть данных из базы данных Oracle.

Рекомендуется включить параллельное копирование с секционированием данных, особенно при загрузке большого объема данных из базы данных Oracle. Ниже приведены рекомендуемые конфигурации для разных сценариев. Если копирование данных выполняется в файловое хранилище данных, мы рекомендуем сохранять данные в папку несколькими файлами (указывая только имя папки), так как производительность в таком случае будет выше, чем при записи в один файл.

Сценарий Предлагаемые параметры
Полная загрузка из большой таблицы с физическими секциями. Параметр секционирования. Физические секции таблицы.

Во время выполнения служба автоматически определяет физические секции и копирует данные по секциям.
Полная загрузка из большой таблицы без физических секций, когда таблица содержит столбец целочисленного типа для секционирования данных. Параметры секции: секция динамического диапазона.
Столбец секционирования: укажите столбец, используемый для секционирования данных. Если значение не указано, то используется столбец с первичным ключом.
Загрузка большого объема данных с помощью пользовательского запроса с физическими секциями. Параметр секционирования. Физические секции таблицы.
Запрос: SELECT * FROM <TABLENAME> PARTITION("?AdfTabularPartitionName") WHERE <your_additional_where_clause>.
Имя секции: укажите имена секций, из которых следует копировать данные. Если не указано, служба автоматически обнаруживает физические секции в таблице, указанной в наборе данных Oracle.

Во время выполнения служба данных заменяет ?AdfTabularPartitionName фактическим именем секции и отправляет данные в Oracle.
Загрузка большого объема данных пользовательским запросом без использования физических секций, однако с использованием столбца целочисленного типа для секционирования данных. Параметры секции: секция динамического диапазона.
Запрос: SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.
Столбец секционирования: укажите столбец, используемый для секционирования данных. Секционирование можно выполнять по столбцу с целочисленным типом данных.
Верхняя граница секции и Нижняя граница секции: укажите эти значения, если нужно добавить фильтрацию по столбцу секционирования, чтобы получить данные только в пределах между нижним и верхним значениями.

Во время выполнения служба заменяет ?AdfRangePartitionColumnName, ?AdfRangePartitionUpbound и ?AdfRangePartitionLowbound фактическими значениями именем столбца и диапазонами значений для каждой секции, а затем отправляет их в Oracle.
Например, если указан столбец секционирования ID с нижней границей 1 и верхней границей 80 при этом для параллельного копирования указано значение 4, служба будет извлекать данные по 4 секциям. Для них будут применены следующие диапазоны значений идентификаторов: [1, 20], [21, 40], [41, 60] и [61, 80].

Совет

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

Пример: запрос с физической секцией

"source": {
    "type": "OracleSource",
    "query": "SELECT * FROM <TABLENAME> PARTITION(\"?AdfTabularPartitionName\") WHERE <your_additional_where_clause>",
    "partitionOption": "PhysicalPartitionsOfTable",
    "partitionSettings": {
        "partitionNames": [
            "<partitionA_name>",
            "<partitionB_name>"
        ]
    }
}

Пример: запрос с секционированием по динамическому диапазону

"source": {
    "type": "OracleSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column>",
        "partitionLowerBound": "<lower_value_of_partition_column>"
    }
}

Сопоставление типов данных для Oracle

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

Тип данных Oracle Промежуточный тип данных
BFILE Byte[]
BLOB-объект Byte[]
(поддерживается только в Oracle 10g и более поздних версий)
CHAR Строка
CLOB Строка
DATE Дата/время
FLOAT Десятичное число, строка (если точность > 28)
INTEGER Десятичное число, строка (если точность > 28)
LONG Строка
LONG RAW Byte[]
NCHAR Строка
NCLOB Строка
NUMBER (p,s) Десятичное число, строка (если p > 28)
NUMBER без точности и масштаба Двойной
NVARCHAR2 Строка
НЕОБРАБОТАННЫЕ Byte[]
ROWID Строка
TIMESTAMP Дата/время
TIMESTAMP WITH LOCAL TIME ZONE Строка
TIMESTAMP WITH TIME ZONE Строка
UNSIGNED INTEGER Число
VARCHAR2 Строка
XML Строка

Примечание.

Типы данных INTERVAL YEAR TO MONTH и INTERVAL DAY TO SECOND не поддерживаются.

Свойства действия поиска

Подробные сведения об этих свойствах см. в разделе Действие поиска.

Список хранилищ данных, поддерживаемых в рамках функции копирования в качестве источников и приемников, см. в разделе Поддерживаемые хранилища данных.