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