Копирование данных из 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:
- средство копирования данных;
- Портал Azure
- Пакет SDK для .NET
- Пакет SDK для Python
- Azure PowerShell
- The REST API
- шаблон Azure Resource Manager.
Создание связанной службы для Oracle с помощью пользовательского интерфейса
Выполните приведенные ниже действия, чтобы создать связанную службу для Oracle с помощью пользовательского интерфейса на портале Azure.
Перейдите на вкладку "Управление" в рабочей области Фабрики данных Azure или Synapse и выберите "Связанные службы", после чего нажмите "Создать":
Выполните поиск по запросу "Oracle" и выберите соединитель 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 (рекомендуется):
Установите TLS/SSL-сертификат, импортируя его в локальное хранилище сертификатов. Встроенный драйвер Oracle может загрузить необходимый сертификат из хранилища сертификатов.
В службе настройте строка подключения Oracle.
EncryptionMethod=1
Метод 2.
Получите сведения о 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
В службе настройте строка подключения 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 CERTIFICATE
BEGIN 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.
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
Поместите
truststore
файл на локальном компьютере среды выполнения интеграции. Например, поместите файл вC:\MyTrustStoreFile
.В службе настройте строка подключения 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 не поддерживаются.
Свойства действия поиска
Подробные сведения об этих свойствах см. в разделе Действие поиска.
Связанный контент
Список хранилищ данных, поддерживаемых в рамках функции копирования в качестве источников и приемников, см. в разделе Поддерживаемые хранилища данных.