(背景: Oracle Warehouse Builder で構築されたデータ ウェアハウスを実行しています。最近、「ORA-02049: ロックを待機中に分散トランザクションのタイムアウト」というエラーが大量に発生するようになりました。並行して ETL ジョブを実行し、これらのジョブのそれぞれがステージング テーブルに対して実行INSERT /*+APPEND PARALLEL*/
されます。このステージング テーブルは、ソース システム 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でこれを実現する別の方法はありますか?