также знаете о том, что она предназначена для защиты от сбоя текущего узла (Failover).
Стоит отметить важный момент, про который часто возникает недопонимание: технология TAF реализуется полностью клиентом СУБД, то есть соответствующая функциональность включена в Oracle Client, и предназначена только для защиты от сбоя соединения. Это означает, что TAF НЕ может защитить от ошибок возникающих в стеке ПО Oracle.
Рассмотрим небольшой интересный пример, предварительно определив в файле tnsnames.ora следующий алиас с поддержкой TAF с типом SELECT:
RACDB_SELECT =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.cluster.us.oracle.com)(PORT = 1521))
(FAILOVER = yes)
(CONNECT_DATA =
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
)
(SERVICE_NAME = racdb.us.oracle.com)
)
)
Откроем сессию в sqlplus с помощью вышеприведенного дескриптора соединения, и по традиции проверим, к какому узлу кластера мы имеем соединение:
C:\RACDD4D\v4.1>sqlplus rscott/rtiger@racdb_select
SQL*Plus: Release 11.2.0.3.0 Production on Sat Jan 28 16:58:19 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, Real Application Clusters and Automatic Storage Management options
SQL>SELECT dbms_utility.current_instance FROM dual;
CURRENT_INSTANCE
----------------
3
Затем выполним запрос по большой таблице в параллельном режиме (Parallel Query), но в момент его выполнения "неожиданно" аварийно завершим экземпляр на другом узле – отличном от того, с которого был инициирован запрос. При этом на “упавшем” узле выполнялась часть подчиненных процессов (Parallel Query Slave):SQL> alter table accounts parallel;
Table altered.
SQL> SELECT acc_id FROM accounts ORDER BY 1;
1
2
3
4
5
6
... ... ...
Пока наш запрос выполняется, аварийно остановим, например. четвертый экземпляр:
[oracle@rac4 ~]$ sqlplus / as sysdba SQL> shutdown abort; ORACLE instance shut down.В этот момент выполнявшийся запрос неожиданно прерывается по ошибке:
ACC_ID
----------
93925
93926
93927
93928
93929
93930
93931
ERROR:
ORA-12805: parallel query server died unexpectedly
В данном случае запрос прервался из-за того, что стали недоступны параллельные подчиненные процессы (Parallel Query Slave) на 4-ом узле. При этом сама сессия в полном порядке – третий узел работоспособен !Произошла ошибка на прикладном уровне Oracle, не связанная с сбоем соединения, поэтому TAF в данном случае ничем не может нам помочь !
