Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Почему такое может быть??  [new]
кактак
Guest
Видно сессию, ожидающую блокировку строки, заблокированную другой сессией.
Но у ожидающей сессии показывает, что она выполняет не select for update/update/delete, а пользовательскую процедуру, причем не закрытую - ? В чем тут фокус по отображению информации у ждущей сессии ? Разве блокировку строки не оператор sql ожидает всегда?
9 окт 12, 23:32    [13293019]     Ответить | Цитировать Сообщить модератору
 Re: Почему такое может быть??  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
кактак,

быть по-разному может и зависит еще смотреть куда...
9 окт 12, 23:38    [13293051]     Ответить | Цитировать Сообщить модератору
 Re: Почему такое может быть??  [new]
кактак
Guest
xtender
кактак,
быть по-разному может и зависит еще смотреть куда...

sql_id у ждущей сессии.
EM тоже показывает, что выполняется процедура. Вы такое сможете на примере продемонстрировать и объяснить?
9 окт 12, 23:45    [13293076]     Ответить | Цитировать Сообщить модератору
 Re: Почему такое может быть??  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
кактак,

для начала показали бы где и как смотрите, не GUI ли тулза, желательно привести вывод в sql*plus'e...
А продемонстрировать-то не сложно:
+
-- первая сессия
DB11G/XTENDER> create table my_dual as select * from dual;

Table created.

Elapsed: 00:00:00.02
DB11G/XTENDER> update my_dual set dummy='Y';

1 row updated.

Elapsed: 00:00:00.00

-- вторая:
DB11G/XTENDER> create or replace function p_auto return int is
  2    pragma autonomous_transaction;
  3    cursor c is select * from my_dual for update;
  4  begin
  5    open c;
  6    close c;
  7    commit;
  8    return 1;
  9  end;
 10  /

Function created.

Elapsed: 00:00:00.00
DB11G/XTENDER> create or replace procedure p_dummy
  2  is
  3    e int;
  4  begin
  5    select p_auto into e from dual;
  6  end;
  7  /

Procedure created.

Elapsed: 00:00:00.00
DB11G/XTENDER> call p_dummy();
-- висим...
-----------------------------
-- снова в первой:
DB11G/XTENDER> select s.event, s.sql_id,s.sid,a.sql_text from v$session s,v$sqlarea a where s.BLOCKING_SESSION is not null and a.sql_id=s.sql_id;

EVENT                                                            SQL_ID               SID
---------------------------------------------------------------- ------------- ----------
SQL_TEXT
--------------------------------------------------------------------------------
enq: TX - row lock contention                                    bahpab60kpsc9        134
SELECT P_AUTO FROM DUAL
а если вызвать во второй напрямую select p_auto from dual; то выведется верно:
DB11G/XTENDER> select s.event, s.sql_id,s.sid,a.sql_text from v$session s,v$sqlarea a where s.BLOCKING_SESSION is not null and a.sql_id=s.sql_id;

EVENT                                                            SQL_ID               SID
---------------------------------------------------------------- ------------- ----------
SQL_TEXT
--------------------------------------------------------------------------------
enq: TX - row lock contention                                    5a7d8pt330dk4        134
SELECT * FROM MY_DUAL FOR UPDATE

10 окт 12, 00:58    [13293309]     Ответить | Цитировать Сообщить модератору
 Re: Почему такое может быть??  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Есть такая проблема, когда в v$session виден top-level sql. В 406452.1 упоминается. В oradebug dump errorstack 2 можно увидеть настоящий запрос.
10 окт 12, 03:20    [13293463]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить