回 帖 发 新 帖 刷新版面

主题:急:DELPHI用ADO方式连接ORACLE RAC不能实现自动切换

环境:DEPHI 7 ORACLE10G RAC 

ORACLE TNSNAMES配置


总连接
ORAHB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.180.1.2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.180.1.3)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orahb)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 80)
        (DELAY = 5)
      )
    )
  )


服务器1连接
ORAHB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.180.1.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orahb)
      (INSTANCE_NAME = orahb1)
    )
  )


服务器2连接
ORAHB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.180.1.3)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orahb)
      (INSTANCE_NAME = orahb2)
    )
  )

用ADO控件连接总的连接串ORAHB,并确保ADOConnection1连接到服务器1上,连接正常,当手工shutdown服务器1上的数据库时,

ADOConnection1.Connect:=false;

ADOConnection1.Connect:=True; 都正常,但连接ADOConnection1的Query报告数据库连接失败,事实上,ADOConnection1.Connect:=false;ADOConnection1.Connect:=true操作并没有使连接自动切换到服务器2上,但将ADOConnection1重建或将程序关闭再打开时连接正常。请问,如何配置能使数据库1连接失败时自动切换到数据库2上?

回复列表 (共1个回复)

沙发

问题我已经解决了,ADO控件是不支持RAC自动切换的。在数据库单节点故障时,还是会中断连接。我是设置了一个全局变量v_error,在每个QUERY都加的except,如果执行失败就将v_error置为1,通过TIMER或下次访问数据库连接时首先判断该变量,如果变量是1就将ADOCONNECTION重建

ADOConnection1.Close; 
FreeAndNil(ADOConnection1);
ADOConnection1 := TADOConnection.Create(nil);
ADOConnection1.LoginPrompt:=false;
再将所有的query或table的连接重新指向ADOConnection1,因为ADOConnection1重建后query或table的连接也默认清除了。

目前这样做效果很好,没出现其他的问题。

我来回复

您尚未登录,请登录后再回复。点此登录或注册