使用应用程序代码重定向客户机

如果使用 DBPATH 环境变量或连接信息来重定向连接,那么可以在客户机中包含一个例程,用于在客户机遇到集群故障时处理错误。该例程可以调用包含循环(该循环重复尝试连接到集群中的另一个数据库服务器)的其他函数。该例程重定向客户机但不需要用户退出应用程序并重新启动程序。

以下示例显示的是在使用 DBPATH 重定向机制的客户机应用程序中,在尝试重新连接时会循环的函数。在它建立了连接后,它还会测试数据库服务器的类型以确保服务器不是辅助数据库服务器。如果数据库服务器仍为辅助类型,那么它调用另一函数来提醒用户(或数据库服务器管理员)数据库服务器无法接受更新。
/* The routine assumes that the GBASEDBTSERVER environment
 * variable is set to the database server that the client 
 * normally uses and that the DBPATH environment variable 
 * is set to the other database server in the pair.
 */

#define SLEEPTIME 15
#define MAXTRIES 10

main()
{
   int connected = 0;
   int tries;
   for (tries = 0;tries < MAXTRIES && connected == 0;tries++)
   {
      EXEC SQL CONNECT TO "superstores";
      if (strcmp(SQLSTATE,"00000"))
      {
         if (sqlca.sqlwarn.sqlwarn6 != 'W')
         {
            notify_admin();
            if (tries < MAXTRIES - 1)
               sleep(SLEEPTIME);
            }
         else connected =1;
         }
      }
      return ((tries == MAXTRIES)? -1:0);
   }
本示例假设 DBPATH 重定向机制并使用支持 DBPATH 重定向方法的 CONNECT 语句格式。 如果您使用连接信息来重定向,您可以有不同的连接语句,如下所示:
EXEC SQL CONNECT TO "superstores@cliff_ol";

在本示例中,superstores@cliff_ol 是客户机计算机识别的数据库服务器上的数据库。 要进行重定向,管理员必须更改连接信息,以使该名称指向不同的数据库服务器。 可能需要调整客户机在尝试连接前等待的时间量或函数定义的尝试次数。为数据库服务器上的管理操作提供足够时间(以更改连接信息或将辅助数据库服务器的类型更改为标准类型)。