Как узнать запущены ли на данном экземпляре какие-н операции
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Чт Ноя 08, 2012 05:58  Как узнать запущены ли на данном экземпляре какие-н операции |
|
Полезность: Нет оценки
|
Как узнать запущены ли на данном экземпляре какие-н простые операции, естественно другими пользователями. Вопрос возник потому что если просто поднята форма объект ещё не блокирован. В списке сессий вижу только операцию, а id экземпляра -нет. |
|
 |
molokov Участник со стажем
Вступление в Клуб: 28.09.2007
|
Чт Ноя 08, 2012 09:51  Re: Как узнать запущены ли на данном экземпляре какие-н опер |
|
Полезность: Нет оценки
|
Если запускается любая простая операция, она сразу устанавливает блокировку, на него, можете проверить, зайдите в два навигатора, в одном запустите простую операцию на каком-нибудь объекте, и в другом попробуйте на нем же запустить другую операцию, увидите сообщения что оно занято, другим. Можно узнать занять ли сейчас данный id кем либо вот так:
в коде переменной p_object присвоить ID блокированного экземпляра.
declare
retb boolean;
a varchar2(300);
p_object varchar2(300);
p_subject varchar2(300);
l_info varchar2(300);
l_time date;
l_user varchar2(300);
u_ses varchar2(300);
os_user varchar2(300);
ora_user varchar2(300);
username varchar2(300);
u_info varchar2(300);
begin
a := lock_info.open();
p_object := '12990682067';
p_subject := 'FORM';
retb := lock_info.get_info( p_object,
p_subject,
l_info,
l_time,
l_user,
u_ses,
os_user,
ora_user,
username,
u_info,
1
);
if retb = true then
a := '1';
else
a := '0';
end if;
dbms_output.put_line('retb:' || a ||
' ora_user:' || ora_user || ' username:' || username || ' сессия: ' || u_ses || ' AUDSID: ' || l_user || ' процесс: ' || l_info);
lock_info.close();
end;
Alkov пишет: | Как узнать запущены ли на данном экземпляре какие-н простые операции, естественно другими пользователями. Вопрос возник потому что если просто поднята форма объект ещё не блокирован. В списке сессий вижу только операцию, а id экземпляра -нет. |
|
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Чт Ноя 08, 2012 11:49  Re: Как узнать запущены ли на данном экземпляре какие-н опер |
|
Полезность: Нет оценки
|
Alkov пишет: | Как узнать запущены ли на данном экземпляре какие-н простые операции, естественно другими пользователями. Вопрос возник потому что если просто поднята форма объект ещё не блокирован. В списке сессий вижу только операцию, а id экземпляра -нет. |
Простая операция всегда блокирует экземпляр.
Проверить блокировку очень просто - попробовать заблокировать самому(%lock). Если не получится (exception when CANNOT_LOCK) - значит экземпляр уже заблокирован ранее |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пт Ноя 09, 2012 05:49   |
|
Полезность: Нет оценки
|
2devor
я же написал что блокировки(в таблице) не происходит...эти способы не годятся.
2molokov
одна операция простая вторая групповая, вот именно групповой и нужно узнать о работе с экземпляром, спасибо за lock_info.get_info попробую, в принципе понятно было что надо работать с ЦФТ-шным блокировщиком... |
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Пт Ноя 09, 2012 15:40   |
|
Полезность: Нет оценки
|
Alkov пишет: | 2devor
я же написал что блокировки(в таблице) не происходит...эти способы не годятся. |
Если простая операция запущена (поднята экранная форма), то блокировка есть в любом случае. она не может не есть. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Ноя 12, 2012 05:02   |
|
Полезность: Нет оценки
|
2 devor
Блокировка есть только на уровне блокировщика ЦФТ, на уровне таблицы её нет, пока не нажмут на форме OK.
Если сделать такую групповую То прагмы не будет.
begin
-- проверим что клиенты не блокированы.
for cl in ::[CLIENT] all where cl in (тут id)
lock nowait
loop
cl%lock;
rtl.lock_object(cl);
debug_pipe('Нет блокировки для ='||cl,0);
end loop;
exception when rtl.CANNOT_LOCK then
pragma error('клиент заблокирован! );
end; |
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Пн Ноя 12, 2012 10:39   |
|
Полезность: Нет оценки
|
Alkov пишет: | 2 devor
я
Блокировка есть только на уровне блокировщика ЦФТ, на уровне таблицы её нет, пока не нажмут на форме OK. |
Да, в этом случае блокировка логическая.
Проверить можно функциями
lock_info.check_lock(object_id, class_id)
или сразу
rtl.check_lock(object_id, class_id) |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пн Ноя 12, 2012 10:48   |
|
Полезность: Нет оценки
|
Если запущена форма, то можно глянуть FRM_LOCKS. Данная табличка показывает на каком объекте запущена форма и каким пользователем. _________________ всегда есть как минимум 2 выхода |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Ноя 12, 2012 10:57   |
|
Полезность: Нет оценки
|
Да сделал , уже как предлагали выше через retb := lock_info.get_info( p_object,...) - всё работает, правда если запустят просто операцию просмотра думаю тоже будет показывать, а не хотелось бы.
проверил rtl.check_lock -тож работает. Всем спасибо! |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|