Давайте проверим !
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 никакого секрета не было ... :-)