Oracle / OWB: die Angabe der partition, die für das EINFÜGEN zur Laufzeit
(Hintergrund: wir sind ein data-warehouse aufgebaut mit Oracle Warehouse Builder. Vor kurzem haben wir begonnen, immer eine Menge von "ORA-02049: distributed transaction timeout beim warten auf lock" Fehler. Der Grund dafür ist, dass wir mit mehreren ETL-jobs parallel, und jeder dieser jobs hat eine INSERT /*+APPEND PARALLEL*/
in unser staging-Tabelle. Diese staging Tabelle partitioniert ist, die durch die Quellsystem ID. )
Ich würde gerne wissen, ob es möglich ist, spezifizieren Sie die Volume-Taste zum EINFÜGEN zur Laufzeit.
Angenommen ich habe eine Tabelle
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)
);
dann kann ich einfügen, in eine bestimmte partition unter Verwendung
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);
aber das erfordert mir zu hard-code, dem Namen der partition.
Da unsere OWB-mappings sind allgemeiner Natur (Sie bekommen die Quellsystem-ID als parameter), würde ich gerne die partition Namen zur Laufzeit, so etwas wie
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);
Ist das möglich? Wenn nicht, gibt es eine andere Methode, dies zu erreichen mit Oracle Warehouse Builder?
InformationsquelleAutor Frank Schmitt | 2013-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
PARTITION
syntax und dynamische SQL-helfen können.Idealerweise wäre es so einfach:
Leider ist der obige code bricht mit
ORA-14108: illegal partition-extended table name syntax
. Das ist seltsam, da das scheint wie eine offensichtliche Verwendungfür die syntax.
Hinzufügen von dynamischen SQL-behebt den Fehler.
Ich bin nicht vertraut mit Oracle Warehouse Builder und weiß nicht, ob diese Lösung funktioniert in dieser Umgebung. Und ich gehe davon aus, dass in einem data warehouse SQL-injection ist kein Problem.
Einen anderen Weg angeben, dem Namen der partition, die zur Laufzeit mit system-Partitionierung
und DATAOBJ_TO_PARTITION .
Der große Nachteil dieser Methode ist, dass jeder DML-müssen auf der partition:
Habe ich noch nie gehört, dass jemand mit dieser Funktion. Und bei meiner Erfahrung mit Oracle data cartridge ist buggy. Wie ist das dynamische SQL-Suche jetzt? 🙂
InformationsquelleAutor Jon Heller