Эквивалент Oracle для изоляции моментальных снимков SQL Server

В Microsoft SQL Server я использую ИЗОЛЯЦИЮ READ_COMMITTED_SNAPSHOT

ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON

В сеансе 1 обновите принципала с 4000 до 5000.

BEGIN TRAN
Update MyTable Set Principal=5000 Where InvestorId=10 

Теперь в Сессии 2 я говорю

Select Principal from MyTable where InvestorId=10

Я получаю 4000, поскольку транзакция сеанса 1 не зафиксирована.

Если я не использую режим изоляции READ_COMMITTED_SNAPSHOT и использую

  1. ПРОЧИТАЙТЕ ЗАВЕРШЕННЫЙ РЕЖИМ ИЗОЛЯЦИИ, тогда моя сессия 2 будет ждать
  2. Если я использую режим READ_UNCOMMITTED ISOLATION, тогда мой сеанс 2 даст 5000 (эквивалентно использованию nolock в инструкции select)

В Oracle, если я выполняю эквивалентный набор команд, по умолчанию он ведет себя так, как если бы установлен режим изоляции READ_COMMITTED_SNAPSHOT.

Я читал в статьях Microsoft, что режим изоляции SNAPSHOT записывает в базу данных tempdb до выполнения обновлений.

-Как Oracle достигает этого по умолчанию?

-Тоже на диск пишет? вызывает ли это проблемы с вводом / выводом?

-Отличается ли уровень блокировки по умолчанию в Oracle от SQL-сервера?

Заранее благодарим за вашу помощь и время.


person VenVig    schedule 29.01.2014    source источник
comment
В Oracle нет аналога READ_UNCOMMITTED ISOLATION Mode.   -  person Egor Skriptunoff    schedule 29.01.2014
comment
Под READ_UNCOMMITTED ISOLATION вы имеете в виду POST в Oracle?   -  person AnBisw    schedule 19.02.2014


Ответы (2)


В Oracle уровень изоляции READ_COMMITTED является режимом по умолчанию, то есть данные записываются в файл данных (диск) и доступны для выбора другими сеансами только после COMMIT. Для этого используется сегмент UNDO. Это не вызывает каких-либо проблем с вводом-выводом при выборе Oracle по умолчанию использует блокировку на уровне строк.

Вы можете ознакомиться с главами 9 и 10 документа Oracle DataBase Concepts подробнее

person vishad    schedule 29.01.2014
comment
Спасибо Vishad .. очень полезно - person VenVig; 10.06.2014
comment
comment
Обратите внимание, что READ COMMITTED SNAPSHOT и SNAPSHOT в mssql - не совсем одно и то же. Итак, хотя это отвечает на вопрос ОП, об этом можно сказать больше: dba.stackexchange.com/questions/54680/ - person Johan Boulé; 07.01.2021

В Oracle по умолчанию это неблокирующие запросы ... аналогично режиму изоляции моментальных снимков SQL. Поведение блокировки по-прежнему действует, но не влияет на чтение, которое запрашивает только зафиксированные данные перед запуском транзакции в затронутых строках, что позволяет избежать грязных чтений. см. главу 9 - Неблокирующие запросы.

person Elvin Ikhsan    schedule 28.06.2018
comment
Пожалуйста, постарайтесь предоставить больше информации, чтобы улучшить ответы, например примеры - желательно использовать те же примеры, которые использовались в вопросе. - person Jithin Scaria; 28.06.2018
comment
Обратите внимание, что READ COMMITTED SNAPSHOT и SNAPSHOT в mssql - не совсем одно и то же. Итак, хотя это отвечает на вопрос ОП, об этом можно сказать больше: dba.stackexchange.com/questions/54680/ - person Johan Boulé; 07.01.2021