मैं अगले कार्यक्रम और बाद में ओरेकल नौकरी बनाया है:कई उदाहरण में चलाने के लिए एक async ओरेकल काम कैसे बनाएं
BEGIN
DBMS_SCHEDULER.create_program (program_name => 'myProg',
program_action => 'myProc',
program_type => 'STORED_PROCEDURE',
number_of_arguments => 3,
enabled => FALSE);
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 1,
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 2,
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 3,
argument_type => 'NUMBER',
DEFAULT_VALUE => NULL);
DBMS_SCHEDULER.create_job ('myJob',
program_name => 'myProg',
enabled => FALSE,
comments => 'Send data');
DBMS_SCHEDULER.SET_ATTRIBUTE ('myJob', 'PARALLEL_INSTANCES', TRUE);
DBMS_SCHEDULER.SET_ATTRIBUTE ('myJob',
'logging_level',
DBMS_SCHEDULER.LOGGING_FULL);
END;
/
अब, मैं किसी ऐसे उपयोगकर्ता को चला सकते हैं/कि अगली प्रक्रिया कॉल पर अमल का काम करते हैं :
PROCEDURE runJOB(param1 IN PLS_INTEGER,
param2 IN PLS_INTEGER DEFAULT NULL,
param3 IN PLS_INTEGER DEFAULT NULL)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
DBMS_SCHEDULER.enable ('myProg');
DBMS_SCHEDULER.set_job_argument_value ('myJob', 1, TO_CHAR (param1));
DBMS_SCHEDULER.set_job_argument_value ('myJob', 2, TO_CHAR (param2));
DBMS_SCHEDULER.set_job_argument_value ('myJob', 3, TO_CHAR (param3));
--DBMS_SCHEDULER.enable ('myJob');
DBMS_SCHEDULER.RUN_JOB (JOB_NAME => 'myJob', USE_CURRENT_SESSION => FALSE);
--DBMS_SCHEDULER.disable ('myJob');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END runJOB;
यहां मेरी समस्याएं क्या हैं?
- मुझे नौकरी को अतुल्यकालिक मोड में चलाने की आवश्यकता है। यही कारण है कि मेरे पास
enable
याrun_job
USE_CURRENT_SESSION
पैरामीटरFALSE
का उपयोग कर रहा है। मुझे लगता है कि यह काम करता है। - मुझे एक ही समय में विभिन्न उपयोगकर्ताओं द्वारा शुरू की जाने वाली एक ही नौकरी के कई उदाहरण निष्पादित करने की आवश्यकता है। उदाहरण के लिए, उपयोगकर्ता ए
runJOB
प्रक्रिया को कॉल करता है। नौकरी 20 सेकंड में चल सकती है। इस 20 सेकेंड में, उपयोगकर्ता बी एक अलग सत्र में, एक ही प्रक्रिया को कॉल कर सकता है। यही कारण है कि मैंनेPARALLEL_INSTANCES
विशेषता का उपयोग करने का प्रयास किया है, लेकिन मुझे केवल एक निष्पादन मिलता है। मुझे लगता है कि ओरेकल देखता है कि नौकरी चल रही है, इसलिए चलाने के दूसरे प्रयास को छोड़ दें।
फिर से शुरू करने में, मुझे नौकरी की आवश्यकता है जिसे एक ही समय में एसिंक मोड में निष्पादित किया जाना चाहिए और कई उदाहरणों के साथ।
दो उदाहरणों के लिए काम का एक "डबल" निष्पादन मैं केवल user_SCHEDULER_JOB_RUN_DETAILS
तालिका में एक रिकॉर्ड प्राप्त करने के बाद, लेकिन 2 सक्षम काम के दो अलग-अलग उपयोगकर्ताओं (SGSS और EX01882_BD)
52367532 26/12/2016 12:08:44,584878 +00:00 SGSS myJob DEFAULT_JOB_CLASS RUN SUCCEEDED (HugeClob)
52364238 26/12/2016 12:08:36,529539 +00:00 SGSS myJob DEFAULT_JOB_CLASS ENABLE EX01882_BD (HUGECLOB)
52367534 26/12/2016 12:08:34,302807 +00:00 SGSS myJob DEFAULT_JOB_CLASS ENABLE SGSS (HUGECLOB)
किसी भी मदद के लिए?
नोट: मैं, इस समाधान (How run two or more instances of an oracle job in the same time?) में के रूप में काम के अलग-अलग नाम नहीं हो सकता है क्योंकि काम पहले से ही बनाई गई है और उपयोगकर्ताओं को, जो इस काम के फोन बनाने की अनुमति नहीं है।
धन्यवाद, लेकिन गलत का उपयोग कर क्या जो मैं पहले से ही सूचना दी थी। मुझे एक नया काम शुरू करने की ज़रूरत है, भले ही एक अन्य उदाहरण चल रहा हो। मुझे यहां थोड़ा बदलाव के साथ सही मूल्य का प्रयास करने दें। – milheiros
यदि मैं सत्य का उपयोग करता हूं तो मुझे एसिंक नौकरी निष्पादन नहीं हो सकता है। गलत के साथ मैं एक ही नौकरी – milheiros
हाँ के एकाधिक निष्पादन नहीं कर सकता, यदि आपको वास्तव में समानांतर निष्पादन की आवश्यकता है तो आपको कतारों के बारे में पढ़ना चाहिए (उदाहरण के लिए: https://oracle-base.com/articles/10g/scheduler-enhancements-10gr2) – Stawros