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

Как узнать какая сессия блокирует депозитный договор?

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


Вступление в Клуб: 18.11.2010
СообщениеПт Фев 01, 2013 16:23   Как узнать какая сессия блокирует депозитный договор? Ответить с цитатой
Полезность: Нет оценки
При вызове операции по F3: Изменить депозитный договор
выдается сообщение о ошибке:
"LOCK-RESOURCE_BUSY: Экземпляр [230640070] блокирован, тип [DEPOSIT_PRIV]
Продолжить загрузку операции?"

Как определить какая сессия вызвала блокировку, какие решения посоветуете для этого?
Почему не выводится кто заблокировал данную запись?
Если не выводится кто заблокировал данную запись, значит это job?

Запуск операций:

Обновить список блокировок пользователей
Обновление кэш-пайп
Останов процесса поддержки блокировок
Запуск процесса поддержки блокировок

не помог решить проблему.

Запуск операции: Системные журналы -> Получить информацию о заблокированном экземпляре тоже не дало никакой информации.

Попытка из одной сессии произвести блокировку,
SELECT ID FROM IBS.Z#DEPOSIT_PRIV WHERE ID=230640070 FOR UPDATE WAIT 35

а во второй посмотреть, кто блокирует, не привела к успеху, т.к. SELECT FOR UPDATE WAIT 35 не подвисает в ожидании и спокойно блокирует.

select 'Сессия с sid '||a.sid||' блокирует сессию с sid '||b.sid
from v$lock a, v$lock b
where a.BLOCK = 1
and b.REQUEST > 0
and a.ID1 = b.ID1
and a.ID2 = b.ID2;

Запрос к v$lock, блокировок на Z#DEPOSIT_PRIV не выдал:

SELECT v.* ,d.object_name,d.*
FROM v$lock v, dba_objects d
WHERE
v.id1 = d.object_id
AND d.object_name LIKE 'Z#DEP%'
AND d.owner = 'IBS';

Данный запрос тоже ничего не выдал:
select
o.object_type,
o.object_name,
DECODE(v.locked_mode,
1, 'no lock',
2, 'row share (SS)',
3, 'row exclusive (SX)',
4, 'shared table (S)',
5, 'shared row exclusive (SSX)',
6, 'exclusive (X)') lock_mode,
v.oracle_username,
v.os_user_name,
v.session_id
from
all_objects o,
v$locked_object v
where
o.object_id = v.object_id
AND o.object_name LIKE 'Z#DEP%'
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПт Фев 01, 2013 17:30    Ответить с цитатой
Полезность: Нет оценки
попробуйте посмотреть в таблице RTL_LOCKS.
Там может быть пустая запись с ID договора в поле OBJECT.
Удалите ее если есть.
mx1234567
Участник со стажем


Вступление в Клуб: 18.11.2010
СообщениеПт Фев 01, 2013 20:34    Ответить с цитатой
Полезность: Нет оценки
А поле USER_ID с чем связать?
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеСб Фев 02, 2013 16:01    Ответить с цитатой
Полезность: Нет оценки
да ни с чем...
Просто по id экземпляра поищите записи.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеВт Фев 05, 2013 06:08    Ответить с цитатой
Полезность: Нет оценки
Пробовали посмотреть - есть что в таблице?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеВт Фев 05, 2013 09:43   Re: Как узнать какая сессия блокирует депозитный договор? Ответить с цитатой
Полезность: Нет оценки
mx1234567 пишет:
При вызове операции по F3: Изменить депозитный договор
выдается сообщение о ошибке:
"LOCK-RESOURCE_BUSY: Экземпляр [230640070] блокирован, тип [DEPOSIT_PRIV]
Продолжить загрузку операции?"


Возможно, рассчитывается 133 форма, в нескольких версиях ПЯ в ней был такой дефект.
mx1234567
Участник со стажем


Вступление в Клуб: 18.11.2010
СообщениеСр Фев 06, 2013 11:33    Ответить с цитатой
Полезность: Нет оценки
Нажимаю F3 на договоре, в первой сессии Навигатора.

Затем захожу в другую сессию Навигатора, и на этом же договоре нажимаю F3, получаю сообщение:

LOCK-RESOURCE_BUSY: Экземпляр [307908192] блокирован.
тип [DEPOSIT_PRIV]
Экземпляр [307908192 - DEPOSIT_PRIV] блокирован 11:00:36
06/02/13 (FORM: RUN: [DEPN]::[EDIT#AUTO]).
Пользователь IBS - User1 (DOMAIN\WS-1 -
Novo.exe - Автоматизированное рабочее место- 41030925)
Продолжить загрузку операции?



В PL/SQL Developer выполняю:

Код:
SELECT z1.ID, z2.id, z3.id
from Z#PRODUCT z1, Z#DEPN z2, Z#DEPOSIT_PRIV z3
WHERE z1.ID=307908192
AND z2.ID=307908192
AND z3.ID=307908192
FOR UPDATE;   


Запрос не подвисает, и соответственно из другой сессии просмотреть кто блокирует запись нельзя, данный запрос ничего не возвращает:

Код:
select 'блокирующая сессия'||a.sid||'созданная нами сессия с блокировкой'||b.sid
from v$lock a, v$lock b
where a.BLOCK = 1
and b.REQUEST > 0
and a.ID1 = b.ID1
and a.ID2 = b.ID2;


Т.е. получается блокировки Oracle нет.

Выполняю:
Код:
SELECT * FROM
FRM_LOCKS,rtl_users
WHERE
FRM_LOCKS.USER_ID=rtl_users.ID
AND OBJ_ID=307908192


Запрос возвращает строку, в которой видно кто установил блокировку.
Запрос к RTL_LOCKS ничего интересного не возвращает.

Если же сначала сделать
Код:
SELECT z1.ID, z2.id, z3.id
from Z#PRODUCT z1, Z#DEPN z2, Z#DEPOSIT_PRIV z3
WHERE z1.ID=307908192
AND z2.ID=307908192
AND z3.ID=307908192
FOR UPDATE;


а затем нажать F3, то как раз выдается сообщение, без информации, кто заблокировал:

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


Я так подозреваю, у меня, скорее всего, все подзавесила операция "Групповая обработка периодических комиссий". Она зависла, и ждала снятия блокировок, видимо и своих наделала.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Oracle DBA Часовой пояс: GMT + 3
Страница 1 из 1

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