这些函数的行为受 php.ini 中的设置影响。
名称 | 默认值 | 可更改 | 变更日志 |
---|---|---|---|
oci8.connection_class | "" | INI_ALL |
|
oci8.default_prefetch | "100" | INI_SYSTEM |
|
oci8.events | Off | INI_SYSTEM |
|
oci8.max_persistent | "-1" | INI_SYSTEM |
|
oci8.old_oci_close_semantics | Off | INI_SYSTEM |
从 PHP 8.1.0 开始已弃用。 |
oci8.persistent_timeout | "-1" | INI_SYSTEM |
|
oci8.ping_interval | "60" | INI_SYSTEM |
|
oci8.prefetch_lob_size | "0" | INI_SYSTEM |
从 PECL OCI8 3.2 开始可用。 |
oci8.privileged_connect | Off | INI_SYSTEM |
|
oci8.statement_cache_size | "20" | INI_SYSTEM |
以下是对配置指令的简要说明。
oci8.connection_class
字符串当使用 Oracle 数据库驻留连接池 (DRCP) 时,此用户定义的文本应始终设置。它允许对 DRCP 连接池进行子分区,从而使应用程序中的 OCI8 持久连接可以重用来自先前 PHP 脚本的数据库会话,从而提高可扩展性。当应用程序使用之前与不同连接类一起使用的数据库池化进程时,会话设置(例如默认的 Oracle 日期格式)将被重置。这可以防止不同应用程序之间意外共享信息。
可以在运行时使用 ini_set() 在连接之前设置该值。
要使用 DRCP,OCI8 必须与 Oracle 11g(或更高版本)库链接,并且数据库必须是 Oracle 11g(或更高版本)。DRCP 连接池必须在数据库中启用,所有运行同一应用程序的 Web 服务器的 oci8.connection_class
应设置为相同的字符串,并且 OCI8 连接字符串必须指定使用池化服务器。应用程序应使用持久连接。
oci8.default_prefetch
整数此选项设置每次从数据库发出低级数据请求时自动获取和缓存的额外行的默认数量。将值设置为 0
将关闭预取。
预取值不会改变诸如 oci_fetch_array() 之类的函数返回给用户的行数;行的预取和缓存是在 OCI8 内部处理的。
可以在语句执行之前使用 oci_set_prefetch() 为每个语句设置该值。
当使用 Oracle 数据库 12c(或更高版本)时,PHP 设置的预取值可以被 Oracle 的客户端 oraaccess.xml
配置文件覆盖。有关更多详细信息,请参考 Oracle 文档。
注意: 更大的预取可以提高性能,但会增加一些内存使用。对于返回大量数据的查询,性能提升可能很大。
oci8.events
布尔值使用 On
允许 PHP 接收数据库快速应用程序通知 (FAN) 事件。
没有 FAN 时,当数据库实例或机器节点意外故障时,PHP 应用程序可能会被阻塞,等待数据库响应,直到 TCP 超时过期。使用 FAN 事件,PHP 应用程序会迅速收到影响其已建立数据库连接的故障通知。OCI8 扩展将清除不可用的连接,这些连接位于持久连接缓存中。
当使用 On
时,数据库也必须配置为发布 FAN 事件。
当 OCI8 与 Oracle 10gR2(或更高版本)库链接并连接到 Oracle 数据库 10gR2(或更高版本)时,可以使用 FAN 支持。
oci8.max_persistent
整数每个 PHP 进程中最大的持久 OCI8 连接数。将此选项设置为 -1 表示没有限制。
oci8.old_oci_close_semantics
布尔值此选项控制 oci_close() 的行为。启用它意味着 oci_close() 不会执行任何操作;连接不会在脚本结束之前关闭。这仅是为了向后兼容。如果您发现需要启用此设置,则强烈建议您调整应用程序中的 oci_close() 调用,而不是启用此选项。
oci8.persistent_timeout
整数PHP 进程允许保持空闲持久连接打开的最长时间(以秒为单位)。将此选项设置为 -1 表示空闲持久连接将保留,直到 PHP 进程终止或使用 oci_close() 明确关闭连接。
注意: 在 PHP 中,空闲资源的过期不是基于警报的。它发生在 PHP 完成脚本处理并检查资源的最后使用时间戳时。因此,存在一个悖论,即空闲连接只能在 PHP 进程中存在一些活动(尽管不一定是与 OCI8 相关的活动)时才会关闭。如果存在多个 PHP 进程,则每个进程必须单独被激活才能触发其空闲资源的过期。在 Oracle 11g 中引入数据库驻留连接池 (DRCP) 解决了
oci8.max_persistent
和oci8.persistent_timeout
以前尝试克服的内存和资源问题。
oci8.ping_interval
整数在 oci_pconnect() 期间发出 ping 之前必须经过的秒数。ping 可确保数据库连接有效。当设置为 0 时,每次调用 oci_pconnect() 时都会对持久连接进行 ping。要完全禁用 ping,请将此选项设置为 -1。
注意: 禁用 ping 允许 oci_pconnect() 以最高效率运行,但 PHP 可能无法检测到不可用的连接,例如由网络中断引起的连接,或者如果 Oracle 数据库在 PHP 连接后已关闭,直到连接在脚本中稍后使用。有关更多信息,请参考 oci_pconnect() 文档。
oci8.prefetch_lob_size
整数这是一个调整参数,会影响 LOB 数据的内部缓冲。增加此值可以通过减少 PHP 和数据库之间的往返次数来提高获取较小 LOB 的性能。内存使用量将发生变化。
该值会影响以 OCILob 实例返回的 LOB,以及使用 OCI_RETURN_LOBS
返回的 LOB。
可以在语句执行之前使用 oci_set_prefetch_lob() 为每个语句设置该值。
注意: 与 Oracle 数据库 12.2 或更高版本一起使用。
oci8.privileged_connect
布尔值此选项允许连接使用特权外部凭据 OCI_SYSOPER
或 OCI_SYSDBA
。
注意: 将此
On
设置为可以允许运行具有适当 OS 用户权限的 Web 服务器上的脚本以特权数据库用户身份连接,而无需数据库密码。这可能存在安全风险。
oci8.statement_cache_size
整数此选项启用语句缓存,并指定要缓存的语句数量。要禁用语句缓存,只需将此选项设置为 0。
语句缓存无需将语句文本传输到数据库,也无需将有关语句的任何元数据传输回 PHP。这可以在应用程序(在连接的生命周期内重用语句)中显着提高整体系统性能。一些额外的数据库“游标”可能会保持打开状态,假设语句将被重用。
将此值设置为应用程序使用的语句工作集的大小。设置过小的值会导致语句在重用之前从缓存中刷新。
此选项最适用于持久连接。
当使用 Oracle 数据库 12c(或更高版本)时,此值可以被 Oracle 的客户端 oraaccess.xml
文件覆盖并自动调整。有关更多详细信息,请参考 Oracle 文档。