Frage zum Spoolen eines Scriptes bzgl. commit;

hallo,

ich hab da eine frage, ich habe ein script was über 8 stunden braucht.
leider schreibt das erst in die logdatei wenn es durchgelaufen ist.

wie würde sich das verhalten wenn man zwischendurch ein commit; setzt ?

kann man das spooling dann damit überreden zwischenstände zu schreiben oder wie könnte man das machen ?

grüße

chris

Hallo Chris!

leider schreibt das erst in die logdatei wenn es durchgelaufen
ist.

Kurze Frage: Handelt es sich um ein reines SQL-Skript oder sind da auch PL/SQL-Blöcke drinnen, die mittels DBMS_OUTPUT loggen sollten?

Beim reinen SQL-Skript fällt mir eigentlich nur so was da ein:
spool FileOne.log
SELECT …
spool off
spool FileTwo.log
UPDATE …
spool off

COMMIT;

wie würde sich das verhalten wenn man zwischendurch ein
commit; setzt ?

Theoretisch kein Unterschied. Das Problem ist, dass sowohl Oracle den Spool cached, als auch höchstwahrscheinlich dein OS. Wenn du mehrere Logfiles verwendest sollte das das Problem aber lösen. Kannst das Ganze ja aus einem Batch aufrufen und dann die Logs zusammenhängen…

kann man das spooling dann damit überreden zwischenstände zu
schreiben oder wie könnte man das machen ?

Wenn du DBMS_OUTPUT verwendest: Soweit mir bekannt gar nicht. Deshalb (und wegen einiger anderer blödsinnigen Einschränkungen in DBMS_OUTPUT) bin ich dazu übergegangen eventuelle Logs mittels einer autonomous transaction in Datenbanktabellen zu schreiben. Das garantiert mir, dass ich immer den aktuellen Skriptstatus nachvollziehen kann und hat nicht so lustige Einschränkungen wie 256 Zeichen/Zeile oder 1MB Gesamtlänge. Autonomous Transactions sind allerdings manchmal etwas hinterhältig, wenn man die Doku nicht _genau_ liest, vor allem darf man nicht dem Irrtum erliegen, dass es sich um geschachtelte Transaktionen handeln würde, also vorsichtig damit! Wenn du dazu Fragen hast, dann immer her damit…

Gruß
Martin

grüße

chris

Hi!

Anstelle von dbms_output bietet sich auch utl_file (Schreiben in Datei) an. Dort sind längere Zeilen möglich (4000 Zeichen je Zeile) und zudem kann man auch mittels utl_file.fflush den Ausgabepuffer explizit schreiben lassen.

Ciao

Johannes

Wenn du DBMS_OUTPUT verwendest: Soweit mir bekannt gar nicht.
Deshalb (und wegen einiger anderer blödsinnigen
Einschränkungen in DBMS_OUTPUT) bin ich dazu übergegangen
eventuelle Logs mittels einer autonomous transaction in
Datenbanktabellen zu schreiben. Das garantiert mir, dass ich
immer den aktuellen Skriptstatus nachvollziehen kann und hat
nicht so lustige Einschränkungen wie 256 Zeichen/Zeile oder
1MB Gesamtlänge. Autonomous Transactions sind allerdings
manchmal etwas hinterhältig, wenn man die Doku nicht _genau_
liest, vor allem darf man nicht dem Irrtum erliegen, dass es
sich um geschachtelte Transaktionen handeln würde, also
vorsichtig damit! Wenn du dazu Fragen hast, dann immer her
damit…

Wenn du DBMS_OUTPUT verwendest: Soweit mir bekannt gar nicht.
Deshalb (und wegen einiger anderer blödsinnigen
Einschränkungen in DBMS_OUTPUT) bin ich dazu übergegangen
eventuelle Logs mittels einer autonomous transaction in
Datenbanktabellen zu schreiben. Das garantiert mir, dass ich
immer den aktuellen Skriptstatus nachvollziehen kann und hat
nicht so lustige Einschränkungen wie 256 Zeichen/Zeile oder
1MB Gesamtlänge. Autonomous Transactions sind allerdings
manchmal etwas hinterhältig, wenn man die Doku nicht _genau_
liest, vor allem darf man nicht dem Irrtum erliegen, dass es
sich um geschachtelte Transaktionen handeln würde, also
vorsichtig damit! Wenn du dazu Fragen hast, dann immer her
damit…

Hallo Martin,

es geht um reines SQL, und dabei geht es um Scripte die ich selbst nicht verändern sollte, die kommen von einem etwas anstrengenden Zulieferer… wenn es eine einfache Lösung dafür gegeben hätte, dann hätte ich bei der nächsten Lieferung einfach drauf gestanden das die mir das so anliefern. Die geschichte mit der Autonomus Transaktion klingt interessant, ich werde dich da bestimmt nochmal draufansprechen - aber erstmal schaue ich selbst, du hast ja sicher auch noch was anderes zu tun :wink:

Danke dir

Grüße

Chris

Anstelle von dbms_output bietet sich auch utl_file (Schreiben
in Datei) an. Dort sind längere Zeilen möglich (4000 Zeichen
je Zeile) und zudem kann man auch mittels utl_file.fflush den
Ausgabepuffer explizit schreiben lassen.

Hallo Johannes

das klingt auch ganz interessant, ich schau mir das mal an.

Danke schön !

Grüße

Chris

hi!

Anstelle von dbms_output bietet sich auch utl_file (Schreiben
in Datei) an. Dort sind längere Zeilen möglich (4000 Zeichen
je Zeile) und zudem kann man auch mittels utl_file.fflush den
Ausgabepuffer explizit schreiben lassen.

Hallo Johannes

das klingt auch ganz interessant, ich schau mir das mal an.

vergiß aber nicht den datenbankparameter UTL_FILE_DIR zu setzen!

grüße,
tomh

vergiß aber nicht den datenbankparameter UTL_FILE_DIR zu

setzen!

Hallo Tomh,

danke für den Tip, aber „ich schau mir das mal an“ heißt bei mir sowieso erstmal : ich vergrabe mich in den tiefen des internets auf der suche nach informationen für ahnungslose…

meine Schulungen sind nämlich wieder einmal abgelehnt worden, entgegen anderslautender bekundungen… :frowning:

Grüße

Chris

Hallo Chris!

danke für den Tip, aber „ich schau mir das mal an“ heißt bei
mir sowieso erstmal : ich vergrabe mich in den tiefen des
internets auf der suche nach informationen für ahnungslose…

Die Oracle-Unterlagen sind zwar etwas seeeeehhhhr umfangreich, aber wenn man schon so in etwa weiss, was man sucht, dann doch mitunter recht hilfreich. ich schätze ich habe 80 % meiner Kenntnisse von dort, der Rest kommt aus dem Gespräch mit Leuten, die das auch getan haben :wink:. Soll heissen: Ich habe bisher auch keine Schulung genossen - es geht auch ohne, mitunter findet man sogar auf der Suche nach A ein B, das man dann später verwenden kann…

Gruß
Martin