• Oracle RAC TAF 无缝failover



    理论背景:

    TAF( Transparent Application Failover ) allows oracle clients to reconnect to a surviving instance in the event of a failure of the instance to which it is connected. There are two types of TAF available, SESSION and SELECT.

    TAF允许oracle客户端重新连接到一个可持续的实例,当客户端连接的实例出现失败时。有2种有效的TAF类型,session and select 。有2种模式在TAF建立的故障转移连接,basic 和preconnect 。

    session: 使用session方式,所有select查询相关的结果在重新建立新的连接后将全部丢失,需要重新发布select命令。

    select:select:使用select方式,Oracle net会跟踪事务期间的所有select语句,并跟踪每一个与当前select相关的游标已返回多少行给客户 端。此时,假定select查询已返回500行,客户端当前连接的节点出现故障,Oracle Net自动建立连接到幸存的实例上并继续返回剩余的行数给客户端。假定总行数为1500,行,则1000行从剩余节点返回。

    BASIC: 客户端通过地址列表成功建立连接后,即仅当客户端感知到节点故障时才创建到其他实例的连接

    PRECONNECT: 预连接模式,是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上

    说明:上述两种方式适用于不同的情形,对于select方式,通常使用与OLAP数据库,而对于session方式则使用与OLTP数据库。因为 select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源。其次,两种方式期间所有未提交的DML事务将自动回滚且必须重启启动。alter session语句不会failover。临时对象不会failover也不能被重新启动。
    配置Service-Side TAF 示例 (oracle用户操作)

    1 创建TAF Service
    node1-> pwd
    /u01/app/11.2.0/grid/bin
    node1-> ./srvctl add service -d devdb -s server_taf -r "devdb1" -P BASIC

    说明:
    Srvctl add service -d -s -r "preferred-instance-list" -a "available-instance-list" -P
    srvctl add service中,只有perferred才会创建服务。 即在OCR中注册一个ora.raw.dmm.rac1.Srv的服务。

    2 启动 server_taf服务
    node1-> ./srvctl start service -d devdb -s server_taf

    3 检查service 运行情况
    node1-> ./srvctl config service -d devdb
    Service name: server_taf
    Service is enabled
    Server pool: devdb_server_taf
    Cardinality: 1
    Disconnect: false
    Service role: PRIMARY
    Management policy: AUTOMATIC
    DTP transaction: false
    AQ HA notifications: false
    Failover type: NONE
    Failover method: NONE
    TAF failover retries: 0
    TAF failover delay: 0
    Connection Load Balancing Goal: LONG
    Runtime Load Balancing Goal: NONE
    TAF policy specification: BASIC
    Edition:
    Preferred instances: devdb1
    Available instances:

    4 确认service ID
    SQL> select name,service_id from dba_services where name = 'server_taf';


    NAMESERVICE_ID
    ---------------------------------------------------------------- ----------
    server_taf 3

    5 给service 添加参数

    SQL> execute dbms_service.modify_service (service_name => 'server_taf' -
    , aq_ha_notifications => true -
    , failover_method => dbms_service.failover_method_basic -
    , failover_type => dbms_service.failover_type_select -
    , failover_retries => 180 -
    , failover_delay => 5 -
    , clb_goal => dbms_service.clb_goal_long);
    > > > > > >
    PL/SQL procedure successfully completed.

    6 确认参数修改
    col name format a15
    col failover_method format a11 heading 'METHOD'
    col failover_type format a10 heading 'TYPE'
    col failover_retries format 9999999 heading 'RETRIES'
    col goal format a10
    col clb_goal format a8
    col AQ_HA_NOTIFICATIONS format a5 heading 'AQNOT'
    SQL> select name, failover_method, failover_type, failover_retries,goal, clb_goal,aq_ha_notifications from dba_services where service_id = 3;
    NAMEMETHOD TYPERETRIES GOAL CLB_GOAL AQNOT
    --------------- ----------- ---------- -------- ---------- -------- -----
    server_tafBASIC SELECT 180 NONE LONG YES

    7 检查service 注册情况
    node1-> lsnrctl services

    LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-FEB-2017 04:43:55
    Copyright (c) 1991, 2013, Oracle. All rights reserved.
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
    Services Summary...
    Service "+ASM" has 1 instance(s).
    Instance "+ASM1", status READY, has 1 handler(s) for this service...
    Handler(s):
    "DEDICATED" established:2 refused:0 state:ready
    LOCAL SERVER
    Service "devdb" has 1 instance(s).
    Instance "devdb1", status READY, has 1 handler(s) for this service...
    Handler(s):
    "DEDICATED" established:0 refused:0 state:ready
    LOCAL SERVER
    Service "devdbXDB" has 1 instance(s).
    Instance "devdb1", status READY, has 1 handler(s) for this service...
    Handler(s):
    "D000" established:0 refused:0 current:0 max:1022 state:ready
    DISPATCHER
    (ADDRESS=(PROTOCOL=tcp)(HOST=node1.localdomain)(PORT=26677))
    Service "server_taf" has 1 instance(s).
    Instance "devdb1", status READY, has 1 handler(s) for this service...
    Handler(s):
    "DEDICATED" established:0 refused:0 state:ready
    LOCAL SERVER
    The command completed successfully

    8 在客户端就可以使用Service-Side TAF了

    在客户端TNS 配置:

    server_taf =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster.localdomain)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = server_taf)
    )
    )

    连接测试
    C:Usersandy>sqlplus sys/oracle@10.100.25.8:1521/server_taf as sysdba
    SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 25 20:59:41 2017
    Copyright (c) 1982, 2014, Oracle. All rights reserved.

    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options

    9 停止service
    node1-> ./srvctl stop service -d devdb -s server_taf -i devdb1

    10 删除service
    node1-> ./srvctl remove service -d devdb -s server_taf -i devdb1

  • 相关阅读:
    图片处理连环画特效
    卡片翻页算法
    android 自定义属性
    android 中捕获全局异常
    c++ 学习笔记
    图片怀旧特效处理
    Linux 网络配置
    指针参数传递
    python 读写文件
    PopupWindow 点击外面取消
  • 原文地址:https://www.cnblogs.com/andy6/p/6442889.html
Copyright © 2020-2023  润新知