Global Context work in RAC 11.2 !!!
Помимо массы архитектурных изменений, RAC в версии 11g Release 2 принес еще одну хорошую новость: теперь в RAC работают глобальные контексты (Global Application Context)
Вообще, глобальные контексты, как таковые, работали в RAC и до версии 11.2, но с одним "нехорошим" поведением: значения параметров не синхронизировались между узлами кластера. То есть: если значение параметра в контекст записала сессия на одном узле, а другая сессия пытается прочитать его на другом - значение параметра будет пустым!
Те, кто был на нашем семинаре RAC DD4D, хорошо это знают - я демонстрировал пример этой неприятной особенности контекстов в RAC.
Но теперь это в прошлом: начиная с 11.2 глобальные контексты полностью поддерживаются в RAC!
Как насчет pipe-ов в RAC?
Нет, нет: к сожалению, pipe-ы до сих пор в РАКе не работают.
- Но у нас есть обходное решение ! :-)
На семинаре оно тоже демонстрировалось.
node1-> sqlplus rscott/rtiger@orcl1
SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 16 18:23:45 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> select dbms_utility.current_instance from dual;
CURRENT_INSTANCE
----------------
1
SQL> create context my_context using set_rac_context
accessed globally;
Context created.
SQL> create or replace procedure set_rac_context(v_pName in varchar2,
v_pValue in varchar2) is
begin
dbms_session.set_context('MY_CONTEXT',v_pName, v_pValue);
end;
/
show errors;
Procedure created.
No errors.
SQL> exec set_rac_context('Hello','World');
PL/SQL procedure successfully completed.
SQL> select sys_context('MY_CONTEXT','Hello') from dual;
SYS_CONTEXT('MY_CONTEXT','HELLO')
--------------------------------------------------------------------------------
World
SQL> conn rscott/rtiger@orcl2
Connected.
SQL> select dbms_utility.current_instance from dual;
CURRENT_INSTANCE
----------------
2
SQL> select sys_context('MY_CONTEXT','Hello') from dual;
SYS_CONTEXT('MY_CONTEXT','HELLO')
--------------------------------------------------------------------------------
World
SQL> --!!!
Дима, раз пошла тема по контекстам - есть один "нехороший" момент. В базе существует возможность указывать пользователей (как, собственно и имена других объектов) с использованием маленьких букв, да и сторонних алфовитов. Соответственно - такие пользователи задаются как '"Вася"'. И всё бы хорошо,только функция установки контекста преобразует такую строчку по принципу SUBSTR(UPPER(NAME),1,30), Т.е. имя в 30 символов с прописными превратится в двойные кавычки и первые 29 букв, приведённых к верхнему регистру. Ну а если меньше - то же имя в верхнем регистре, но с оставшимися двойными кавычками. Понятно, что SYS_CONTEXT для дакого пользователя ничего не вернёт...
ОтветитьУдалитьBUG: 10008469, статус 11 (насколько я понимаю - в разработке)