также знаете о том, что она предназначена для защиты от сбоя текущего узла (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 в данном случае ничем не может нам помочь !