zoukankan      html  css  js  c++  java
  • oracle 11G RAC会话故障转移测试

    目前接手的几个项目中,默认使用的oracle RAC数据库服务,均不能实现自动的会话转移,尤其是对于应用的长连接,一旦发生数据库故障,需要重启应用。
    实际11G具备会话迁移机制,为此做了如下配置测试,供参考使用。
    ◆创建一个测试用户test
    [oracle@hencrnopdb1 ~]$sqlplus / as sysdba
    SQL> create user test identified by test;
    User created.
    SQL> grant dba to test;
    Grant succeeded.
    SQL> exit

    ◆原数据库服务henorcdb,没有针对会话的故障转移功能
    [oracle@hencrnopdb1 ~]$sqlplus test/test@137.32.78.106:1521/henorcdb
    SQL> select failover_type,failover_method,failed_over from v$session where username=’TEST’;
    FAILOVER_TYPE FAILOVER_M FAI
    ————- ———- —
    NONE NONE NO
    SQL> exit

    ◆创建一个新的TAF服务
    [oracle@hencrnopdb1 ~]$srvctl add service -d henorcdb -s henorcdb_TAF -r henorcdb1,henorcdb2
    [oracle@hencrnopdb1 ~]$srvctl start service -d henorcdb -s henorcdb_TAF
    [oracle@hencrnopdb1 ~]$srvctl modify service -d henorcdb -s henorcdb_TAF -q TRUE -P BASIC -e SELECT

    ◆用新服务henorcdb_TAF连接数据库,本次链接到了节点1
    [oracle@hencrnopdb1 ~]$sqlplus test/test@137.32.78.106:1521/henorcdb_TAF
    SQL> select instance_number,instance_name,host_name,status from v$instance;
    INSTANCE_NUMBER INSTANCE_NAME
    ————— —————-
    HOST_NAME STATUS
    —————————————————————- ————
    1 henorcdb1
    hencrnopdb1 OPEN
    SQL> exit

    ◆用新服务henorcdb_TAF连接数据库,本次链接到了节点2
    [oracle@hencrnopdb1 ~]$sqlplus test/test@137.32.78.106:1521/henorcdb_TAF
    SQL> select instance_number,instance_name,host_name,status from v$instance;
    INSTANCE_NUMBER INSTANCE_NAME
    ————— —————-
    HOST_NAME STATUS
    —————————————————————- ————
    2 henorcdb2
    hencrnopdb2 OPEN

    ◆新数据库服务henorcdb_TAF,有针对会话的故障转移功能
    SQL> select failover_type,failover_method,failed_over from v$session where username=’TEST’;
    FAILOVER_TYPE FAILOVER_M FAI
    ————- ———- —
    SELECT BASIC NO

    ◆保留已有会话,临时退出sqlplus
    SQL> !

    ◆关闭会话所连接的数据库节点2
    [oracle@hencrnopdb1 ~]$srvctl stop instance -d henorcdb -n hencrnopdb2
    [oracle@hencrnopdb1 ~]$exit
    exit

    ◆返回已有的会话,查看此时会话是否还能正常连接数据库,连到了哪个节点上,发现自动连接到了节点1上!
    SQL> /
    INSTANCE_NUMBER INSTANCE_NAME
    ————— —————-
    HOST_NAME STATUS
    —————————————————————- ————
    1 henorcdb1
    hencrnopdb1 OPEN

    SQL> select failover_type,failover_method,failed_over from v$session where username=’TEST’;
    FAILOVER_TYPE FAILOVER_M FAI
    ————- ———- —
    SELECT BASIC YES

    ◆恢复现场,启动节点2
    SQL> !
    [oracle@hencrnopdb1 ~]$srvctl start instance -d henorcdb -n hencrnopdb2
    [oracle@hencrnopdb1 ~]$exit
    exit

    ◆会话并不会自动切换回节点2
    SQL> /
    FAILOVER_TYPE FAILOVER_M FAI
    ————- ———- —
    SELECT BASIC YES
    SQL> select instance_number,instance_name,host_name,status from v$instance;
    INSTANCE_NUMBER INSTANCE_NAME
    ————— —————-
    HOST_NAME STATUS
    —————————————————————- ————
    1 henorcdb1
    hencrnopdb1 OPEN

    ◆◆结论
    oralce 11G的RAC具备对已有session的自动故障保护机制,当前连接的节点down掉的话,可以将已有连接自动迁移到另外的节点。
    对于正在执行的事务,是不是可以无缝迁移,尚待验证。
    只是遗憾的是,默认的数据库服务并不具备TAF功能,需要另外的配置,具体如上所述。

  • 相关阅读:
    App.domain http->https
    js 点赞数 处理
    js插入拼接链接 --包含可变字段
    MYSQL修改表操作
    PHP上传文件类 代码练习
    PHP上传文件代码练习2 (重复文章)
    自制山寨百度一下
    PHP多文件上传代码练习
    修改PHP上传文件的大小限制
    三维数组变两位数组
  • 原文地址:https://www.cnblogs.com/likingzi/p/6087010.html
Copyright © 2011-2022 走看看