2016-09-07 2 views
0

У меня есть два запросаУдалить строку и удалить блокировку таблицы оракула

1. delete from x;

2. delete from x where y='a'

какой тип замка делает оракул 11 г обеспечить выше запрос?

И предположим, что мы итерацию ниже запрос в программе

delete from x where y='$a'

Пусть есть список числа 1,2,3,4 .. Теперь, если та же программа вызывается из 2 сервера будет 1 сервер delete 1,3 ... и другой сервер удалит 2,4 ...?

+0

http://docs.oracle.com/cd/E25178_01/server.1111/e25789/consist.htm – OldProgrammer

+0

Являются ли оба запроса в разных транзакциях? – saphsys

+0

оба запроса различной транзакции – srinathshil

ответ

1

1) Поскольку предложение where отсутствует, все строки будут заблокированы в таблице для этого пользовательского сеанса. 2) будут заблокированы только те строки, которые соответствуют условию where. Oracle использует блокировку на уровне строк, установив бит блокировки в блок данных для этой строки.

До тех пор, пока не будет произведена фиксация - никакая другая сессия не увидит эти удаления. Oracle будет использовать информацию об откате, созданную для каждого отдельного оператора (или любого оператора DML) для обеспечения согласованного представления для любого другого сеанса. Значение: на других сеансах будет отображаться таблица без удаления. После того, как строки заблокированы - другим сеансам будет запрещено выдавать удаление по этим строкам, и пользователь будет заблокирован, ожидая, что эти строки будут зафиксированы или отменены. Вы можете проверить это с помощью двух сеансов sqlplus.

Если вы хотите узнать больше о замках, посмотрите превосходную книгу Тома Ките, экспертную архитектуру Oracle DB.

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

-1

Нет проблем. Вы можете удалить существующие записи. Но вы не должны забывать транзакцию совершать транзакции.

Смежные вопросы