奇怪的Oracle问题

时间:2009-04-04 14:11:04

标签: oracle select

我试着把它放在一个句子中,但最好举一个例子:

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!

某些DB机制是否可能阻止第一个SELECT返回行?

Oracle日志没有错误。

执行两个选择时,不会回滚任何事务。

3 个答案:

答案 0 :(得分:1)

您无法在其他会话中看到未提交的数据。什么时候提交?

EDIT1:你是唯一一个使用这个数据库的人吗?或者你有多个会话吗?

我认为在另一个会话中,您或其他人已插入此行,您执行选择,但您看不到此行。之后,在另一个会话中发生提交(可能是隐式的,因为会话已关闭)然后再次选择时会看到此行。

我可以想到其他解释,但我首先想知道你是否只使用这个数据库。

答案 1 :(得分:0)

使用Oracle提供的读取一致性,您不应该看到这样的行。如果您使用自动提交在某种模式下运行,那么每个语句都是一个自包含的事务,则不会违反读取一致性。您使用哪个程序来访问数据库?我同意其他意见;如果您的会话未插入该行,并且同时没有其他会话处于活动状态,则不应出现该行。我不知道DBMS会沉迷于自发的数据生成。

答案 2 :(得分:0)

你在甲骨文中没有scheduled jobs吗?