powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_lock.release()
8 сообщений из 8, страница 1 из 1
dbms_lock.release()
    #33991861
Cotton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью dbms_lock.allocate_unique создаю собственный лок. Если он только создан, то dbms_lock.request по даному lockhandle возвращает 0. Если генериться этот же лок с таким же именем, dbms_lock.request возвращает значение 4. Вопрос. Каким образом можна "убить" этот лок? Использую dbms_lock.release, но толку от него нету. В dbms_lock_allocated лок продолжает висеть, а dbms_lock.request возвращает значение 4.

--------
Любовь и боль
Покой и бой
Я как любой
Несу с собой
...
Рейтинг: 0 / 0
dbms_lock.release()
    #33991875
Q u a d r o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как насчёт test case - нечто, что мы все можем запустить и убедиться?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SQL> declare
   2    l_result number;
   3   begin
   4    l_result:=dbms_lock.request(
   5     id =>  1 ,
   6     lockmode => dbms_lock.x_mode,
   7     release_on_commit => false
   8    );
   9    dbms_output.put_line('result: '||to_char(l_result));
  10   end;
  11   /
result:  0 

PL/SQL procedure successfully completed.

--мы владеем блокировкой, поэтому следующий вызов вернёт 4
SQL> declare
   2    l_result number;
   3   begin
   4    l_result:=dbms_lock.request(
   5     id =>  1 ,
   6     lockmode => dbms_lock.x_mode,
   7     release_on_commit => false
   8    );
   9    dbms_output.put_line('result: '||to_char(l_result));
  10   end;
  11   /
result:  4 

PL/SQL procedure successfully completed.

--нам необходимо освободить блокировку
SQL> declare
   2    l_result number;
   3   begin
   4    l_result:=dbms_lock.release(id =>  1 );
   5   end;
   6   /

PL/SQL procedure successfully completed.

--теперь мы получим 0
SQL> declare
   2    l_result number;
   3   begin
   4    l_result:=dbms_lock.request(
   5     id =>  1 ,
   6     lockmode => dbms_lock.x_mode,
   7     release_on_commit => false
   8    );
   9    dbms_output.put_line('result: '||to_char(l_result));
  10   end;
  11   /
result:  0 

PL/SQL procedure successfully completed.

...
Рейтинг: 0 / 0
dbms_lock.release()
    #33991970
Cotton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все верно, но последний код возвращает 4, вместо 0.
В v$lock она продолжает висеть.

--------
Любовь и боль
Покой и бой
Я как любой
Несу с собой
...
Рейтинг: 0 / 0
dbms_lock.release()
    #33991981
Q u a d r o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cotton все верно, но последний код возвращает 4, вместо 0.
Покажите cut&paste из вашего SQL*Plus. У меня последний вызов вернул 0 ???
...
Рейтинг: 0 / 0
dbms_lock.release()
    #33994617
Cotton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал снова - получилось.
Но вопрос остался открытым. Ведь в своем случае я создавал блокировку ч-з dbms_lock.allocate_unique. Я так понимаю, при этом создается запись в таблице dbms_lock_allocated, где указывается имя даного лока. В моем случае это важно (блокировке присваивать уникальное имя). Мне нужно создать лока и после отработки кода удалить его. Но с этим как раз и проблемы...
--------
Любовь и боль
Покой и бой
Я как любой
Несу с собой
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
dbms_lock.release()
    #39946715
adar7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cotton,

я разобрался с этой гнилой оракловой темкой.

Если релиз возвращает 4, значит есть сессия, которая не дает снять блокировку.
Тебе мой друг нужно в этом случае прибить её отсюда:

Код: plsql
1.
2.
3.
select *
from DBA_LOCKS
where LOCK_TYPE = 'PL/SQL User Lock';
...
Рейтинг: 0 / 0
dbms_lock.release()
    #39946728
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adar7
я разобрался с этой гнилой оракловой темкой.
Ты сильно преувеливаешь свою результативность.
...
Рейтинг: 0 / 0
dbms_lock.release()
    #39946896
elunin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adar7
Если релиз возвращает 4, значит есть сессия, которая не дает снять блокировку.

Код: plaintext
4- Don't own lock specified by id or lockhandle
вы не владеете этой блокировкой, и соответственно нет возможности ее удалить.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_lock.release()
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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