本文概述了如何使用管道中的复制活动从 Oracle 数据库复制数据。
具体而言,此 Oracle 数据库连接器支持:
- 以下版本的 Oracle 数据库: - Oracle 数据库 19c 及更高版本
- Oracle 数据库 18c 及更高版本
- Oracle 数据库 12c 及更高版本
- Oracle 数据库 11g 及更高版本
 
- 从 Oracle 数据库源进行并行复制。 有关详细信息,请参阅 Oracle 数据库中的并行复制 部分。 
注释
不支持 Oracle 代理服务器。
支持的配置
有关复制活动下每个选项卡的配置,请分别转到以下各部分。
常规
若要配置“常规”设置选项卡,请参阅“常规”设置指导。
Source
Oracle 数据库支持复制活动的“源”选项卡下的以下属性。
需要以下属性:
- 连接:从连接列表中选择 Oracle 数据库连接。 如果连接不存在,则通过选择连接列表底部的“更多”,创建新的 Oracle 数据库连接。
- 使用查询:选择“表”或“查询”。
- 如果选择“表”: - 表:在 Oracle 数据库中指定要读取数据的表的名称。 从下拉列表中选择表,或选择“手动输入”,输入架构和表单名称。   
 
- 如果选择“查询”: - 查询:指定使用自定义 SQL 查询读取数据。 例如: - SELECT * FROM MyTable。 请注意,查询不应以分号结尾(;))。- 启用分区加载时,需要在查询中挂接任何相应的内置分区参数。 有关示例,请参阅从 Oracle 数据库进行并行复制部分。   
 
 
在“高级”下,可以指定以下字段:
- 分区选项:指定用于从 Oracle 数据库加载数据的数据分区选项。 启用分区选项(即,不是“无”)时,从 Oracle Database 并发加载数据的并行度由“复制活动设置”选项卡中的“复制并行度”控制。 - 如果选择“无”,则选择不使用分区。 - 如果选择“表的物理分区”: - 分区名称:指定需要复制的物理分区的列表。 - 如果使用查询来检索源数据,请在 WHERE 子句中挂接 - ?DfTabularPartitionName。 有关示例,请参阅从 Oracle 数据库进行并行复制部分。
 - 如果选择“动态范围”: - 分区列名称:以整数类型指定源列的名称,范围分区将使用它进行并行复制。 如果未指定,系统会自动检测表的主键并将其用作分区列。 - 如果使用查询来检索源数据,请在 WHERE 子句中挂接 - ?DfRangePartitionColumnName。 有关示例,请参阅从 Oracle 数据库进行并行复制部分。
- 分区上限:指定要从中复制数据的分区列的最大值。 - 如果使用查询来检索源数据,请在 WHERE 子句中挂接 - ?DfRangePartitionUpbound。 有关示例,请参阅从 Oracle 数据库进行并行复制部分中的“并行复制”。
- 分区下限:指定要从中复制数据的分区列的最小值。 - 如果使用查询来检索源数据,请在 WHERE 子句中挂接 - ?DfRangePartitionLowbound。 有关示例,请参阅从 Oracle 数据库进行并行复制部分中的“并行复制”。
 
- 查询超时(分钟):指定查询命令执行的超时,默认值为 120 分钟。 如果为此属性设置了参数,则允许的值是时间跨度,例如“02:00:00”(120 分钟)。 
- NUMBER 设置:指定 NUMBER 的精度和小数位数。 这仅适用于在 Oracle 数据库中未显式定义的精度和缩放的 NUMBER 类型。 - 精度:指定有效十进制数字的最大数目。 允许的值范围为 1 到 256。 如果未指定,则默认为 256。 
- 刻度:指定小数点后的位数。 允许的值范围为 0 到 130,并且必须小于或等于精度。 如果未指定,则默认为 130。 
 
- 其他列:添加其他数据列以存储源文件的相对路径或静态值。 后者支持表达式。 
目标
Oracle 数据库支持复制活动的“目的地”选项卡下的以下属性。
需要以下属性:
- 连接:从连接列表中选择 Oracle 数据库连接。 如果连接不存在,则通过选择连接列表底部的“更多”,创建新的 Oracle 数据库连接。
- 表:从下拉列表中选择数据库中的表。 或者,选中“手动输入”,以输入架构和表单名称。
在“高级”下,可以指定以下字段:
- 复制前脚本:每次运行时将数据写入 Oracle 数据库之前,为要执行的复制活动指定 SQL 查询。 可以使用此属性清除预加载的数据。
- 写入批超时:超时前等待批插入操作完成的时间。允许的值为 timespan。 示例为 00:30:00(30 分钟)。
- 写入批处理大小:指定每个批要插入到 Oracle 数据库表中的行数。 允许的值为 integer(行数)。 默认值为 10,000。
- 最大并发连接:活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。
映射
对于“映射 ”选项卡配置,请转到“映射”选项卡下的“配置映射”。
设置
对于“设置”选项卡配置,请查看“设置”选项卡下的“配置其他设置”。
从 Oracle 数据库进行并行复制
Oracle 数据库连接器提供内置的数据分区,用于从 Oracle 数据库并行复制数据。 可以在复制活动的“源”表中找到数据分区选项。
启用分区复制后,服务将对 Oracle 数据库源运行并行查询,按分区加载数据。 并行度由复制活动设置选项卡中的“复制并行度”设置控制。例如,如果将“复制并行度”设置为 4,则该服务会根据指定的分区选项和设置并行生成并运行 4 个查询,每个查询从 Oracle Database 检索一部分数据。
建议同时启用并行复制和数据分区,尤其是从 Oracle 数据库加载大量数据时。 下面是适用于不同方案的建议配置。 将数据复制到基于文件的数据存储中时,建议将数据作为多个文件写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。
| 方案 | 建议的设置 | 
|---|---|
| 从包含物理分区的大型表进行完整加载。 | 分区选项:表的物理分区。 在执行期间,该服务将自动检测物理分区并按分区复制数据。 | 
| 从不包含物理分区但包含用于数据分区的整数列的大型表进行完整加载。 | 分区选项:动态范围分区。 分区列:指定用于对数据进行分区的列。 如果未指定,将使用主键列。 | 
| 使用自定义查询从包含物理分区的表加载大量数据。 | 分区选项:表的物理分区。 查询: SELECT * FROM <TABLENAME> PARTITION("?DfTabularPartitionName") WHERE <your_additional_where_clause>。分区名称:指定要从中复制数据的分区名称。 如果没有指定,服务将自动检测在 Oracle 数据库数据中指定的表的物理分区。 在执行期间,服务会将 ?DfTabularPartitionName替换为实际分区名称,并发送到 Oracle 数据库。 | 
| 使用自定义查询从不包含物理分区但包含用于数据分区的整数列的表加载大量数据。 | 分区选项:动态范围分区。 查询: SELECT * FROM <TABLENAME> WHERE ?DfRangePartitionColumnName <= ?DfRangePartitionUpbound AND ?DfRangePartitionColumnName >= ?DfRangePartitionLowbound AND <your_additional_where_clause>。分区列:指定用于对数据进行分区的列。 可以针对整数数据类型的列进行分区。 分区上限和分区下限:指定是否要对分区列进行筛选,以便仅检索介于下限和上限之间的数据。 在执行期间,服务会将 ?DfRangePartitionColumnName、?DfRangePartitionUpbound和?DfRangePartitionLowbound替换为每个分区的实际列名称和值范围,并发送到 Oracle 数据库。例如,如果为分区列“ID”设置了下限 1、上限 80,并将并行复制设置为 4,则服务会按 4 个分区检索数据。 其 ID 分别介于 [1, 20]、[21, 40]、[41, 60] 和 [61, 80] 之间。` | 
提示
从非分区表复制数据时,可以使用“动态范围”分区选项针对整数列进行分区。 如果源数据没有这种类型的列,则可以利用源查询中的 ORA_HASH 函数来生成列,并将其用作分区列。
表摘要
下表包含 Oracle 数据库中的复制活动的详细信息。
源信息
| 名称 | 描述 | 值 | 必选 | JSON 脚本属性 | 
|---|---|---|---|---|
| Connection | 与源数据存储的连接。 | <Oracle 数据库连接> | 是 | 连接 | 
| 使用查询 | 从 Oracle 数据库读取数据的方式。 应用表以从指定表读取数据,或使用 SQL 查询将查询应用于读取数据。 | • 表 • 查询 | 是 | / | 
| 对于“表” | ||||
| 架构名称 | 架构的名称。 | < 架构名称 > | 否 | 架构 | 
| 表单名称 | 表的名称。 | < 表名称 > | 否 | 表 | 
| 对于查询 | ||||
| 查询 | 使用自定义 SQL 查询读取数据。 示例为 SELECT * FROM MyTable。 请注意,查询不应以分号结尾(;))。启用分区加载时,需要在查询中挂接任何相应的内置分区参数。 有关示例,请参阅从 Oracle 数据库进行并行复制部分。 | <SQL 查询> | 否 | oracleReaderQuery | 
| 分区选项 | 用于从 Oracle 数据库加载数据的数据分区选项。 | •“无”(默认值) •“表的物理分区” •“动态范围” | 否 | / | 
| 对于表的物理分区 | ||||
| 分区名称 | 需要复制的物理分区的列表。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?DfTabularPartitionName。 | < 分区名称 > | 否 | partitionNames | 
| 对于动态范围 | ||||
| 分区列名称 | 指定并行复制范围分区使用的源列(整数类型)的名称。 如果未指定,系统会自动检测表的主键并将其用作分区列。 如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?DfRangePartitionColumnName。 有关示例,请参阅从 Oracle 数据库进行并行复制部分。 | < 分区列名称 > | 否 | partitionColumnName | 
| 分区上限 | 指定要从中复制数据的分区列的最大值。如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?DfRangePartitionUpbound。 有关示例,请参阅从 Oracle 数据库进行并行复制部分中的“并行复制”。 | < 分区上限 > | 否 | partitionUpperBound | 
| 分区下限 | 指定要从中复制数据的分区列的最小值。如果使用查询来检索源数据,请在 WHERE 子句中挂接 ?DfRangePartitionLowbound。 有关示例,请参阅从 Oracle 数据库进行并行复制部分中的“并行复制”。 | < 分区下限 > | 否 | partitionLowerBound | 
| 查询超时 | 查询命令执行的超时,默认值为 120 分钟。 | timespan | 否 | queryTimeout | 
| 精度 | 有效十进制数字的最大数目。 允许的值范围为 1 到 256。 如果未指定,则默认为 256。 | < 精度 > | 否 | 数字精度 | 
| Scale | 小数点后的位数。 允许的值范围为 0 到 130,并且必须小于或等于精度。 如果未指定,则默认为 130。 | < 缩放 > | 否 | numberScale | 
| 其他列 | 添加其他数据列以存储源文件的相对路径或静态值。 后者支持表达式。 | • 姓名 • 值 | 否 | additionalColumns: • 名称 • 值 | 
目标信息
| 名称 | 描述 | 值 | 必选 | JSON 脚本属性 | 
|---|---|---|---|---|
| Connection | 与目标数据存储的连接。 | <Oracle 数据库连接> | 是 | 连接 | 
| 表 | 目标数据表。 | <目标表的名称> | 是 | / | 
| 架构名称 | 架构的名称。 | < 架构名称 > | 是 | 架构 | 
| 表单名称 | 表的名称。 | < 表名称 > | 是 | 表 | 
| 复制前脚本 | 每次运行时将数据写入 Oracle 数据库之前,要执行的复制活动的 SQL 查询。 可以使用此属性清除预加载的数据。 | < 你的复制前脚本 > | 否 | preCopyScript | 
| 写入批处理超时 | 超时前等待批插入操作完成的时间。 | timespan | 否 | writeBatchTimeout | 
| 写入批大小 | 每批要插入到 SQL 表中的行数。 | 整数 (默认值为 10,000) | 否 | writeBatchSize | 
| 最大并发连接数 | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | < 最大并发连接数 > | 否 | maxConcurrentConnections | 
 
              
               
              
               
              
              