Oracle RAC 故障转移无法正常工作

Nul*_*ion 5 oracle oracle-11g-r2 rac

我在具有两个节点的 RAC 环境中设置了 Oracle 11gR2。我设置了 SCAN,例如:我在 DNS 设置上有两个条目,因此我可以 ping SCAN 名称并到达任一节点。我也可以 ping 两个-vip地址。

理论上,新的 SCAN 功能应该提供比透明应用程序故障转移 (TAF) 更好的功能,TAF 需要在每个客户端中进行额外配置。使用 SCAN,我可以连接到 SCAN 地址,我应该能够:

  1. 连接到数据库并检查我连接到哪个实例,例如(在 SQL*Plus 上):

    select instance_name, host_name from v$instance;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 关闭我连接到的实例shutdown abort(在单独的会话中)

  3. 在我执行步骤 1 的同一个会话中,如果我重新运行相同的select语句,它应该会自动跳到幸存的节点。

相反,我得到:

ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

注意:在第 2 步之后,我可以退出 SQL*Plus 并重新连接就好了。如果我试图留在同一个会话中,它就行不通。


如果我将客户端中的 tnsnames.ora 修改为:

RAC =
  (DESCRIPTION =
    (LOAD_BALANCE = YES)
    (ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
      (FAILOVER_MODE =
       (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5)
       )
    )
  )
Run Code Online (Sandbox Code Playgroud)

然后它以我期望的方式工作。这是在 11gR2 之前必须完成的工作,但 SCAN 应该自动处理所有这些,因此一个简单的条目如下:

RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
Run Code Online (Sandbox Code Playgroud)

应该以完全相同的方式工作。

Uwe*_*sse 7

SCAN 应该为您提供连接时故障转移,而不是运行时故障转移(如 TAF)。你从哪里得到 SCAN 也意味着 TAF 的(错误)信息?

  • 好吧,除非完成了一些额外的配置,否则不是这样。就像使用获得 TAF 属性的应用程序服务一样 - 这将是一种现代方法,而不是在 tnsnames.ora 中指定 TAF 参数。srvctl -h | grep 服务应该会引导您:-) (2认同)