dml от нескольких пользователей / сценариев коммитов в oracle - PullRequest
1 голос
/ 07 июля 2010

Как oracle обрабатывает операторы dml, выполняемые несколькими пользователями для одного и того же объекта данных? Предположим,

Если есть пустая таблица с именем EMP(empname varchar2(30)) и пользователь 'A' делает запись в нее

с помощью

insert into emp values('A');

но еще не совершил.

Если другой пользователь 'B' вошел в ту же базу данных, подтвердит ли он / она операции dml, выполненные 'A' (т.е. A 'в таблице EMP)?

Другие сценарии / ссылки, связанные с этой темой, будут высоко оценены. Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 07 июля 2010

Транзакции не видны за пределами вашего сеанса, пока вы не совершите коммит. Если в систему войдет другой пользователь, он увидит таблицу в том виде, в котором она была сохранена в базе данных в ее последнем зафиксированном состоянии. Это является причиной отмены пробелов, повторных журналов и т. Д. В вашем сценарии пользователь B не будет видеть транзакцию A, даже если B зафиксировал его, поскольку A не зафиксировал их изменения.

1 голос
/ 08 июля 2010

Возможно несколько операций вставки dml, даже если они не зафиксированы.Если вставка в emp выше вставляет в столбец с уникальной индексацией (например, первичный ключ), то пока пользователь B не подтвердит или не откатит одно и то же значение - он заблокируется.Таким образом, в некотором смысле пользователь B «видит» незафиксированную вставку с помощью A, хотя пользователь B не может выбрать значения, вставленные с помощью A.

1 голос
/ 07 июля 2010

Для получения полной информации о параллелизме данных и транзакциях в Oracle см. Руководство по концепциям Oracle .

...