Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / forall update / 25 сообщений из 29, страница 1 из 2
25.10.2018, 16:34
    #39722940
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Всем доброго,

хочу использовать
Код: plsql
1.
forall update

, боюсь что в выборке могут быть залоченные записи. Как вообще эта проблема решается в случае использования оператора
Код: plsql
1.
forall

? всем спасибо.
...
Рейтинг: 0 / 0
25.10.2018, 16:37
    #39722941
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogв выборке могут бытьКакой выборке?
cobalt_frogКак вообще эта проблема решается в случае использования оператораА как ты её решаешь без использования оператора?
...
Рейтинг: 0 / 0
25.10.2018, 17:35
    #39722979
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogв выборке могут бытьКакой выборке?
cobalt_frogКак вообще эта проблема решается в случае использования оператораА как ты её решаешь без использования оператора?

1. Выбираю список нужных строк таблицы и кидаю ее в коллекцию bulk-ом.
2. Произвожу с коллекцией необходимые манипуляции
3. Необходимо по этим записям данные в другой таблице, некоторые строки которые могу быть залочены.

Без оператора можно решить разными способами, например использовать skip locked или update nowait и обрабатывать exception.
...
Рейтинг: 0 / 0
25.10.2018, 18:40
    #39723017
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogБез оператора можно решить разными способамиНе считай, что задающие встречный вопрос такие же идиоты. Раз спросили, вероятно твои представления о проблеме имеют изъян, однозначно угадать который по изложению нельзя.
...
Рейтинг: 0 / 0
26.10.2018, 17:01
    #39723683
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
я так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.
...
Рейтинг: 0 / 0
26.10.2018, 17:08
    #39723693
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogя так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.

А что изменится? UPDATE залоченой записи повиснет что с FORALL что без него.

SY.
...
Рейтинг: 0 / 0
29.10.2018, 09:32
    #39724274
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
SYcobalt_frogя так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.

А что изменится? UPDATE залоченой записи повиснет что с FORALL что без него.

SY.


Можно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
...
Рейтинг: 0 / 0
29.10.2018, 09:38
    #39724279
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogМожно перед update - ом каждой строики в цикле сделатьТ.е. для тебя select for update + update = update?
...
Рейтинг: 0 / 0
29.10.2018, 10:00
    #39724288
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogЕсть альтернативный вариант?cobalt_frog1. Выбираю список нужных строк таблицы и кидаю ее в коллекцию bulk-ом.
...
Рейтинг: 0 / 0
29.10.2018, 10:09
    #39724296
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Есть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...
open cur;
fetch cur bulk collect into cur_array;
for x in 1..cur_array.count
  loop
    begin
      select  id into i from tst where id = cur_arrya(x).id for update nowait;
    exception
      --запись залочена
      continue;
    end;

    update tst
       set name = ...
     where id = cur_arrya(x).id;
    commit;
  end loop;
close cur;
...
...
Рейтинг: 0 / 0
29.10.2018, 10:22
    #39724304
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.
...
Рейтинг: 0 / 0
29.10.2018, 11:31
    #39724361
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.

Хочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил. Думаете есть риск 01555?
...
Рейтинг: 0 / 0
29.10.2018, 11:44
    #39724371
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogХочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил.ты чего-то не понимаешь. Поэтому forall тебе вреден.
...
Рейтинг: 0 / 0
29.10.2018, 12:37
    #39724424
SkilledJunior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogМожно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
Что будешь делать с записями которые не удалось проапдейтить?
...
Рейтинг: 0 / 0
29.10.2018, 13:06
    #39724450
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
SkilledJuniorcobalt_frogМожно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
Что будешь делать с записями которые не удалось проапдейтить?

в таблицу для доката кидать.
...
Рейтинг: 0 / 0
30.10.2018, 09:31
    #39724783
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogХочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил.ты чего-то не понимаешь. Поэтому forall тебе вреден.

что может пойти не так? запись по залоченному списку после коммита разлочится, можете на тестовом примере проверить.
...
Рейтинг: 0 / 0
30.10.2018, 09:55
    #39724795
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogчто может пойти не так?Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"?
...
Рейтинг: 0 / 0
02.11.2018, 09:34
    #39726977
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogчто может пойти не так?Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"? будет ждать пока не отпущу
...
Рейтинг: 0 / 0
02.11.2018, 10:03
    #39727004
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogбудет ждать пока не отпущу
наивный
...
Рейтинг: 0 / 0
02.11.2018, 10:06
    #39727007
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
123ййcobalt_frogбудет ждать пока не отпущу
наивный сам ее залочит и будет ждать пока первый процесс не разлочит..не?
...
Рейтинг: 0 / 0
02.11.2018, 10:43
    #39727041
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogElicпропущено...
Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"? будет ждать пока не отпущуИ как это соотносится с
cobalt_frogпока параллельный процесс ее не залочил?
...
Рейтинг: 0 / 0
02.11.2018, 11:01
    #39727055
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogпропущено...
будет ждать пока не отпущуИ как это соотносится с
cobalt_frogпока параллельный процесс ее не залочил?

я думал что это любому очевидно и не надо разжевывать, что второй процесс залочит запись и будет ждать пока в первом процессе не произойдет commit/rollback.
...
Рейтинг: 0 / 0
02.11.2018, 11:02
    #39727057
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
Eliccobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.

почему не стоить коммитить в теле цикла?
...
Рейтинг: 0 / 0
02.11.2018, 11:09
    #39727071
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogпочему не стоить коммитить в теле цикла?Фиксировать-то можно, только смысла блокировать всё до цикла нет, вплоть до ora-1002.
...
Рейтинг: 0 / 0
02.11.2018, 11:13
    #39727076
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogя думал что это любому очевидно и не надо разжевывать, что второй процесс залочит запись и будет ждать пока в первом процессе не произойдет commit/rollback.Тебе вредно не то что разжёвывать, но даже думать, потому что ты не владеешь терминологией.
Тот, кто ждёт разблокировки записи, не может одновременно и "залочить" её.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / forall update / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]