2017-07-30 3 views
0

Ich habe eine Batch-Datei läuft einige SQL für mich durch sqlplus. Der Befehl lautet wie folgt:Batch + Oracle, deaktivieren Sie die Antwort, aber immer noch Ausführungszeit

sqlplus user/[email protected] @file.sql param1 param2 ... >> LOG.txt 

das Internet Surfen finde ich heraus, war, dass es möglich war, Zeit zu erhalten, indem diese Zeilen in die SQL-Datei hinzufügen:

SET TIMING ON 
...sql operation... 
SET TIMING OFF 

Das gibt mir eine wirklich schönes Ergebnis in der Log-Datei, da jetzt sieht es wie folgt aus:

SQL*PLUS INFORMATION 
COPYRIGHT 
INFORMATION ABOUT THE CONNECTION 
OLD/NEW STATEMENT 
RESULTS 
ROWS SELECTED 
EXECUTION TIME 
DISCONNECT MESSAGE 

ich mag Ausgang dieses wirklich, aber die Ergebnisse sind zu viel. Oft möchte ich die Ausführungszeit von langen Abfragen testen, aber das Durchlaufen der Ergebnisse ist wirklich eine Verschwendung von Bandbreite. Es macht auch meine Protokolldatei riesig und unpraktisch, ich hätte lieber ein kleines Protokoll mit all den anderen Informationen.

habe ich versucht, andere Header hinzugefügt, wie:

TERMOUT 
SPOOL 

Aber die erste alle Ausgaben entfernen, einschließlich der Zeit und der alte/neue Anweisung und die zweite Kopien nur die Ergebnisse in eine andere Datei ohne Ändern Sie alles in meine Protokolldatei.

Ich dachte, um meine Anfrage in einen PLSQL-Block zu wickeln, aber dann wäre ich nicht in der Lage, die TIME-Header nicht mehr richtig zu verwenden?

Wie auch immer, wenn Sie wissen, eine Kopfzeile/andere Komponente, die mein Problem lösen würde, fühlen sich frei zu teilen!

Danke für Ihre Zeit.

Antwort

0

Eine Möglichkeit ist SQLPLUS Bind-Variablen in Ihrem Skript zu verwenden, um eine Startzeit zu speichern und eine Ausführungszeit der Abfrage berechnen:

var start_time varchar2; 

exec :start_time := to_char(current_timestamp, 'yyyy-mm-dd hh24:mi:ss.SSSSS'); 

/* Long runing query */ 
BEGIN 
DBMS_LOCK.sleep(5); 
END; 
/

SELECT current_timestamp - to_timestamp(:start_time, 'yyyy-mm-dd hh24:mi:ss.SSSSS') 
     As total_ececution_time 
from dual; 

Ein Ergebnis ist:

PL/SQL procedure successfully completed. 


PL/SQL procedure successfully completed. 


TOTAL_ECECUTION_TIM 
------------------- 
+00 00:00:05.471000 
+0

Groß Antwort, vielen Dank Herr. Arbeitete perfekt für mich! – Moufett

Verwandte Themen