Давайте проверим !
rac1-> sqlplus rscott/rtiger@racdb2 SQL*Plus: Release 11.2.0.3.0 Beta on Sun Aug 14 21:21:54 2011 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Beta With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> set serveroutput on SQL> --Наша сессия открыта на втором узле: SQL> exec dbms_output.put_line(dbms_utility.current_instance); 2 PL/SQL procedure successfully completed. SQL> --Выясняем id нашей сессии: SQL> exec dbms_output.put_line(dbms_session.unique_session_id); 002A00630002 PL/SQL procedure successfully completed. SQL> --запускаем некую активность в этой сессии: declare k number; begin for i in 1..20000000 loop dbms_lock.sleep(300); k := i; end loop; end; /
Оставив эту сессию выполняться, подключаемся к другому узлу кластера
(к первому узлу - к экземпляру racdb1), и пытаемся проверить статус нашей активной сессии:
rac1-> sqlplus rscott/rtiger@racdb1 SQL*Plus: Release 11.2.0.3.0 Beta on Sun Aug 14 21:24:21 2011 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Beta With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> set serveroutput on SQL> --Наша сессия открыта на первом узле: SQL> exec dbms_output.put_line(dbms_utility.current_instance); 1 PL/SQL procedure successfully completed. SQL> begin if dbms_session.is_session_alive('002A00630002') then dbms_output.put_line('Session active !'); else dbms_output.put_line('Session not active !'); end if; end; / Session active ! PL/SQL procedure successfully completed. SQL>Как Вы видите, в сессии на первом узле прекрасно виден статус активности другой сессии,
которая выполняется на другом узле !
Таким образом вызов dbms_session.is_session_alive полностью поддерживает RAC!
Возможно проблема была связана с Bug 6440088 DBMS_SESSION.IS_SESSION_ALIVE does not work properly in RAC
Этот баг был устранен в 10.2.0.5.
P.S.
На фото - новое издание бестселлера Тома Кайта "Oracle для профессионалов" на русском языке, переработанное с учетом технологий Oracle 11g.
Oracle Database 11g Enterprise Edition Release [b]11.2.0.3.0 - Beta[/b]
ОтветитьУдалитьопять пропалились :)
В дополнение о функции dbms_session.unique_session_id:
ОтветитьУдалитьЗапрос показывающий и чего составляется unique_session_id
select to_number(substr(dbms_session.unique_session_id,1,4),'XXXX') sid,
to_number(substr(dbms_session.unique_session_id,5,4),'XXXX') serial#,
to_number(substr(dbms_session.unique_session_id,9,4),'XXXX') instance
from dual;
>>опять пропалились
ОтветитьУдалитьВ том что будет 11.2.0.3 никакого секрета не было ... :-)