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