CftClub.ru
Клуб специалистов ЦФТ-Банк

Договор № C/xxx/xxx-xx заблокирован.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sant
Участник со стажем


Вступление в Клуб: 19.08.2013
СообщениеВт Июл 01, 2014 08:00   Договор № C/xxx/xxx-xx заблокирован. Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток!
Если по кредитному договору запущена операция "Распределение погашения задолженностей (Alt+G)", то это операция блокирует эту договор и когда запускаем эту операцию из другой сессии по этому договору то получаем сообщению "Договор № C/xxx/xxx-xx заблокирован.".
Как найти сессию которую заблокировал эту договор?
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Июл 01, 2014 08:32   Re: Договор № C/xxx/xxx-xx заблокирован. Ответить с цитатой
Полезность: 1
Sant пишет:
Доброго времени суток!
Если по кредитному договору запущена операция "Распределение погашения задолженностей (Alt+G)", то это операция блокирует эту договор и когда запускаем эту операцию из другой сессии по этому договору то получаем сообщению "Договор № C/xxx/xxx-xx заблокирован.".
Как найти сессию которую заблокировал эту договор?


Навигатором если запустить операцию, то он скажет все что надо - и пользователя, и рабочее место, и сессию.
Программно можно поймать ошибку с полным текстом вот так:

Код:

begin
    rtl.chk_lock(ID_экземляра, null);
end;
Sant
Участник со стажем


Вступление в Клуб: 19.08.2013
СообщениеВт Июл 01, 2014 08:46   Re: Договор № C/xxx/xxx-xx заблокирован. Ответить с цитатой
Полезность: Нет оценки
devor пишет:

Навигатором если запустить операцию, то он скажет все что надо - и пользователя, и рабочее место, и сессию.


Навигатором запускаю получаю только эту сообщению:
Код:

Договор № C/001-00/-001 заблокирован.

Код:

ORA-20300: APP-PR_CRED.DISTR_DEBT_DOG: Договор № C/001-00/-001 заблокирован.

ORA-06512: на  "IBS.MESSAGE", line 50

ORA-06512: на  "IBS.Z$PR_CRED_DISTR_DEBT_DOG", line 73

ORA-06512: на  "IBS.Z$PR_CRED_DISTR_DEBT_DOG", line 902

ORA-06512: на  "IBS.Z$PR_CRED_DISTR_DEBT_DOG_E", line 91

ORA-06512: на  "IBS.Z$U$480528203", line 1566

ORA-06512: на  line 1

BEGIN

DECLARE

   R VARCHAR2(1);

BEGIN

   $$$.Z$U$480528203.S(?);

   $$$.Z$U$480528203.P(?,R,?);

   IF R='1' THEN

      ?:=$$$.Z$U$480528203.G(R);

   ELSE

      R:='1';

   END IF;

   ?:=R;

   ?:=$$$.EXECUTOR.GET_DEBUG_TEXT('B');

END;

END;


devor пишет:

Программно можно поймать ошибку с полным текстом вот так:
Код:

begin
    rtl.chk_lock(ID_экземляра, null);
end;



Код:

LOCK-RESOURCE_BUSY:
Экземпляр [406868484]
блокирован, тип
[KRED_PERS]
Продолжить загрузку
оперции?
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Июл 01, 2014 10:49    Ответить с цитатой
Полезность: Нет оценки
Значит блокировка не логическая, а физическая.
Код:

SELECT *
FROM v$lock v, dba_objects d
WHERE v.id1 = d.object_id
   AND d.object_name = 'Z#PR_CRED'
Sant
Участник со стажем


Вступление в Клуб: 19.08.2013
СообщениеВт Июл 01, 2014 11:13    Ответить с цитатой
Полезность: Нет оценки
devor пишет:
Значит блокировка не логическая, а физическая.
Код:

SELECT *
FROM v$lock v, dba_objects d
WHERE v.id1 = d.object_id
   AND d.object_name = 'Z#PR_CRED'


Спасибо, devor.
Можно как нибудь модифицировать запрос чтобы ввести номер договора или ид из таблицы Z#PR_CRED ?
Reddom
Участник со стажем


Вступление в Клуб: 25.01.2013
СообщениеЧт Июл 03, 2014 15:22    Ответить с цитатой
Полезность: Нет оценки
Sant пишет:

Можно как нибудь модифицировать запрос чтобы ввести номер договора или ид из таблицы Z#PR_CRED ?


Не совсем понятно, зачем искать блокировку у объекта? Блокировки чаще смотрят от сессии, так как обычно попадая на блокировку вы уже имеете sid.
Код:
select SID from v$session where AUDSID = userenv('SESSIONID')

Или
Код:
to_number(substr(rtl.session_id,1,4), 'XXXX')


Попробуйте что-нибудь с таким скриптом:
Код:
select s.sid,
       pc.id,
       pc.c_num_dog
  from v$lock v, dba_objects d, v$session s, Z#PR_CRED pc
 where v.id1 = d.object_id
   and d.object_name = 'Z#PR_CRED'
   and s.SID = v.sid
   and row_wait_obj# != -1
   and pc.rowid = dbms_rowid.rowid_create(1,
                                          d.object_id,
                                          row_wait_file#,
                                          row_wait_block#,
                                          row_wait_row#);
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеПт Июл 04, 2014 05:11    Ответить с цитатой
Полезность: Нет оценки
Reddom пишет:

Попробуйте что-нибудь с таким скриптом:
[code]select s.sid,
pc.id,
pc.c_num_dog
from v$lock v, dba_objects d, v$session s, Z#PR_CRED pc
where v.id1 = d.object_id
and d.object_name = 'Z#PR_CRED'
and s.SID = v.sid
and row_wait_obj# != -1
and pc.rowid = dbms_rowid.rowid_create(1,
d.object_id,
row_wait_file#,
row_wait_block#,
row_wait_row#);

Это тоже самое, что представление "1.4 User Sessions Locks" в Системных журналах.
Для случая автора не поможет. На Z#PR_CRED будет TM блокировка.
Конкретная же запись блокируется логически - надо искать в службе блокировок ИБСО.

Я не вижу смысла в таких изысканиях. Если блокировка кому-то помешала, то информация об экземпляре уже есть.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru