2009-04-04 8 views
0

Ich habe versucht, es in einem Satz zu setzen, aber es ist besser, ein Beispiel zu geben:Seltsam Oracle Problem

SELECT * FROM someTable WHERE id = someID; 

returns no rows 
... 
some time passes (no inserts are done to the table and no ID updates) 
... 

SELECT * FROM someTable WHERE id = someID; 
returns one row! 

Ist es möglich, dass einige DB-Mechanismus erste Reihe zurückzukehren verhindert SELECT?

Oracle-Protokoll hat keine Fehler.

Keine Transaktionen werden zurückgesetzt, wenn zwei Auswahlvorgänge ausgeführt werden.

Antwort

1

Sie können nicht festgeschriebene Daten in einer anderen Sitzung nicht sehen. Wann ist das Commit passiert?

EDIT1: Sind Sie der einzige, der diese Datenbank verwendet? Oder hatten Sie mehrere Sitzungen?

Ich denke, in einer anderen Sitzung haben Sie oder jemand anderes diese Zeile eingefügt, Sie tun Ihre Auswahl und Sie sehen diese Zeile nicht. Danach findet in der anderen Sitzung ein Commit statt (möglicherweise implizit, weil eine Sitzung geschlossen wurde) und dann sehen Sie diese Zeile, wenn Sie erneut auswählen.

Ich kann an andere Erklärungen denken, aber ich möchte zuerst wissen, sind Sie nur eine, die diese Datenbank verwendet.

+0

Zeile, die ausgewählt wurde, wird zwischen zwei Auswahlmöglichkeiten nicht geändert. – Chobicus

+0

DB wird von anderen Benutzern verwendet, die Zeilen in dieser Tabelle einfügen/aktualisieren, aber ich bin mir sicher, dass keine Zeile eingefügt oder bearbeitet wird, die ich auswähle. – Chobicus

+0

Wie können Sie sicher sein? Jedenfalls frage ich nach dem Commit (implizit/explizit), nicht nach dem Einfügen. – tuinstoel

0

Mit Lesekonsistenz wie von Oracle zur Verfügung gestellt, sollten Sie keine Zeile so angezeigt werden. Wenn Sie in einem Modus mit automatischen Commits arbeiten, sodass jede Anweisung eine in sich abgeschlossene Transaktion ist, wird die Lesekonsistenz nicht verletzt. Mit welchem ​​Programm greifen Sie auf die Datenbank zu? Ich stimme den anderen Beobachtungen zu; Die Zeile sollte nicht angezeigt werden, wenn Ihre Sitzung sie nicht einfügt und keine andere Sitzung gleichzeitig aktiv ist. Ich kenne kein DBMS, das spontane Datengenerierung ermöglicht.