2017-05-22 10 views
0

haben wir einen Sybase ASE 15 DB und etwas seltsam letzte Woche passiert ist, es sieht aus wie ein select auf eine neu eingefügte Zeile vielleicht direkt nach dem Einsatz verpaßtSybase fehlender Einsatz

unsere Tabelle verwendet/Ende-Zeitstempel für milestoning beginnen; ein Beispiel ist

id number, 
name varchar(32), 
start timestamp, 
end timestamp; 

ein "Update" wäre ein Update auf bestehenden Ende; und ein Einfügen des neuen Datensatzes; Beispiel

id name start    end 
1 alice 2010-01-01 00:00:00 3000-01-01 00:00:00 

auf Update

id name start    end 
1 alice 2010-01-01 00:00:00 2010-01-01 08:00:00 
1 bob 2010-01-01 08:00:00 3000-01-01 00:00:00 

werden und sowohl Update und Insert wird in der gleichen Transaktion

nun mit Reihen- Verriegelungs- und Index (ID, Beginn, Ende) durchgeführt, bei der Auswahl mit Isolationsstufe 1, bei Auswahl Abfrage:

select * from table where id=1 and start<=getdate() and end>getdate() 

Idealerweise wenn Auswahl ausgeführt wird d Beim Update sollte es bis zum Commit blockieren und die letzte Zeile zurückgeben.

Jedoch in unserem Fall sahen wir die Blockierung, aber keine Zeilen zurückgegeben!

Das bedeutet für mich, dass wenn die Auswahl ausgeführt wird, sieht das Update, aber nicht die Einfügung; ist das möglich?

ist es irgendwie möglich, commit, die neue Zeile eingefügt wird, aber der Index ist nicht aktualisiert daher die Auswahl nicht die neue Zeile sehen?

Dank

Antwort

0

Wenn dies Sybase ASE, dann müssen Sie einen anderen Datentyp als ‚Zeitstempel‘ wählen - das ist ein spezieller Datentyp in ASE, in keinem Zusammenhang mit dem wirklichen Leben Datum/Uhrzeit. Verwenden Sie stattdessen 'bigdatetime' oder 'datetime'.