2009-05-05 6 views
1

Ich habe einen Abfrageeditor (Toad) in der Datenbank suchen.Gibt es eine Möglichkeit, in eine andere Oracle-Sitzung zu schauen?

Gleichzeitig debugge ich auch eine Anwendung mit einer eigenen separaten Verbindung.

Meine Anwendung startet eine Transaktion, führt einige Aktualisierungen durch und trifft dann Entscheidungen basierend auf einigen SELECT-Anweisungen. Da die update-Anweisungen (die zahlreich und komplex sind) noch nicht festgeschrieben sind, sind die Ergebnisse, die meine Anwendung von SELECT erhält, nicht die gleichen wie die, die ich erhalte, wenn ich die gleiche Anweisung in Toad ausführe.

Derzeit umgehe ich dies, indem ich die Abfrage-Ausgabe aus der App in eine Textdatei ablege und diese lese.

Gibt es eine bessere Möglichkeit, in eine andere Oracle-Sitzung zu schauen und zu sehen, was diese Sitzung sieht, bevor das Commit abgeschlossen ist?

Eine andere Möglichkeit, dies zu stellen ist: Kann ich unter Oracle dirty reads zwischen nur zwei Sitzungen aktivieren, ohne die Sitzung eines anderen zu beeinflussen?

Antwort

0

Können Sie nicht einfach die Isolationsstufe in der Sitzung, die Sie erreichen möchten, mit einem alter session-Befehl oder einem Anmeldetrigger (ich habe das selbst nicht ausprobiert) vorübergehend 'uncommitted' lesen?

Was ich (im Allgemeinen) zu bevorzugen ist Platz Debug-Anweisungen im Code, die dort dauerhaft verbleiben, sind aber in der Produktion ausgeschaltet - Tom Kyte des debug.f Paket ist ein nützlicher Ort zu starten - http://asktom.oracle.com/tkyte/debugf

+0

Oracle verfügt nicht über eine Read-Uncommitted-Isolationsstufe. http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/consist.htm#CNCPT1326 –

+0

Entschuldigung, Sie haben Recht! Ich habe den falschen Teil der Dokumentation falsch gelesen und dachte, dass nicht committed existiert, aber es tut es nicht. –

2

Nein, Oracle lässt keine schmutzigen Lesevorgänge zu. Da die Änderungen möglicherweise nicht physisch auf die Festplatte geschrieben wurden, finden Sie sie nicht in den Datendateien. Der Protokollschreiber schreibt alle ausstehenden Datenänderungen mindestens alle drei Sekunden, sodass Sie möglicherweise die Log Miner-Dateien verwenden können, um sie von dort auszuwählen.

Im Allgemeinen sollten Sie jedoch Ihre eigenen Debugging-Informationen verwenden, die Sie bei Bedarf einfach ein- und ausschalten können.

1

Es ist keine vollständige Antwort Ich weiß, aber während es keine toten Reads gibt, gibt es Sperren, die Ihnen eine Idee geben können, was vor sich geht.

In Sitzung 1, wenn Sie eine Zeile mit Primärschlüssel 7 einfügen, dann werden Sie es nicht sehen, wenn Sie aus Sitzung 2 auswählen. (Das wäre eine schmutzige Lese).

Wenn Sie jedoch eine Einfügung aus Sitzung 2 mit dem Primärschlüssel 7 versuchen, blockiert sie Sitzung 1, da sie warten muss, um zu sehen, ob Sitzung 1 festgeschrieben oder zurückgesetzt wird. Sie können "WAIT 10" verwenden, um 10 Sekunden zu warten, damit dies geschieht.

Eine ähnliche Geschichte existiert für Updates oder irgendetwas, das eine eindeutige Constraint-Verletzung verursachen würde.

Verwandte Themen