RAC fail over 测试

oracle rac 11gr2中提供了多种 failover方式,这里只测试 server side TAF. 也就是说在server端配置的failover。这种配置方式的好处就是,如果有什么改动可以在server端改动,不必去多个client端改。OK 实验步骤如下:

首先,创建service

[oracle@racnode1 ~]$ srvctl add service -d orcl -s my_service -r "orcl1" -a "orcl2" -P basic

然后,启动service并查看状态。 可以看到service启动在了orcl1上。因为我们指定的preferred instance 就是orcl1.

[oracle@racnode1 ~]$ srvctl start service -d orcl -s my_service
[oracle@racnode1 ~]$ srvctl status service -d orcl -s my_service
Service my_service is running on instance(s) orcl1

我们也可以进入两个instance来看一下service 启动在了哪。

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
orcl1

SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      my_service

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
orcl2

SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      orcl

  

现在我们进入orcl DB运行下列代码来配置service 的TAF属性

begin
  dbms_service.modify_service(
    service_name=>'my_service',
    failover_method=>dbms_service.failover_method_basic,
    failover_type=>dbms_service.failover_type_select,
    failover_retries=>2,
    failover_delay=>5);
end;

运行完上面的dbms_service包来修改service的TAF配置后可以运行下面的SQL查看更改是否生效。

SQL> select name,failover_method,failover_type from dba_services where  name='my_service';

NAME                         FAILOVER_METHOD              FAILOVER_TYPE
---------------------------- ---------------------------- ----------------------------
my_service                   BASIC                        SELECT

OK. 现在service已经运行起来了,运行在了orcl1上并且配置好了TAF。 我们尝试从客户端发起连接并且,手动的模拟故障,看看该连接是不是会failover到其它Instance。

发起连接。

[oracle@racnode2 ~]$ sqlplus scott/passw0rd@192.168.3.165/my_service

SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 2 17:14:37 2013

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, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
orcl1

可见该连接connect到了orcl1上。因为我们用service name来连 当然会连到orcl1上。

通过下面的几个命令,找出该连接的 os pid 

SQL> select sid from v$mystat where rownum<2;

       SID
----------
        61

SQL> select spid from gv$process where addr in ( select paddr from gv$session where inst_id=1 and sid=61);

SPID
------------------------
24845

去instance 1 所在机器kill -9 24845。 这样就可以实现模拟故障。

这时在该session再次运行下面的SQL会出现如下结果。

SQL> select sid from v$mystat where rownum<2;
select sid from v$mystat where rownum<2
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 25024
Session ID: 59 Serial number: 18071

这说明这时候的 session有故障了。

但是过几秒钟我们再试一下。

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
orcl1

连接恢复

原文地址:https://www.cnblogs.com/kramer/p/3167426.html