5.处理数据库表中的自增字段
对于需要加载的含有自增字段的表,即该表的 ixf 数据文件中有自增列的值, 可以在 load 命令中加入如下参数控制自增字段值:
1). modified by identityignore :加载的数据文件中有自增字段值,load 时忽略数据文件中自增字段值 ;
2). modified by identitymissing :加载的数据文件中没有自增字段值,load 时自动生成自增字段值 ;
3). modified by identityoverride :加载的数据文件中有自增字段值,load 时使用数据文件中的自增字段值 。
为了使目标数据库中含有自增字段的表中数据与源数据库中的数据保持一致,本文实例中选择使用 modified by identityoverride 参数,在导入数据时使用数据文件中的自增字段值。读者可以根据不同情况选择适当的控制参数。
首先,在 srcdb1_tables.ddl 文件中查找所有包自增字段的表名 ( 含有 GENERATED ALWAYS AS IDENTITY 字段的表 ),然后在 srcdb1_load.sql 中将 modified by identityoverride 语句片段插入到这些含有自增字段的表所对应的 load 命令行中。
清单8. load 脚本中自增字段处理
db2 load from test.ixf of ixf modified by identityoverride insert into TEST;
6.执行导出脚本
执行导出脚本,导出所有表的数据 。
# db2 -tvf srcdb1_export.sql
导出的表数据以 ixf 格式存放于当前路径下。
7.保存脚本和数据文件
将所有 DDL 脚本以及数据文件 *.ixf 复制到目标系统所在站点。
LINUX 系统上的操作
1.通过命令行处理器(CLP)创建实例 SRCDB1:
# db2icrt SRCDB1
2.使用 CREATE DATABASE 命令创建数据库 SRCDB1,创建必要的表空间及配置必要的数据库参数。
# db2 create database SRCDB1
3.连接到数据库 SRCDB1,执行 srcdb1_tables.ddl 脚本创建缓冲池,表空间,UDF,表以及 Index,Sequence,视图等数据库对象。
# db2 connect to srcdb1
# db2 -tvf srcdb1_tables.ddl
4.进入到放置 .ixf 数据文件的目录,执行下面的命令导入表数据。
# db2 -tvf srcdb1_load.sql
5.使用 srcdb1_foriegnkeys.ddl,srcdb1_triggers.ddl ,srcdb1_procedures.ddl 脚本文件创建外键约束,触发器和存储过程。
# db2 -tvf srcdb1_foriegnkeys.ddl
# db2 -tvf srcdb1_triggers.ddl
# db2 -tvf srcdb1_procedures.ddl
成功完成上述步骤后,数据库的迁移工作基本完成。
Apache 服务器与 php 的安装和配置
Apache 服务器的安装和配置
Apache HTTP 服务器是一个模块化的软件,管理员可以通过选择服务器中包含的模块进行功能增减。模块可以在编译时被静态包含进httpd二进制文件,也可以编译成独立于httpd二进制文件的动态共享对象 (DSO)。DSO 模块可以与服务器一起编译,也可以用 Apache 扩展工具 (apxs) 单独编译。动态加载的方式相比静态加载具有更高的灵活性。使用动态载入特性,Apache 服务器必须以动态共享对象(DSO,Dynamic Shared Object)的方式编译。Apache 对 DSO 的支持,是基于一个叫 mod_so 的模块来实现的,为支持动态加载方式,这个模块必须预先被静态编译到内核中。因此可以通过 mod_so 模块检测已安装的 Apache 是否支持 DSO:
清单9. mod_so 模块检测
# $APACHEHOME/bin/httpd –l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
如果在列出的模块名中有 mod_so.c,则说明安装的 Apache 已经支持 DSO,否则需要重新编译 Apache。Apache 的安装和配置过程十分简单,如下所示:
1.下载 httpd-2.0.54.tar.gz(http://httpd.apache.org/),并将其解压到制定目录
# tar zxvf httpd-2.0.54.tar.gz && cd httpd-2.0.54
2.编译安装 apache
# ./configure --prefix=/usr/local/apache2 --enable-module=so
-- prefix 指定 apache 的安装路径
--enable-module=so 将 so 模块(mod_so)静态编译进 apache 服务器的内核,以支持 DSO 模式
# make && make install
3. 启动 apache
# ln -s /usr/local/apache2/bin/apachectl /sbin/apachectl
# apachectl start
php 的安装和配置
在 php 的安装和配置过程中,有两个方面需要注意,首先是 php 与 apache http server 的结合,其次是 php 与 db2 数据源的连接。
在 Apache 环境下安装 PHP 的时候,有三种安装模式可供选择:静态模块、动态模块(DSO)和 CGI。建议以 DSO 模式安装,这种模式的维护和升级都相对简单,可以在无需重新编译 Apache 的条件下,根据需求动态增加新功能模块。当然,这样做也会带来一些运行效率上的下降,Apache 服务器在启动时会慢约 20%。
PHP 连接 DB2 数据源同样有三种方式 : unified ODBC driver、IBM_DB2 和 PDO(php data object)。
◆unified ODBC driver 是最早的 PHP 访问数据库的扩展模块之一。从 DB2 v7.2 开始,unified ODBC driver 就支持对其的访问。对所有支持 ODBC 的数据库,unified ODBC driver 提供了统一的数据访问接口。为了保证接口的一般性,unified ODBC driver 并未对不同类型的数据库做特定的优化。
◆IBM_DB2 是由 IBM 开发和维护的与 DB2 数据源交互的扩展模块,它遵守开源协议。对基于 DB2 UDB 和 php 4.x 的应用来说,IBM_DB2 是最优的选择,因为它针对 DB2 UDB 进行了优化,同时避免了一些使用 unified ODBC driver 时可能存在的兼容性问题。不过,IBM_DB2 只支持 DB2 v8.2.2 或更高版本。
◆PDO 则是 php 5.x 中即将支持的新的数据库访问方式。本文中,由于源数据库与目标数据库的版本均为 DB2 v8.1,并且源环境中采用 unified ODBC driver 的方式,为了保持环境配置的一致性,仍然选择 unified ODBC driver 作为 php 与数据源的访问接口。
PHP 的安装与配置过程具体如下:
1.下载并解压 php-4.4.4.tar.gz(http://www.php.net/)
# tar zxvf php-4.4.4.tar.gz
# cd php-4.4.4
2.配置编译 php 源代码
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs --without-mysql --with-ibm-db2=/home/reportdb/sqllib
--prefix 指定 php 的安装路径
--with-apxs2 指定 apxs 程序的路径 (apxs 是一个 perl 脚本,它可以脱离 apache 的源码将 php 模块编译成 DSO 文件 )
--with-ibm-db2 指定 unified ODBC driver 作为 php 与数据源的访问接口,并指定 DB2 的实例安装目录。
--without-mysql 忽略 mysql 数据库缺省的安装配置
#cp php.ini-dist /usr/local/lib
将 php 安装文件中的 php.ini-dist 拷贝到 /usr/local/lib 下作为 php 的配置文件。
# make && make install
# cp php.ini-dist /usr/local/lib/php.ini
3.编辑 /usr/local/apache2/conf/httpd.conf 文件,做如下修改:
设置 html 文件主目录:用于存放网站所需 web 文件的主目录
DocumentRoot "/home/web/www/"
设置 apache 的默认文件名的次序: apache 将按照由前至后的顺序在当前路径下查找其所支持的默认主页文件
DirectoryIndex index.php index.html.var index.cgi index.html
添加 php 解释文件后缀:对于所有需要被 PHP 解释的文件类型,需要将后缀添加至 AddType 配置项
AddType application/x-httpd-php .php .inc
加载 PHP 模块:加载模块目录 modules 下的库 libphp4.so,并将模块结构名 php4_module 添加到活动模块列表中
LoadModule php4_module modules/libphp4.so
4.编辑配置文件 /usr/local/apache2/bin/apachectl :
为保证与 DB2 数据库的连通,启动 Apache 服务时,需要同时初始化 DB2 客户机实例环境。创建 DB2 实例时,DB2 会自动生成 shell 脚本用于初始化所需的 DB2 实例环境,只需直接调用即可:
if test -f /home/reportdb/sqllib/db2profile; then
. /home/reportdb/sqllib/db2profile
fi
5.然后,重新启动 Apache 服务器以继承上面的配置更改。
# apachectl restart
6.编写 PHP 的测试文件 test.php,内容如下:
echo phpinfo();
?>
将其存放在 apache 的 html 文件主目录 /home/web/www 下,通过浏览器访问该网页,若能正常访问(如下图所示),则配置工作全部完成。
结束语
本文主要涵盖了一个基于 php 和 DB2 UDB 的应用系统的跨平台移植过程,详细介绍了 DB2 数据库系统的跨平台迁移以及 Apache 服务器与 php 应用系统的安装和配置过程。基于实践经验,为 DB2 数据库系统的跨平台迁移问题提供了一个可行的解决方案。对于移植过程中可能出现的问题,本文也给予详细的描述并提供相应的解决方案。虽然本文所涉及的只是从 AIX 系统到 LINUX 系统的应用系统移植过程,读者亦可以参考具体的移植过程,将其应用于其它平台之上。