TLDR
Pravděpodobně jste zapomněli povolit paralelní DML.
ALTER SESSION ENABLE PARALLEL DML;
Navíc, pokud vynutíte paralelní provádění, které obvykle neděláte použijte paralelní nápovědy a naopak.
Ukázkové nastavení (11.2)
create table TAB_HIST (
col1 int,
col2 int,
col3 varchar2(4000))
PARTITION BY RANGE (col1)
interval(1000000)
(
partition p_init values less than (1000000)
);
create table TAB_SRC (
col1 int,
col2 int,
col3 varchar2(4000)
)
PARTITION BY RANGE (col1)
interval(1000000)
(
partition p_init values less than (1000000)
);
insert into tab_src
select rownum, rownum, rpad('x',1000,'y') from dual connect by level <= 100000;
commit;
Vložit
Musíte povolit paralelní DML v prvním kroku
ALTER SESSION ENABLE PARALLEL DML;
Všimněte si, že alternativně lze použít nápovědu
INSERT /*+ ENABLE_PARALLEL_DML */ …
Navíc pokud vynutíte paralelní DML a QUERY, obvykle nepoužíváte paralelní tipy . Tipuji přímé vložení pomocí APPEND
který se v této situaci často používá.
DECLARE
v_parallel_degree NUMBER := 2;
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL ' || v_parallel_degree;
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL ' || v_parallel_degree;
EXECUTE IMMEDIATE 'INSERT /*+ APPEND */ INTO TAB_HIST
SELECT *
FROM TAB_SRC PARTITION(P_INIT)';
END;
/
Jak zkontrolovat, zda byla tabulka vložena paralelně? Nejjednodušším způsobem je dotaz na tabulku (před provedením odevzdání) - pokud se zobrazí níže uvedená chyba, je to paralelní přímé vložení.
select count(*) from TAB_HIST;
ORA-12838: cannot read/modify an object after modifying it in parallel
Index
Pokud zadáte paralelní stupeň v create index
prohlášení, které nemusíte povolovat nebo vynutit cokoliv.
DECLARE
v_parallel_degree NUMBER := 2;
BEGIN
EXECUTE IMMEDIATE 'CREATE UNIQUE INDEX idx_pk ON TAB_HIST
(COL1,COL2,COL3)
LOCAL
NOLOGGING PARALLEL ' || v_parallel_degree;
END;
/
Kontrola je stejně jednoduchá jako pohled na stupeň v datovém slovníku
select DEGREE from user_indexes where table_name = 'TAB_HIST';
DEGREE
---------
2
Všimněte si, že po vytvoření indexu v paralelním režimu často chcete resetovat DOP na jednu. Jinak mohou být některé jednoduché dotazy vnořené smyčky zmatené a otevřou paralelní dotaz...