Пункт согласования согласованности заключается в следующем: предположим, что клиент откатывает свои изменения? Или предположите, что эти изменения потерпят неудачу из-за нарушения ограничения или некоторого сбоя системы?
До тех пор, пока клиент не выполнит свои изменения, эти изменения не существуют. Любое решение, которое вы могли бы сделать на основе фантомного чтения или грязного чтения, не имело бы больше действительности, чем описанный вами сценарий. Действительно, они имеют меньшее значение, поскольку изменения являются неполными и, следовательно, непоследовательными. Конкретный пример: если изменения клиента включают внесение депозита и вывод средств, насколько действительным было бы ваше решение, если бы вы просмотрели счет, когда сделали депозит, но еще не сделали вывод?
Другой пример: длительный пакетный процесс обновляет зарплату каждого сотрудника организации. Если вы выполняете запрос о зарплате сотрудников, действительно ли вам нужен отчет, в котором вы увидите половину сотрудников с обновленной зарплатой и половину их старых зарплат?
редактировать
Read консистенция достигается за счет использования информации, содержащейся в UNDO табличного (сегменты отката в старой реализации). Когда сеанс считывает данные из таблицы, которая изменяется другим сеансом, Oracle извлекает информацию UNDO, которая была сгенерирована этим вторым сеансом, и заменяет ее на измененные данные в наборе результатов, представленном на первом сеансе.
Если сессия чтения является длинным запросом, она может потерпеть неудачу из-за пресловутого ORA-1555: snapshot too old
. Это означает, что степень UNDO, в которой содержится информация, необходимая для сбора согласованного представления, была перезаписана.
Замки не имеют ничего общего с согласованностью чтения. В Oracle записи не блокируют чтение. Цель блокировок состоит в том, чтобы другие процессы не пытались изменить интересующие нас строки.
Хорошо, что я получил вашу точку. Это о том, что произойдет, если транзакция, у которой есть блокировка, не удалась? или что, если менеджер читает данные в реальном времени до завершения транзакции? Кстати, знаете ли вы внутренний механизм согласованности чтения. Заблокированы ли блокировки для обеспечения согласованности чтения? (Я думаю, что блокировки вступают в игру только для предотвращения одновременной транзакции и что блокировки не являются обязательными для согласованности чтения). – user319280
«Это означает, что степень UNDO, в которой содержится информация, необходимая для сборки прочитанного согласованного представления, была перезаписана». - Не могли бы вы лучше объяснить? Вы хотите сказать, что пространство памяти в памяти заполнено, а затем вы видите ошибку ORA-1555? – ROCKY