У меня есть многопользовательское приложение, которое позволяет многим пользователям выполнять операции DML в таблицах базы данных. В соответствии с конкретным сценарием 2 пользователя пытаются выполнить DELETE в одной таблице с помощью разных транзакций.ORA-00060 при запуске нескольких запросов DELETE в одной таблице
Проблема заключается в том, что транзакция 1 является длинной, и на протяжении длительного времени приобретает Row Lock в таблице. Таким образом, транзакция 2 (попытка изменить одни и те же строки) приводит к ошибкам с ORA-00060. Кроме того, я не могу выполнить Execute Immediate для запросов DELETE при транзакции 1, подавать в суд на некоторые проблемы с целостностью данных.
Как я могу изменить запрос DELETE, чтобы воспроизвести что-то вроде поведения NOLOCK в SQL Server?
См [Понимание Oracle тупиковый] (http://lalitkumarb.com/2014/02/25/understanding-oracle -deadlock /). –
То, что вы объясняете, не должно встречаться с «тупиком», оно будет «блокировать» строки, которые еще предстоит выполнить/откат. Тупик возникает, когда два или более сеанса ждут данных, заблокированных друг от друга, в результате чего все сеансы блокируются. –
Хорошо. Я только выяснил, что транзакция 1 является частью вложенной транзакции. Это вызывает тупик? – jetty