常见故障、常见问题及其解决办法 本小节包含有关 MultiPool 的一些常见问题和解答。 WebLogic Server MultiPool 和 Oracle RAC/TAF 哪一个更适合我? MultiPool 和 Oracle RAC/TAF 所能提供的 Failover 能力的级别不同。依赖于 Oracle RAC/TAF 的配置,可以将一个数据库中使用的部分对象 Failover 到 Failover 节点。有关详细信息,请查阅 Oracle 站点上有关 RAC / TAF 的相关文档及 Oracle RAC (Real Application Clusters) 配置和测试模式。 RAC/TAF 是由 Oracle 提供的附加功能,需要另外付费。BEA 的 MultiPool(针对高可用性配置)是 WebLogic Server 分发的一部分,其费用已包括在内。它提供建立 JDBC 连接池列表的功能,并尝试为连接池提供连接。如果一个数据库发生故障,它会尝试列表中的下一个池。它无法将故障数据库中的任何对象 Failover 到 Failover 实例。 使用某个方案而不使用另一个方案要视所需的 Failover 透明度级别和可以承受的资金开销而定。如果从池中得到连接时数据库已发生故障,MultiPool 功能对应用程序就是透明的。之后就不是透明的了。如果连接正由某个应用程序使用,则该应用程序需要处理回滚和 Failover(及重新执行工作)。 高可用性算法如何决定使用 MultiPool 列表中哪个连接池中的连接? MultiPool 将始终按为其定义的 JDBC 连接池顺序尝试从连接池提供连接。这意味着对于每个连接请求,MultiPool 都将先尝试从第一个池提供连接,如果失败,则会尝试第二个池,如果仍然失败,则会尝试第三个池,依此类推。由于 MultiPool 本身从来不会将池标记为故障或不可用,因此对于下一个连接请求,MultiPool 仍会尝试按前述方式提供连接。在 WebLogic Server 版本 8.1 SP3 / 7.0 SP5 及更高版本中,对这一点做了改进,即如果对列表中其中一个池的连接请求失败,便将该池标记为故障。有关详细信息,请查阅增强功能。 如果数据库关闭,MultiPool 配置中的 JDBC 连接池会出现什么情况? 从池得到连接时,MultiPool 将通过连接测试来检测数据库是否有故障。换言之,MultiPool 并不能检测到 JDBC 连接池的数据库是否有故障,而是通过某个 getConnection() 调用尝试测试和(在必要时)刷新连接,如果失败,将从列表中的下一个池中提供连接。在 WebLogic Server 版本 8.1 SP3 / 7.0 SP5 及更高版本中,对这一点做了改进,即如果对列表中其中一个池的连接请求失败,将暂时禁用该池,并按固定时间间隔执行检查,了解数据库是否恢复了使用。有关详细信息,请查阅增强功能。 如何禁用第一个(或任何)JDBC 连接池以使 Multipool 直接转到列表中的下一个池? 可以通过控制台暂时禁用 JDBC 连接池,以下位置有对该操作的描述:http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1115153 (English);也可以通过对该池执行 weblogic.Admin SUSPEND_POOL 命令暂时禁用 JDBC 连接池,以下位置有对该操作的描述:http://e-docs.bea.com/wls/docs81/admin_ref/cli.html#1296729 (English)。对于较早版本的 WebLogic Server,通过 weblogic.Admin 暂时禁用池的命令是 DISABLE_POOL。 如何在底层数据库恢复正常后恢复使用(MultiPool 中的)JDBC 连接池? 可以类似方式通过控制台重新启用 JDBC 连接池,以下位置有对该操作的描述:http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1115166 (English);也可以通过执行 weblogic.Admin RESUME_POOL 命令重新启用 JDBC 连接池,以下位置有对该操作的描述:http://e-docs.bea.com/wls/docs81/admin_ref/cli.html#1300251 (English)。在较早的 WLS 版本 6.1 和 7.0 中,该命令的名称是 ENABLE_POOL。 如何启用因底层数据库故障而被禁用的 JDBC 连接池? 请在上文中查阅对此问题的解答。 通过拔出网络电缆测试 Failover 情况时,向第二个池的 Failover 为何会花费如此长的时间? WebLogic Server MultiPool 依赖对数据库连接进行测试和刷新(重建)来确定何时 Failover 到列表中的下一个池。这意味着它要依赖底层 JDBC 驱动程序和网络才能从连接测试和创建即时返回。不过,几乎在所有情况下拔出网络电缆都会导致 Failover 的时间非常长,因为套接字可能要过一段时间(最长可达几分钟)后才真正能够将错误状况返回给调用方。 更有效也更现实的 Failover 情况测试方法是干脆关闭数据库或相应的监听器或数据库计算机本身。在上述情况下,Failover 时间要短得多。 还可以通过这种方法检查当拔出网络电缆时,哪种类型的驱动程序(2 类还是 4 类驱动程序)从连接测试返回的速度更快。 返回页首 |