2011-12-06 14 views
11

में एसक्यूएल स्क्रिप्ट का निष्पादन समय प्राप्त करें मेरे पास एक स्क्रिप्ट है जिसका उपयोग मैं ओरेकल (डालने की सूची में) द्वारा अपने टेबल में अपना डेटा लोड करने के लिए करता हूं। मैं पूरी लोडिंग प्रक्रिया का निष्पादन समय कैसे प्राप्त कर सकता हूं? मैंने set timing on के साथ प्रयास किया है, लेकिन यह मुझे प्रत्येक सम्मिलन कथन के लिए एक अवधि देता है, न कि पूरी प्रक्रिया। स्क्रिप्ट नीचे दिखाया गया है:ऑरैकल एसक्लप्लस

spo load.log 
prompt '**** load data ****' 
set termout off 
@@inserts.sql 
commit; 
set termout on 
prompt '**** done ****' 
spo off 
exit; 

उत्तर

14

इस प्रयास करें, शुरुआत में निम्नलिखित जोड़ने और इसे वर्तमान समय याद है:

set serveroutput on 
variable n number 
exec :n := dbms_utility.get_time 

अंत में इस जोड़े और यह समय बीत गणना करता है:

exec :n := (dbms_utility.get_time - :n)/100 
exec dbms_output.put_line(:n) 
+0

बस मुझे इसे हराया .... वैकल्पिक रूप से एसक्यूएल डेवलपर या पीएलएसक्यूएल डेवलपर जैसे टूल में अपनी स्क्रिप्ट चलाएं जो आपको स्वयं से गुजरने वाला समय बताएगी। – Rene

+0

फ़ंक्शन से आउटपुट 'पीएल/एसक्यूएल प्रक्रिया सफलतापूर्वक पूरा हो गया है।' और समय नहीं :), क्या तारीख और इत्यादि के लिए 'systimestamp' का उपयोग करना संभव है? लिपि कुछ समय में रात के दौरान कई घंटे लगती है और दौड़ती है, इसलिए तिथि महत्वपूर्ण होगी! – aweis

+0

हाँ, मेरे बाहर निकलने से ठीक पहले; – aweis

1

आप यूनिक्स पर कर रहे हैं, तो आप भी ऐसा कर सकते हैं:

time sqlplus @inserts.sql 

यह प्रिंट होगा:

real 0m9.34s 
user 0m2.03s 
sys  0m1.02s 

पहली पंक्ति की कुल निष्पादन समय देता है।

+0

चूंकि मैं अभी तक अन्य लोगों की पोस्ट पर टिप्पणी नहीं कर सकता, इसलिए मैं यहां टिप्पणी करता हूं। मैंने ** पर सर्वर सेटआउट ** जोड़ने के लिए उपरोक्त पीटरपीगुओ के उत्तर को संपादित किया। यह संदेशों को सही तरीके से प्रदर्शित करेगा। – Stamm

+0

यह उन स्क्रिप्ट्स के लिए काम नहीं करता है जो स्वयं से बाहर नहीं निकलते हैं। उदाहरण के लिए, समय @catalog।एसक्यूएल, मुझे यह करना था: 'तारीख; बाहर निकलें echo | sqlplus "/ sysdba के रूप में" @ catalog.sql> ~/catalog.out; दिनांक ' –

3

जो आप वर्णन कर रहे हैं वह अनिवार्य रूप से स्क्रिप्ट के निष्पादन का ऑडिट करने का एक तरीका है। चाहे यह एक विलुप्त समय हो, या विशिष्ट प्रारंभ और समाप्ति समय जो आप कैप्चर कर रहे हैं, आप यह देखने के लिए ठीक से लॉग इन करना चाहते हैं कि चीजें अच्छी तरह से चलती हैं या नहीं (या नहीं, क्यों नहीं)।

यहां एक टेम्पलेट है जिसका उपयोग हम सभी डेटाबेस गतिविधि को कैप्चर और लॉगिंग के लिए करते हैं जो हम कार्यान्वित कर रहे हैं। हम सभी डीडीएल अपडेट (उदा। CREATE TABLE) और सेटअप टेबल में सम्मिलन के लिए sqlplus.exe के माध्यम से इसका उपयोग करते हैं।

--Beginning of all SQL scripts: 
set serveroutput on feedback on echo on verify on sqlblanklines on timing on define on 
col time new_v v_time 
col name new_v v_name 
col user new_v v_user 

select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database; 

--Creates a new log file every time the script is run, and it's immediately 
--obvious when it was run, which environment it ran in, and who ran it. 
spool &v_time._&v_name._&v_user..log 

--Run the select again so it appears in the log file itself 
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database; 

यहां अपने काम के शरीर को रखें।

--End of all SQL scripts: 
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database; 
spool off 
10

सुनिश्चित नहीं है कि हर कोई इसे इतना जटिल क्यों बना रहा है। सरल:

SQL> set timing on 
SQL> select 1 from dual; 

     1 
---------- 
     1 

1 row selected. 

Elapsed: 00:00:00.00 
SQL> 
+5

' सेट समय पर 'प्रत्येक कथन के लिए समय प्रिंट करेगा, यह प्रश्न पूरी लिपि के लिए समय प्राप्त करने के बारे में है। –

10

यह पुराना सवाल है लेकिन मुझे एसक्लप्लस में एक स्क्रिप्ट चलाने के समय को मापने का आसान तरीका मिल गया है। तुम बस शुरुआत

timing start timing_name 

पर इस जोड़ने के लिए और यह एक स्क्रिप्ट के अंत पर

timing stop 

इस आदेश के बारे में अधिक जानकारी Oracle की एसक्यूएल * प्लस उपयोगकर्ता मार्गदर्शिका और संदर्भ में पाया जा सकता: Collecting Timing Statistics

संबंधित मुद्दे