基于preconnet方式的客户端的taf测试

preconnect参数定义引用官方文档:
preconnect: Set to pre-established connections. This provides faster
failover but requires that the backup instance be able to support all
connections from every supported instance.
==》大致意思是说,指定preconnect方式虽然能够快速完成故障转移,但是要求备用实例从开始就要承担所支持实例的预连接。

本次测试环境 

数据库服务器:oracle linux7.2 + 12.1.0.2两节点RAC
客户端:oracle linux 6.5 + 12.1.0.2单机

1)tnsnames.ora配置
test_taf_pre1=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)
       (HOST= scan_ip)
       (PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME= test)
     (INSTANCE_NAME= db1)
     (FAILOVER_MODE=
       (BACKUP= test_taf_pre2)
       (TYPE=select)
       (METHOD=preconnect))))

test_taf_pre2=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)
       (HOST= scan_ip)
       (PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME= test)
     (INSTANCE_NAME= db2)
     (FAILOVER_MODE=
       (BACKUP= test_taf_pre1)
       (TYPE=select)
       (METHOD=preconnect))))

2)测试
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*)
  2  FROM V$SESSION
  3  GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;
MACHINE         FAILOVER_TYPE   FAILOVER_METHOD FAILED_OVER       COUNT(*)
--------------- --------------- --------------- --------------- ----------
db1             NONE            NONE            NO                      62
ora12c          SELECT          PRECONNECT      NO                       1

SQL> show parameter instance_name
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
instance_name                        string                            db1

[root@db1 ~]# ps -ef | grep LOCAL=NO | grep -v grep
oracle   22195     1  0 11:08 ?        00:00:00 oracledb1 (LOCAL=NO)

[root@db2 ~]#  ps -ef | grep LOCAL=NO | grep -v grep
...省略部分输出
oracle   29060     1  0 11:08 ?        00:00:00 oracledb2 (LOCAL=NO)
==》在节点2上存在预连接

3)新开会话,关闭连接所在实例
SQL> show parameter instance_name
NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
instance_name                        string
db1
SQL> shutdown abort
ORACLE instance shut down.

4)已发生故障转移
SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*)
  2  FROM V$SESSION
  3  GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;
MACHINE         FAILOVER_TYPE   FAILOVER_METHOD FAILED_OVER       COUNT(*)
--------------- --------------- --------------- --------------- ----------
ora12c          SELECT          PRECONNECT      YES                      1
db2             NONE            NONE            NO                      66

SQL> show parameter instance_name
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
instance_name                        string                            db2

下面截取的oracle net关于failover的trace日志
1)通过scan_ip连接到节点1
2016-07-12 11:06:51.003026 : nnftrne:Original name: test_taf_pre1
2016-07-12 11:06:51.012152 : nnfttran:entry
2016-07-12 11:06:51.012365 : nnfttran:exit
2016-07-12 11:06:51.012385 : nnftrne:Using tnsnames.ora address (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST= scan_ip) (PORT=1521)) 
(CONNECT_DATA= (SERVICE_NAME= test) (INSTANCE_NAME= db1) (FAILOVER_MODE= (BACKUP= test_taf_pre2) (TYPE=select) (METHOD=preconnect)))) 
for name test_taf_pre1

2016-07-12 11:06:51.110793 : nscall:connecting...
2016-07-12 11:06:51.110815 : nsc2addr:entry
2016-07-12 11:06:51.110826 : nsc2addr:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.200)(PORT=1521))
2016-07-12 11:06:51.110845 : nttbnd2addr:entry
2016-07-12 11:06:51.110856 : snlinGetAddrInfo:entry
2016-07-12 11:06:51.110905 : snlinGetAddrInfo:exit
2016-07-12 11:06:51.110919 : nttbnd2addr:using host IP address: 192.168.100.200

2)连接节点1成功
2016-07-12 11:06:51.166296 : nscon:connect handshake is complete

3)通过scan_ip预连接节点2
2016-07-12 11:06:51.420095 : nnftrne:Original name: test_taf_pre2
2016-07-12 11:06:51.420115 : nnfttran:entry
2016-07-12 11:06:51.420319 : nnfttran:exit
2016-07-12 11:06:51.420338 : nnftrne:Using tnsnames.ora address (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) 
(HOST= scan_ip) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME= test) (INSTANCE_NAME= db2) (FAILOVER_MODE= (BACKUP= test_taf_pre1) 
(TYPE=select) (METHOD=preconnect)))) for name test_taf_pre2

2016-07-12 11:06:51.491757 : nscall:connecting...
2016-07-12 11:06:51.491782 : nsc2addr:entry
2016-07-12 11:06:51.491794 : nsc2addr:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.201)(PORT=1521))
2016-07-12 11:06:51.491810 : nttbnd2addr:entry
2016-07-12 11:06:51.491821 : snlinGetAddrInfo:entry
2016-07-12 11:06:51.491861 : snlinGetAddrInfo:exit
2016-07-12 11:06:51.491877 : nttbnd2addr:using host IP address: 192.168.100.201

4)预连接成功
2016-07-12 11:06:51.547003 : nscon:connect handshake is complete

5)kill节点1后,执行查询语句
2016-07-12 11:12:31.291286 : nsbasic_bsd:00 00 00 00 92 53 45 4C  |.....SEL|
2016-07-12 11:12:31.291297 : nsbasic_bsd:45 43 54 20 4D 41 43 48  |ECT.MACH|
2016-07-12 11:12:31.291308 : nsbasic_bsd:49 4E 45 2C 20 46 41 49  |INE,.FAI|
2016-07-12 11:12:31.291319 : nsbasic_bsd:4C 4F 56 45 52 5F 54 59  |LOVER_TY|
2016-07-12 11:12:31.291329 : nsbasic_bsd:50 45 2C 20 46 41 49 4C  |PE,.FAIL|
2016-07-12 11:12:31.291340 : nsbasic_bsd:4F 56 45 52 5F 4D 45 54  |OVER_MET|
2016-07-12 11:12:31.291351 : nsbasic_bsd:48 4F 44 2C 20 46 41 49  |HOD,.FAI|
2016-07-12 11:12:31.291362 : nsbasic_bsd:4C 45 44 5F 4F 56 45 52  |LED_OVER|
2016-07-12 11:12:31.291373 : nsbasic_bsd:2C 20 43 4F 55 4E 54 28  |,.COUNT(|
2016-07-12 11:12:31.291384 : nsbasic_bsd:2A 29 0A 46 52 4F 4D 20  |*).FROM.|
2016-07-12 11:12:31.291395 : nsbasic_bsd:56 24 53 45 53 53 49 4F  |V$SESSIO|
2016-07-12 11:12:31.291406 : nsbasic_bsd:4E 0A 47 52 4F 55 50 20  |N.GROUP.|
2016-07-12 11:12:31.291416 : nsbasic_bsd:42 59 20 4D 41 43 48 49  |BY.MACHI|
2016-07-12 11:12:31.291427 : nsbasic_bsd:4E 45 2C 20 46 41 49 4C  |NE,.FAIL|
2016-07-12 11:12:31.291438 : nsbasic_bsd:4F 56 45 52 5F 54 59 50  |OVER_TYP|
2016-07-12 11:12:31.291448 : nsbasic_bsd:45 2C 20 46 41 49 4C 4F  |E,.FAILO|
2016-07-12 11:12:31.291459 : nsbasic_bsd:56 45 52 5F 4D 45 54 48  |VER_METH|
2016-07-12 11:12:31.291470 : nsbasic_bsd:4F 44 2C 20 46 41 49 4C  |OD,.FAIL|
2016-07-12 11:12:31.291481 : nsbasic_bsd:45 44 5F 4F 56 45 52 01  |ED_OVER.|

2016-07-12 11:12:31.291648 : ntt2err:Read unexpected EOF ERROR on 12
2016-07-12 11:12:31.291660 : ntt2err:exit
2016-07-12 11:12:31.291669 : nttfprd:exit
2016-07-12 11:12:31.291709 : nserror:entry
2016-07-12 11:12:31.291723 : nserror:nsres: id=0, op=68, ns=12537, ns2=12560; nt[0]=507, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
2016-07-12 11:12:31.291742 : nsbasic_brc:exit: oln=0, dln=0, tot=0, rc=-1

==》日志中有报错信息,但是客户端无报错信息

6)taf生效后,重新调用该查询
2016-07-12 11:12:31.301775 : nsbasic_bsd:00 00 00 00 00 92 53 45  |......SE|
2016-07-12 11:12:31.301786 : nsbasic_bsd:4C 45 43 54 20 4D 41 43  |LECT.MAC|
2016-07-12 11:12:31.301796 : nsbasic_bsd:48 49 4E 45 2C 20 46 41  |HINE,.FA|
2016-07-12 11:12:31.301807 : nsbasic_bsd:49 4C 4F 56 45 52 5F 54  |ILOVER_T|
2016-07-12 11:12:31.301817 : nsbasic_bsd:59 50 45 2C 20 46 41 49  |YPE,.FAI|
2016-07-12 11:12:31.301828 : nsbasic_bsd:4C 4F 56 45 52 5F 4D 45  |LOVER_ME|
2016-07-12 11:12:31.301839 : nsbasic_bsd:54 48 4F 44 2C 20 46 41  |THOD,.FA|
2016-07-12 11:12:31.301849 : nsbasic_bsd:49 4C 45 44 5F 4F 56 45  |ILED_OVE|
2016-07-12 11:12:31.301860 : nsbasic_bsd:52 2C 20 43 4F 55 4E 54  |R,.COUNT|
2016-07-12 11:12:31.301871 : nsbasic_bsd:28 2A 29 0A 46 52 4F 4D  |(*).FROM|
2016-07-12 11:12:31.301881 : nsbasic_bsd:20 56 24 53 45 53 53 49  |.V$SESSI|
2016-07-12 11:12:31.301892 : nsbasic_bsd:4F 4E 0A 47 52 4F 55 50  |ON.GROUP|
2016-07-12 11:12:31.301903 : nsbasic_bsd:20 42 59 20 4D 41 43 48  |.BY.MACH|
2016-07-12 11:12:31.301914 : nsbasic_bsd:49 4E 45 2C 20 46 41 49  |INE,.FAI|
2016-07-12 11:12:31.301924 : nsbasic_bsd:4C 4F 56 45 52 5F 54 59  |LOVER_TY|
2016-07-12 11:12:31.301935 : nsbasic_bsd:50 45 2C 20 46 41 49 4C  |PE,.FAIL|
2016-07-12 11:12:31.301946 : nsbasic_bsd:4F 56 45 52 5F 4D 45 54  |OVER_MET|
2016-07-12 11:12:31.301956 : nsbasic_bsd:48 4F 44 2C 20 46 41 49  |HOD,.FAI|
2016-07-12 11:12:31.301967 : nsbasic_bsd:4C 45 44 5F 4F 56 45 52  |LED_OVER|

end!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25923810/viewspace-2131494/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25923810/viewspace-2131494/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值