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 connect 调用将建立新的连接,而脚本不会感知到任何服务中断。
当 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