Странная проблема с Oracle - PullRequest
0 голосов
/ 04 апреля 2009

Я пытался поместить это в предложение, но лучше привести пример:

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!

Возможно ли, что какой-то механизм БД не позволяет первому SELECT вернуть строку?

В журнале Oracle нет ошибок.

Никакие транзакции не откатываются, когда выполняются два выбора.

Ответы [ 3 ]

1 голос
/ 04 апреля 2009

Вы не можете увидеть незафиксированные данные в другом сеансе. Когда произошел коммит?

EDIT1: Вы единственный, кто использует эту базу данных? Или у вас было несколько сеансов?

Я думаю, что в другой сессии вы или кто-то другой вставили эту строку, вы делаете выбор и не видите эту строку. После этого происходит фиксация в другом сеансе (возможно, неявном, потому что сеанс закрыт), и затем вы видите эту строку при повторном выборе.

Я могу подумать о других объяснениях, но сначала я хочу знать, пользуетесь ли вы только этой базой данных.

0 голосов
/ 04 апреля 2009

У вас нет запланированных заданий в этом Oracle?

0 голосов
/ 04 апреля 2009

При согласованности чтения, предоставленной Oracle, вы не должны видеть строку, выглядящую так. Если вы работаете в каком-то режиме с автоматической фиксацией, так что каждый оператор является отдельной транзакцией, то согласованность чтения не нарушается. Какую программу вы используете для доступа к базе данных? Я согласен с другими замечаниями; строка не должна появляться, если ваша сессия не вставляет ее, и никакая другая сессия не активна одновременно. Я не знаю СУБД, которая занимается спонтанной генерацией данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...