在 Linux 上安装 PHP 和 Oracle TimesTen In-Memory Database
作者:Christopher Jones
2012 年 4 月发布
本文介绍如何在 Oracle Linux 6 上安装并使用 PHP 脚本语言和 Oracle TimesTen In-Memory Database。文中介绍了 PHP OCI8 扩展,它既适用于 Oracle Database 也适用于 TimesTen Database。
市场营销描述最好地概述了 TimesTen:
Oracle TimesTen In-Memory Database (TimesTen) 是一个功能完备、经过内存优化的关系数据库,它具有持久性和可恢复性。它为应用程序提供了即时响应和极高的吞吐能力,可以满足数据库密集型应用程序的需要。TimesTen 部署在应用程序层,运行在完全装入物理内存 (RAM) 的数据库上。应用程序使用标准 SQL 接口访问 TimesTen 数据库。对于现有应用程序数据存放于 Oracle Database 中的客户,TimesTen 作为内存中缓存数据库来部署,可自动完成 TimesTen 与 Oracle Database 之间的数据同步。
大多数标准 PHP OCI8 特性也适用于 TimesTen,但 TimesTen 是不同于 Oracle Database 的另外一种数据库,因此对于有些 PHP OCI8 特性,不能期望它们按原来的方式工作,它们也许根本不能工作。特别是 PHP OCI8 提供的 LOB 支持不可用,尽管 TimesTen 11g 第 2 版现在允许存储 LOB。集合支持不可用,您在处理绑定时可能会遇到一些小问题,尤其在代码编得不怎么好时。错误消息有可能不同。如果将现有应用程序迁移到 TimesTen,那么彻底进行测试也很重要,因为 TimesTen 并非支持 Oracle Database 的全部 SQL、PL/SQL 和数据库特性。
安装 TimesTen
按照 Oracle TimesTen In-Memory Database 11g 第 2 版 (11.2.2) 安装指南 安装 TimesTen。下面总结了使用 64 位 Oracle Linux 6.2 时的安装步骤:
- 以 root 身份创建一个新的软件所有者并设置口令:
useradd -m -c "TimesTen Owner" -d /home/ttadmin -s /bin/bash ttadmin chmod 755 /home/ttadmin passwd ttadmin
- 创建新的
timesten组并向其中添加 TimesTen 管理员和 Apache 用户:groupadd timesten usermod -a -G timesten ttadmin usermod -a -G timesten apache
- 创建实例注册表:
mkdir /etc/TimesTen chgrp ttadmin /etc/TimesTen chmod 770 /etc/TimesTen/
- 以
ttadmin用户身份登录。 - 从 TimesTen 下载页面下载“适用于 Linux x86(64 位)的 TimesTen 11.2.2.2.0”。
- 在终端上,解压缩文件
tar -xf timesten112220.linux8664.tar.gz
- 安装 TimesTen:
cd linux8664 ./setup.sh
除了 有关组和 QuickStart 的问题之外,均接受默认值。提示回答如下:- Instance name:
tt1122 - 安装“Client/Sever and Data manager”
- 安装到
/home/ttadmin - 创建后台程序目录
/home/ttadmin/TimesTen/tt1122/info - 后台程序日志位于
/home/ttadmin/TimesTen/tt1122/info - TimesTen 后台程序的默认端口:
53396 - 不要将访问限制于
ttadmin组。(这不是默认选项)。将其限制于timesten组。 - 启用 PL/SQL
- 跳过
TNS_ADMIN,保留不设置 - TimesTen 服务器监听
53397 - Install the QuickStart and Documentation:yes(默认情况下不安装。)
- 在
/home/ttadmin/TimesTen/tt1122/info中创建 DemoDataStore - 不对 Oracle Clusterware 使用 Replication
- Instance name:
- 以 root 身份,按照屏幕指示的步骤将启动脚本安装到
/etc/init.d中:cd /home/ttadmin/TimesTen/tt1122/bin ./setuproot -install
TimesTen 现在开始运行。
管理 TimesTen
/home/ttadmin/TimesTen/tt1122/quickstart/ttquickstartenv.sh 始终是一种在访问示例数据库之前设置 Oracle 环境变量的便捷方式。
通过设置环境和运行 ttstatus 命令检查实例的状态:
source /home/ttadmin/TimesTen/tt1122/quickstart/ttquickstartenv.sh
ttstatus
结果应为:
[ttadmin@localhost linux8664]$ ttstatus TimesTen status report as of Tue Apr 17 14:52:03 2012 Daemon pid 23629 port 53396 instance tt1122 TimesTen server pid 23638 started on port 53397 ------------------------------------------------------------------------ Accessible by group timesten End of report
有一个命令行工具可用来访问实例以运行即席查询:
ttisql "dsn=sampledb_1122;uid=appuser"
口令是 oracle。
如果您需要手动停止或启动此 TimesTen 实例,请以 root 身份登录并运行:
service tt_tt1122 stop
或者
service tt_tt1122 start
如果您想删除该 TimesTen 实例,请先停止它,然后运行:
cd /home/ttadmin TimesTen/tt1122/bin/setup.sh -uninstall
创建 TimesTen 示例数据库
创建示例数据库:
- 运行创建脚本:
cd /home/ttadmin/TimesTen/tt1122/quickstart/sample_scripts/createdb ./build_sampledb.sh
- 提示输入
adm、appuser和xlauser用户口令时,选择并记住口令。
安装 Apache 和 PHP
安装 Apache 和 PHP:
- 以 root 身份,使用 webserver 和 PHP 的捆绑程序包:
yum install httpd php php-devel
- 编辑
/etc/php.ini并使用相应的时区添加时区设置,例如:date.timezone = America/Los_Angeles
- 安装 OCI8 扩展:
从 PECL 下载最新 OCI8 扩展并进行解压缩。然后:
tar -xf oci8-1.4.7.tgz cd oci8-1.4.7 phpize ./configure --with-oci8=instantclient,/home/ttadmin/TimesTen/tt1122/ttoracle_home/instantclient_11_2 make make install
编辑/etc/php.ini并添加:extension=oci8.so
- 配置 Apache。在
/etc/sysconfig/httpd中设置:export TNS_ADMIN=/home/ttadmin/TimesTen/tt1122/network/admin/samples export LD_LIBRARY_PATH=/home/ttadmin/TimesTen/tt1122/lib:/home/ttadmin/TimesTen/tt1122/ttoracle_home/instantclient_11_2
管理 Apache
如果您需要手动停止和重新启动 Apache,请使用 httpd 服务。由于安装 OCI8 时刚刚更改了配置,现在重新启动它:
service httpd restart
通过创建 /var/www/html/pi.php 文件测试 PHP:
<?php phpinfo(); ?>
在浏览器中使用 http://localhost/pi.php 进行加载。
您应得到有关 PHP 的配置信息的页面。检查存在 OCI8 部分。可以通过编辑 /etc/php.ini 并重新启动 Apache 更改配置选项。
使用 PHP OCI8 连接到 TimesTen
前面给出的 ttisql 示例显示了示例凭证和连接字符串。可以在 PHP 脚本中使用这些来连接到 TimesTen。创建脚本/var/www/html/oci8.php:
<?php
$c = oci_connect("appuser", "oracle", "sampledb_1122");
if (!$c) {
$m = oci_error();
trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}
$s = oci_parse($c, "select * from emp");
if (!$s) {
$m = oci_error($c);
trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
$r = oci_execute($s);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}
echo "<table border='1'>\n";
while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item!==null?htmlentities($item, ENT_QUOTES):" ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
使用 http://localhost/oci8.php 运行该脚本。查询结果将显示在表中。
如果您得到的是空白屏幕或出现问题,请检查 /var/logs/httpd/error_log 中的 Apache 日志。确保 SELinux 处于 Permissive 模式:
setenforce permissive service httpd restart
配置 TimesTen
如果您使用的是命令行脚本或非永久性连接,则某些情况下,断开与 TimesTen 的连接可能较慢,这是因为在关闭与数据库的最后一个连接时要从 RAM 卸载数据库。可以通过使用 ttRamPolicySet 设置 RAM 策略来解决这一问题。对于 TimesTen 实例,此设置是持久性的。以下代码将最后一个应用程序断开连接之后数据库在 RAM 中保存的时间设置为 5 秒,这会延迟关闭数据库,从而让 PHP 应用程序能够毫无延迟地关闭连接:
$s = oci_parse($cc, "call ttRamPolicySet('inUse', 5)");
oci_execute($s);
总结
PHP OCI8 扩展既适用于 Oracle Database 也适用于 TimesTen Database。许多基本脚本无需更改即可用于这两种数据库。但并非所有 PHP OCI8 或 Oracle Database 特性在 Oracle TimesTen 中都受到支持,因此建议小心测试应用程序。
在 PHP 和 Oracle 秘笈 中可以找到有关 OCI8 扩展的通用信息。
本文介绍如何在Oracle Linux 6上安装并使用PHP和Oracle TimesTen In-Memory Database,包括安装步骤、配置说明及示例脚本。
8940

被折叠的 条评论
为什么被折叠?



