Oracle11g TAF 实例测试

来源:互联网 发布:淘宝 种子种球许可证 编辑:程序博客网 时间:2024/05/21 08:46

      TAF(Transparent Application Failover):是指在用户正常连接后,1个节点断掉时,会话不会中断,会自动连接到另外1个节点上。

      TAFfailover有一定区别,failover只会在连接时,发现1个节点断掉后,会尝试另1个节点。而连接后的故障转移是TAF

 

    本文主要测试TAF功能,所用的环境是部署在rhel6.5上的11.2.0.4.0RAC,客户端连接大多是通过scan+DNS的方式。部分测试是通过VIP进行连接。

一。无TAF功能测试

 

1. 使用集群默认service连接

 

在客户端如下配置时:

 

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = racn-cluster-scan.pera.com)(PORT =1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = pera)

    )

  )

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

from V$session where username ='SYSTEM';

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       18         13 NONE                       NONE                 NO

 

                  

                  

连接1个会话进行查询中。。关闭该会话连接的实例后,该会话会断开。并报如下错误:

 

 

ERROR:

ORA-03113: 通信通道的文件结尾

进程 ID: 17306

会话 ID: 27 序列号: 45

 

或者在连接上后,关掉连接到的实例,然后再进行查询时,也会报同样的错误。

 

2.使用自己创建的service连接

 

增加service :

[oracle@racn2 ~]$srvctl add service -d pera -s peras1 -r pera1,pera2

启动该service:

[oracle@racn2 ~]$ srvctlstart service -d pera -s peras1

 

关于srvctl 更多的命令:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/restart.htm#ADMIN12748

 

 

修改连接:

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = racn-cluster-scan.pera.com)(PORT =1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = peras1)

    )

  )

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2  from V$session where username='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       18         23 NONE                       NONE                 NO

 

就在这样的情况下去连接和上面第一个无TAF测试一样,还是不会故障转移。

 

二。session级服务器端的TAF

 

修改service

[oracle@racn2 ~]$ srvctl modify service -dpera -s peras1 -P basic -e session

还是连接到上面的service :peras1

测试session是否会TAF

连接到1个会话

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera1

 

 

关闭连接到的实例:shutdown abort

 

立即去查询会报下面的错误:

 

SQL> select instance_name fromV$instance;

select instance_name from V$instance

*

第 1 行出现错误:

ORA-25408: 无法安全重放调用

 

秒等几秒后再查询:

 

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera2

 

测试select是否会TAF

 

在这种情况发起1个查询:select * from dba_objects,并且在查询未完成进行时,关掉相应实例,此时不会发生select的故障转移,同样会报错:

ERROR:

ORA-03113: 通信通道的文件结尾

进程 ID: 24829

会话 ID: 224 序列号: 7

 

而且会断开连接:

SQL> select instance_name fromV$instance;

ERROR:

ORA-03114: 未连接到 ORACLE

 

三。select级服务器端的TAF

 

将faile_overtype 修改为select

[oracle@racn2 ~]$ srvctl modify service -dpera -s peras1 -P basic -e select

同样使用这样的连接:

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = racn-cluster-scan.pera.com)(PORT =1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = peras1)

    )

  )

 

先测试session能否正常转移

 SQL> select instance_name from V$instance;

 

INSTANCE_NAME

--------------------------------

pera1

 

关闭相应实例:SQL> startup abort

 

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera2

 

经测试能够完成session级别的TAF

 

再测试select能否TAF

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera1

 

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

  from V$session where username ='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       21          7 SELECT                     BASIC                NO

                  

                  

发起查询select * from dba_objects;

关掉实例1:

查询暂停2、3秒,然后会继续

 

再次查询,可以看到已经发生了failover

 

SQL> SELECT SID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2  from V$session where username='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       15         13 SELECT                     BASIC                YES

                  

四。客户端配置select级的TAF

 

客户端连接如下:

 

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = racn-cluster-scan.pera.com)(PORT =1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = pera)

      (FAILOVER_MODE=(TYPE=select)(METHOD=basic))

    )

  )

 

此时连接的服务端不具备TAF功能

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera2

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

       from V$session where username ='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

      200         17 SELECT                     BASIC                NO

 

同上面方法一样,经测得能够完成select 的TAF(故障转移)

 

五。不能loadbalance下的TAF

以上测试均是在可以load balance的情况下测试的,下面测试不能LOAD balance下可否TAF

 

如下连接:

vmpera =

 (DESCRIPTION =

(ADDRESS_LIST =

  (load_balance=off)

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.114.143)(PORT = 1521))

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.114.144)(PORT = 1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = peras1)

    )

  )

 

以上的连接经测试未能实现load balance,连接了5个会话,均连接到了pera1,

 

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 from V$session where username ='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       25         19 SELECT                     BASIC                NO

 

SQL> select instance_name from

 2  V$instance;

 

INSTANCE_NAME

--------------------------------

pera1

 

经测试关掉实例1后连接能够正常转移

 

SQL> select instance_name fromV$instance;

 

INSTANCE_NAME

--------------------------------

pera2

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2    from V$session where username='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

      229         37 SELECT                     BASIC                YES

           

 

当然,只连接1个VIP时,虽然service:peras1是具有faile over能力,但是无法实现TAF的。因为1个节点停掉,连正常的连接都无法保证。

           

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.114.143)(PORT = 1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = peras1)

    )

  )

但是会话查询到的信息却是具有faile over能力的

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2    from V$session where username='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       21          3 SELECT                     BASIC                NO

                  

 

经实际测,在查询时,关掉相应实例后,会断开,而且再也连不上

SQL> conn system/oracle@vmpera

ERROR:

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

 

 

六。客户端写明fail_over=on下的TAF

 

客户端连接

vmpera =

 (DESCRIPTION =

   (ADDRESS_LIST =

         (load_balance=off)

         (fail_over=off)

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.114.143)(PORT = 1521))

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.114.144)(PORT = 1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = peras1)

    )

  )

 

此时连接的service 是具有TAF功能的peras1,经实际测试,此时也能顺利的进行TAF

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2     from V$session whereusername ='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ------------------------------------ -------------------- ------

       15         13 SELECT                     BASIC                NO

进行查询,关实例,发现查询仍在继续,发生了TAF

 

SQL> SELECTSID,SERIAL#,FAILOVER_TYPE,failover_method,failed_over

 2     from V$session whereusername ='SYSTEM';

 

      SID    SERIAL# FAILOVER_TYPE              FAILOVER_METHOD      FAILED

---------- ---------- ---------------------------------------------- ------

       21         77 SELECT                     BASIC                YES

0 0
原创粉丝点击