(背景:我们正在运行一个使用 Oracle Warehouse Builder 构建的数据仓库。最近,我们开始收到很多“ORA-02049:distributed transaction timeout while waiting for lock”错误。原因是我们正在运行几个并行的 ETL 作业,这些作业中的每一个都对INSERT /*+APPEND PARALLEL*/
我们的 staging 表执行操作。此 staging 表由源系统 ID 分区。)
我想知道是否可以在运行时为 INSERT 指定分区键。假设我有一张桌子
create table tmp_loading_table (
etl_source_system_fk number not null enable,
object_id number not null enable,
object_name varchar2(30) not null enable
)
PARTITION BY LIST ("ETL_SOURCE_SYSTEM_FK")
(PARTITION "ESS1" VALUES (1),
PARTITION "ESS2" VALUES (2)
);
然后我可以使用插入特定分区
insert /*+ APPEND PARALLEL("TMP_LOADING_TABLE") */
into tmp_loading_table partition(ESS1) (
etl_source_system_fk, object_id, object_name)
(select 1 etl_source_system_fk, object_id, object_name from user_objects);
但这需要我对分区名称进行硬编码。
由于我们的 OWB 映射是通用的(它们将源系统 ID 作为参数获取),我想在运行时提供分区名称,例如
insert /*+ APPEND PARALLEL("TMP_LOADING_TABLE") */
into tmp_loading_table partition(:partition_name) (
etl_source_system_fk, object_id, object_name)
(select 1 etl_source_system_fk, object_id, object_name from user_objects);
这可能吗?如果没有,是否有另一种方法可以使用 Oracle Warehouse Builder 实现这一目标?