2017-04-04 1 views
1

Ich habe 10 Tabellen und sie sind mit 10 verschiedenen Quellentabellen verbunden. Im Grunde kürze ich Zieltabellen und mache dann Masseneinfügung von jeder Quelle zu einzelnen Zieltabellen.Mehrere Tabellen parallel laden

ZB: Src_A ---> Tgt_A Src_B ---> Tgt_B

Jeder "in Fügen Sie tgt select * from src" Anweisung in der Schleife nacheinander ausgeführt wird. Ist es möglich, alle Anweisungen in einer einzigen Prozedur parallel ablaufen zu lassen, etwa wenn Daten in Tgt_A geladen werden, sollten auch Daten in Tgt_B geladen werden.

Schätzen Sie Ihre wertvollen Eingaben.

Dex.

+0

Sie müssten separate Jobs parallel über den Scheduler ausführen; vielleicht angekettet, also wartest du darauf, dass alle fertig sind. –

+0

Ja, dass wir tun können, aber ist es möglich, in einer einzigen Prozedur ich Tabellen parallel laden? – Dex

Antwort

1

Sie können Parallel Execution Tuning von Oracle verwenden. Es parallelisiert im Wesentlichen eine Abfrage, aber nicht parallel zwischen verschiedenen Abfragen.

So wird der PARALLEL-Hinweis verwendet. INSERT und SELECT kann parallel unabhängig sein:

alter session enable parallel dml; 

INSERT /*+ PARALLEL(4) */ INTO tbl_ins 
    SELECT * FROM tbl_sel; 

Um N-Abfragen parallel, Sie müssten N verschiedene Verbindungen zur Datenbank, von denen jeder eine andere Abfrage ausgeführt wird.

0

Oracle hat DBMS_JOB, die Ihre Anforderung erfüllen können. Wenn Sie die Jobs übergeben, löst Oracle alle Jobs parallel aus, da die Gesamtzeit für die Ausführung reduziert wird. Hope unten Snippet hilft.

DECLARE 
lv_job1 PLS_INTEGER; 
lv_job2 PLS_INTEGER; 
lv_job3 PLS_INTEGER; 
lv_job4 PLS_INTEGER; 
BEGIN 
    DBMS_JOB.submit (lv_job1, 'BEGIN 
           EXECUTE IMMEDIATE ''TRUNCATE TABLE TGT1''; 
           INSERT INTO SRC1 
           SELECT * FROM SELEC_TAB; 
           END; 
           '); 

    DBMS_JOB.submit (lv_job2, 'BEGIN 
           EXECUTE IMMEDIATE ''TRUNCATE TABLE TGT2''; 
           INSERT INTO SRC2 
           SELECT * FROM SELEC_TAB; 
           END; 
           '); 

    DBMS_JOB.submit (lv_job3, 'BEGIN 
           EXECUTE IMMEDIATE ''TRUNCATE TABLE TGT3''; 
           INSERT INTO SRC3 
           SELECT * FROM SELEC_TAB; 
           END; 
           '); 

    DBMS_JOB.submit (lv_job4, 'BEGIN 
           EXECUTE IMMEDIATE ''TRUNCATE TABLE TGT4''; 
           INSERT INTO SRC4 
           SELECT * FROM SELEC_TAB; 
           END; 
           '); 
    COMMIT; 
END; 
/
+0

Ich mochte diese Idee, aber wenn ich versuchte, dieses Problem zu bekommen "ora-06550 pls-00201 DBMS_JOB muss deklariert werden" ... Ist diese Prozedur nur von DBAs zugänglich ?? Können normale Oracle-Benutzer diese ähnliche Funktionalität ohne dba-Zuschüsse nutzen? – Dex

+0

DBA muss Ihrem Benutzer Ausführungszugriff auf das DBMS_JOB-Paket gewähren. Es ist eine gute Idee, diese Art von Ansatz zu verwenden. –

Verwandte Themen