zoukankan      html  css  js  c++  java
  • 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
    

    连接恢复

  • 相关阅读:
    git使用代理
    反汇编一个c程序
    Berkeley套接字
    ubuntu 升级
    ubuntu备份与还原
    struct socket 结构详解
    How sockets work
    wget中文乱码问题
    ubuntu配置开机启动服务
    《javascript设计模式》笔记之第五章:单体模式
  • 原文地址:https://www.cnblogs.com/kramer/p/3167426.html
Copyright © 2011-2022 走看看