一个关于drcp的文档
使用 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 连接类的名称。该用户选择的名称允许不同应用程序的池化服务器间的逻辑划分:
最后,通过向您的 oci_connect() 连接字符串中添加关键字 POOLED 使您的 PHP 应用程序使用 DRCP。虽然不是必需的,但要实现最大可扩展性,我们推荐您用 oci_pconnect() 函数替换 oci_connect() 函数。修改为使用 DRCP (drcp.php) 之前的示例如下:
table { border-collapse: collapse; }
td { border: solid 1px black; padding: 3px; }
Cities
// 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 '
while ($row = oci_fetch_object($stmt)) {
echo '
';echo '
' . $row→CITY_ID . '';echo '
' . $row→CITY_NAME . '';echo '
';$count++;
}
echo '
';
echo $count . ' record(s) found.';
// close connection
oci_free_statement($stmt);
oci_close($db);
?>
唯一的更改是连接调用。无需更改应用程序。您还可以指定服务器连接通过 $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 上都不受支持。