11gR2 Online Application Upgrade a TAF

Slíbil jsem, že tu zveřejním odpovědi na otázky, které padly na úterním semináři Coffee. Hned ta první se týkala Real Application Clusteru (RAC), resp. konkrétně mechanismu Transparent Application Failoveru (TAF). Dnešní příspěvek ukazuje odpověď.V Oracle Database 11gR2 si každé spojení může zvolit edici aplikačních objektů, se kterou chce pracovat - volí si tak, jestli chce pracovat se starou, nebo s novou verzí aplikace. Co když se ale takové spojení přeruší (třeba díky pádu serveru) a mechanismus TAF automaticky aplikaci vytvoří náhradní spojení? Bude toto nové spojení mít nastavenou stejnou edici, nebo bude využívat edici nastavenou v databázi jako výchozí?
Když jsem si tak v hlavě promítl jak TAF funguje v jiných případech, byl jsem docela skeptický. TAF obecně nepřenáší žádné vlastnosti spojení - ať již jde třeba o různé parametry národního prostředí (NLS_SORT atd.), nebo o hodnoty globálních proměnných v PL/SQL balíčcích. Aplikace prostě dostane nové spojení tak jako vždycky. Pokud si původní spojení tyto parametry oproti výchozím hodnotám nějak přenastavilo, musí to aplikace explicitně udělat i u nového spojení.

Podívejme se tedy, jak to dopadne s nastavením aktuální edice spojení při TAF. Bohužel jsem neměl k dispozici žádný RAC, na kterém bych mohl test provést a tak jsem si musel vystačit s TAFem na single instanci.
Alias v tnsnames.ora vypadal takto:


orcl_taf =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db11g.cz.oracle.com)(PORT = 1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic)
(RETRIES=20)
(DELAY=15)
)
)
)

Vidíte,že oproti klasikému zápisu pro RAC zde mám definovaný jediný listener - víc jsem jich prostě na notebooku neměl :-).

V databázi jsem si jako uživatel SYS následně vytvořil další edici - DRUHA. Jako výchozí edice v databázi dále zůstala původní ORA$BASE - k této edici se tedy připojí všechna nová spojení. Pokud chtějí jinou, musí si jí nastavit pomocí ALTER SESSION.

Poté jsem se přihlásil do SQL*Plus jako uživatel, který má právo používat obě zmíněné edice. Níže uvedený postup ukazuje, že spojení se nejprve připojilo k edici ORA$BASE a následně si edici změnilo na DRUHA.


SQL> select sys_context('USERENV','CURRENT_EDITION_NAME') cur_edition from dual;
CUR_EDITION
============================================
ORA$BASE


SQL> alter session set edition=druha;
Session altered.


SQL> select sys_context('USERENV','CURRENT_EDITION_NAME') cur_edition from dual;
CUR_EDITION
============================================
DRUHA

Spojení nyní pracuje s edicí DRUHA. V tuto chvíli se spojení přeruší. Protože jsem nepracoval na RACu, nemohl jsem jen tak vypnout databázový server, a tak jsem výpadek simuloval tím, že jsem pomocí kill -9 ukončil proces databázového serveru obsluhující toto spojení. Poté jsem se vrátil zpět do původního okna SQL*Plus a zopakoval poslední příkaz:


SQL> select sys_context('USERENV','CURRENT_EDITION_NAME') cur_edition from dual;
select sys_context('USERENV','CURRENT_EDITION_NAME') cur_edition from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


SQL> select sys_context('USERENV','CURRENT_EDITION_NAME') cur_edition from dual;
CUR_EDITION
============================================
ORA$BASE

První spuštění dotazu skončilo chybou - okamžitě ale zafungoval mechanismus TAF a podal mi náhradní spojení. Když jsem tedy dotaz zopakoval, již proběhl bez problémů. Jak ale vidíte, nově vytvořené spojení používá tu edici, která je v databázi nastavena (pomocí ALTER DATABASE) jako výchozí. Nastavení aktuální edice ve spojení se tedy chová stejně jako ostatní parametry spojení - při TAF se resetuje.

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

Česky o všem co se točí kolem Oracle Database.

Autoři:

Patrik Plachý
Technology Sales Consultant

David Krch
Principal Consultant
Oracle Expert Services

Oracle Czech

Search

Archives
« duben 2014
PoÚtStČtSoNe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today