ITPub博客

首页 > 数据库 > Oracle > php oci8 oracle连接池(11g) drcp

php oci8 oracle连接池(11g) drcp

Oracle 作者:hljhrbsjf 时间:2016-06-06 14:08:17 0 删除 编辑


一个关于drcp的文档http://www.docin.com/p-5599651.html

使用 Oracle 数据库 11g 连接池

Oracle 数据库 11g 包含一个专门针对需要高可扩展性的应用程序的新特性:数据库驻留连接池 (DRCP)。通过 DRCP,我们可以在不同应用程序进程间共享数据库连接,从而更高效地使用服务器资源并全面提升吞吐量。Zend Server 随附的 PHP OCI8 扩展(目前为 V1.3.5)包含对 DRCP 的即用支持,使开发人员可以立即在其 PHP 应用程序中使用该特性。有关 PHP 和 DRCP 的更多详细信息,请参阅此处

要在 Oracle 中启用 DRCP,登录到数据库服务器并启动连接池: 

shell> sqlplus / as sysdba
SQL*Plus: Release 11.1.0.6.0 - Production on Tue May 26 14:24:13 2009
Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Release 11.1.0.6.0 - Production

SQL> execute dbms_connection_pool.start_pool();
PL/SQL procedure successfully completed.

通过查询特定的 DBA_CPOOL_INFO 视图确认该池已启动:

SQL> SELECT CONNECTION_POOL, STATUS, MAXSIZE
  2  FROM DBA_CPOOL_INFO;

CONNECTION_POOL             STATUS		    MAXSIZE
----------------------------------------------------------
SYS_DEFAULT_CONNECTION_POOL ACTIVE		    40

然后,在 Zend Server 管理控制台的 Server Setup → Directives 页面,找到 OCI8 部分并在 oci8.connection_class 变量中设置 PHP 应用程序所使用的 DRCP 连接类的名称。该用户选择的名称允许不同应用程序的池化服务器间的逻辑划分:图 17 

最后,通过向您的 oci_connect() 连接字符串中添加关键字 POOLED 使您的 PHP 应用程序使用 DRCP。虽然不是必需的,但要实现最大可扩展性,我们推荐您用 oci_pconnect() 函数替换 oci_connect() 函数。修改为使用 DRCP (drcp.php) 之前的示例如下:

<html>
  <head>
    <style type="text/css">
    table { border-collapse: collapse; }
    td { border: solid 1px black; padding: 3px; }
    </style>
  </head>
  <body>
  <h2>Cities
  <?php
  // open database connection
  $db = oci_pconnect('john', 'doe', '//achilles/orcl:POOLED');
  if (!$db) {
    trigger_error('Unable to connect to database', E_USER_ERROR);
  }

  // formulate and parse query
  $sql = 'SELECT * FROM CITIES';
  $stmt = oci_parse($db, $sql);

  // execute query
  oci_execute($stmt);

  // iterate over result set
  $count = 0;
  echo '<table>';
  while ($row = oci_fetch_object($stmt)) {
    echo '<tr>';
    echo '<td>' . $row→CITY_ID . '</td>';
    echo '<td>' . $row→CITY_NAME . '</td>';
    echo '</tr>';
    $count++;
  }
  echo '</table><br/>';
  echo $count . ' record(s) found.';  

  // close connection
  oci_free_statement($stmt);
  oci_close($db);
  ?>
  </body>
</html>

唯一的更改是连接调用。无需更改应用程序。您还可以指定服务器连接通过 $ORACLE_HOME/network/admin/tnsnames.ora 文件进行汇集,如以下示例所示: 

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = achilles)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = POOLED)
      (SERVICE_NAME = orcl)
    )
  )

您的连接调用将如下所示:

 $db = oci_pconnect('john', 'doe', 'ORCL');

注意,DRCP 不能在尚无 Oracle 11g 库的 Mac OS X 中使用,而且在任何情况下,Zend Server 的商业版在 Mac OS X 上都不受支持。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/631872/viewspace-2114848/,如需转载,请注明出处,否则将追究法律责任。

下一篇: IIS与TOMCAT整合
请登录后发表评论 登录
全部评论
  • 博文量
    115
  • 访问量
    527059