【问题标题】:How to close an oracle db connection from php on an apache server? I mean close instantly如何从 apache 服务器上的 php 关闭 oracle db 连接?我的意思是立即关闭
【发布时间】:2011-02-07 21:43:05
【问题描述】:

通常关闭连接只是由oci_close($connection); 完成,或者在更糟糕的情况下,当 php 脚本结束连接时会消失。

然而,就我而言,我面临不同的行为。

如果我访问使用 PHP 5.2.8、Apache 2.2.11 和 oci8 1.2.5 的应用程序,连接会在几分钟内保持

实际上似乎是:如果我启动netstat -b,我会看到进程httpd.exe 在一段时间内(几分钟)在数据库的URL 上保持ESTABLISHED 状态。

有人能告诉我这种行为吗?

附:我不使用持久连接。

附言这里问的是用于连接和关闭的代码(这是一个遗留应用程序):

connection:调用连接相关代码为$connection = @ocilogon ( "$username", "$password", "$database" );的函数

关闭:我们开发的每个页面的责任,但通常是oci_close($connection)

【问题讨论】:

  • 您能否更新您的问题以显示您用于建立和关闭数据库连接的代码?
  • @Dougman 问题相应更新

标签: php oracle apache


【解决方案1】:

来自oci_connect() 这里的文档(ocilogon() 调用相同的函数):

http://www.php.net/manual/en/oci8.connection.php

这意味着您可以通过oci_close() 显式关闭连接,或者在呈现页面结束时自动关闭连接。我想如果你没有明确关闭它可能需要一些时间才能超时。是否有可能是某些没有 oci_close() 调用的页面导致您看到打开的连接?

如果您创建一个仅包含oci_connect()oci_close() 的独立页面,然后多次执行,您是否会看到连接数随着您执行该页面的次数而直接增加,并且在最终返回之前一直保持不变下来了吗?

另外,您在查看什么指标来确定连接是否保持打开状态?

如果您使用的是更高版本,那么它可能是 Oracle 11g 数据库驻留连接池,但在您当前使用的版本中不存在。

【讨论】:

  • > 您在看什么指标来查看连接是否保持打开状态?我从终端使用netstat查看我的apache进程(httpd.exe)之间的连接保持与数据库URL的连接关于最终超时,你知道我该如何设置它吗?
  • @Valentin Jacquemin:这实际上只是在网络级别向您展示。您需要直接查询数据库以查看它是否真的是数据库意义上的开放连接。这些是您应该担心的连接类型。您将查询 v$session 表以显示这些连接。
  • 是的,我期待这个建议,不幸的是我没有查看 v$session 表的权限。
  • @Valentin Jacquemin:你真的需要能够获得这些信息才能知道发生了什么。您可能会发现您实际上并没有打开 Oracle 连接。我想您可以采取相反的方法,并编写一个脚本来不断刷新您的页面,看看您是否可以破坏最大连接数。如果这从未发生过,那么您就没有保持 Oracle 连接处于打开状态。
  • @Dougman 实际上它发生了 :) 我收到一个 oracle 错误,说已达到最大进程数。这就是我的问题的原因。
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
相关资源
最近更新 更多