TLDR
शायद आप समानांतर डीएमएल को सक्षम करना भूल गए हैं।
ALTER SESSION ENABLE PARALLEL DML;
अतिरिक्त यदि आप बल समानांतर निष्पादन आप आमतौर पर नहीं . करते हैं समानांतर संकेतों . का उपयोग करें और इसके विपरीत।
नमूना सेटअप (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;
सम्मिलित करें
आपको समानांतर DML सक्षम करें पहले चरण में
ALTER SESSION ENABLE PARALLEL DML;
ध्यान दें कि वैकल्पिक रूप से एक संकेत का उपयोग किया जा सकता है
INSERT /*+ ENABLE_PARALLEL_DML */ …
इसके अतिरिक्त यदि आप बल समानांतर DML और QUERY, आप आमतौर पर समानांतर संकेतों . का उपयोग नहीं करते हैं . मैं APPEND
. के साथ एक डायरेक्ट इंसर्ट का संकेत दे रहा हूं जिसका उपयोग अक्सर इस स्थिति में किया जाता है।
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;
/
कैसे जांचें कि क्या टेबल समानांतर में डाली गई थी? सबसे आसान तरीका है टेबल को क्वेरी करना (कमिट करने से पहले) - अगर आपको बोलो एरर मिलता है, तो यह एक समानांतर डायरेक्ट इंसर्ट होता है।
select count(*) from TAB_HIST;
ORA-12838: cannot read/modify an object after modifying it in parallel
सूचकांक
यदि आप create index
. में समानांतर डिग्री निर्दिष्ट करते हैं कथन आपको सक्षम की आवश्यकता नहीं है या बल कुछ भी।
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;
/
डेटा डिक्शनरी में डिग्री को देखने के लिए चेक उतना ही सरल है
select DEGREE from user_indexes where table_name = 'TAB_HIST';
DEGREE
---------
2
ध्यान दें कि समानांतर मोड में इंडेक्स बनाने के बाद आप अक्सर डीओपी को एक पर रीसेट करना चाहते हैं। अन्यथा कुछ सरल नेस्टेड लूप प्रश्न भ्रमित हो सकते हैं और एक समानांतर क्वेरी खोलेंगे...