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

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

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

? всем спасибо.
...
Рейтинг: 0 / 0
25.10.2018, 16:37:37
    #39722941
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogв выборке могут бытьКакой выборке?
cobalt_frogКак вообще эта проблема решается в случае использования оператораА как ты её решаешь без использования оператора?
...
Рейтинг: 0 / 0
25.10.2018, 17:35:25
    #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:52
    #39723017
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogБез оператора можно решить разными способамиНе считай, что задающие встречный вопрос такие же идиоты. Раз спросили, вероятно твои представления о проблеме имеют изъян, однозначно угадать который по изложению нельзя.
...
Рейтинг: 0 / 0
26.10.2018, 17:01:10
    #39723683
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
я так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.
...
Рейтинг: 0 / 0
26.10.2018, 17:08:09
    #39723693
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogя так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.

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

SY.
...
Рейтинг: 0 / 0
29.10.2018, 09:32:34
    #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:55
    #39724279
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogМожно перед update - ом каждой строики в цикле сделатьТ.е. для тебя select for update + update = update?
...
Рейтинг: 0 / 0
29.10.2018, 10:00:51
    #39724288
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogЕсть альтернативный вариант?cobalt_frog1. Выбираю список нужных строк таблицы и кидаю ее в коллекцию bulk-ом.
...
Рейтинг: 0 / 0
29.10.2018, 10:09:19
    #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:25
    #39724304
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

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

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

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

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

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

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

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

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

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

почему не стоить коммитить в теле цикла?
...
Рейтинг: 0 / 0
02.11.2018, 11:09:44
    #39727071
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forall update
cobalt_frogпочему не стоить коммитить в теле цикла?Фиксировать-то можно, только смысла блокировать всё до цикла нет, вплоть до ora-1002.
...
Рейтинг: 0 / 0
02.11.2018, 11:13:39
    #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]