FAN 支持提供快速连接故障转移,这是一个 Oracle 数据库高可用性功能。这使 PHP OCI8 脚本能够在数据库机器或数据库实例不可用时收到通知。如果没有 FAN,OCI8 会一直挂起,直到 TCP 超时并返回错误,这可能需要几分钟。在 OCI8 中启用 FAN 可以使应用程序检测错误并重新连接到可用的数据库实例,而无需让 Web 用户意识到中断。
当 PHP 链接的 Oracle 客户端库和 Oracle 数据库都为 10gR2 或更高版本时,FAN 支持可用。
FAN 有利于 Oracle 集群技术 (RAC) 的用户,因为可以立即建立到存活数据库实例的连接。使用带有代理的 Oracle Data Guard 的用户将在备用数据库上线时看到生成的 FAN 事件。独立数据库将在数据库重新启动时发送 FAN 事件。
对于活动连接,当机器或数据库实例不可用时,当前正在调用的 OCI8 扩展函数将返回连接失败错误。在随后的 PHP 脚本重新连接时,将建立到存活数据库实例的连接。OCI8 扩展还会透明地清理受数据库机器或实例故障影响的任何空闲连接,因此 PHP 连接调用将建立新的连接,而脚本不会意识到任何服务中断。
当 oci8.events 为 On
时,建议将 oci8.ping_interval 设置为 -1 以禁用 ping,因为启用 FAN 事件可以提供对因服务中断而变得无效的空闲连接的主动连接管理。
要在 PHP OCI8 中启用 FAN 支持,请使用 Oracle 10gR2 或更高版本的库构建 PHP OCI8,然后按照以下步骤操作
SQL> execute dbms_service.modify_service( SERVICE_NAME => 'sales', AQ_HA_NOTIFICATIONS => TRUE);
oci8.events = On