如何将Siebel 7从DB2 UDB V8迁移到DB2 9
本文将引领您完成 Siebel 7 数据库环境从 DB2® UDB Version 8 到 DB2 9 的升级。您将了解一些必要的步骤以及完成迁移过程所需的工具和命令。
本文首先介绍了 DB2 9 中的一些新特性,并展示了 Siebel 应用程序如何利用这些特性。本文详述了 UNIX® 和 Windows® 操作系统在预迁移和实际迁移过程中的工作,最后介绍完成迁移后需要执行的步骤。
DB2 9中的新特性
◆pureXM™L:DB2 9 天生就支持 XML 数据存储。这使得可以将格式良好的 XML 文档以其自身固有的分层格式存储在 Siebel 表列中。XML 数据存储为 XML 类型而不是将其存储为文本。因此,您可以使用 XQuery、SQL 或者结合使用二者来有效地搜索和检索 XML 数据。
◆自动化管理特性:自动化管理特性将简化 Siebel/DB2 DBA 的管理任务。它包括自调优内存管理(Self Tuning Memory Management,STMM)。STMM 通过持续更新配置参数(数据库参数和数据库管理器参数)、调整缓冲池大小以及动态确定数据库使用的内存总量,从而减少或消除配置 DB2 服务器的工作。
增强了数据库安全性:基于标签的访问控制(Label Based Access Control,LBAC)是一种新的安全特性,它使您可以在行和列的级别上控制数据访问。为此,添加了一种新的安全管理员(SECADM)授权级别,它将收集一些与安全相关的权限。根据列表或组的结构、位置或从属关系,LBAC 可用于增强对用户可见记录的 Siebel 访问控制。
◆弹性增强:Siebel/DB2 DBA 可以立即使用 DB2 9 中的一些增强来添加弹性。其中一些特性包括:
能够重新开始中断的恢复操作,这些操作能够在进行数据库恢复时节省宝贵的时间和工作。
支持使用从已有备份映像中自动生成的脚本执行重定向恢复操作。
能够从表空间备份映���中重新构建数据库。
◆更多附加的有用特性:很多特性对 Siebel 应用程序都非常有用。其中一些特性与性能和可伸缩性有关,例如数据行压缩,而另外一些则与可管理性有关,例如复制数据库模式的功能,以及 ALTER TABLE 语句增强。
本文将展示如何启用 DB2 9 的一些特性,例如自调优内存管理和压缩,这些都是完成迁移后的工作。
预迁移步骤
预迁移步骤非常重要,是实现成功迁移的关键。在本节中,实际上将执行三项任务:
1.在开始迁移之前,搜集有关当前数据库和环境的最重要信息(给出了一些有用的脚本和示例)。这样一来,如果在迁移过程中出现了问题,您可以很轻易地恢复到迁移前的状态。同样,如果您需要使用这些信息并且这些参数值在迁移后还有用的话,您还可以应用它们。
2.查看您的机器是否兼容以及是否能够安全地安装和使用 DB2 9。
3.停止 DB2 服务器,准备进行迁移。
下面给出了这些任务的细节:
1.运行数据库的脱机备份。 Check if there is any application or user connected to the database by issuing
db2 list application
Disconnect any user or application before issuing the offline backup by running
db2 force application all
Issue a backup either to TSM, to a directory or a device
db2 backup database dbname use TSM To TSM
db2 backup database dbname to directory/device To a directory or to a device
2.将数据库配置信息保存为 db cfg、dbm cfg 和数据行计数。
对数据库中的所有表格进行行计数并保存结果。下面的脚本将帮助实现此操作。
对数据库运行 db2 get db cfg for dbname 并保存结果。
运行 db2 get dbm cfg 并保存结果。
运行 db2set -all 并保存结果。
对数据库运行 db2 list tablespaces show detail 和 db2 list packages for all show detail 并保存结果。
运行 db2look -d $dbname -e -a -m -o $outputfilename。
运行 db2dart dbname /DB /V Y /RPT . /RPTF E 并保存结果。运行这个命令将占用一些时间。
清单 1. 在 UNIX 平台上实现表行计数的示例。脚本名:get_table_count.sh
if [ $# -lt 1 ]; then
echo "This script need a database name as a parameter "
echo
echo "Example $0 dbname "
exit 1
fi
db2 "connect to $1 "
if [ $? -ne 0 ]; then
echo "ERROR connecting to the database $1"
echo;echo
exit 1
fi
db2 "select tabname from syscat.tables where tabschema = 'SIEBEL' order by 1" > x
export rownums=`cat x | wc -l`
export headrows=$(($rownums-3))
export tailrows=$(($headrows-3))
cat x | head -$headrows | tail -$tailrows > y
echo; echo
while read tabname
do
db2 "select count(*) from siebel.$tabname " > x1
rownums=`cat x1 | wc -l`
if [ $rownums -gt 3 ]; then
headrows=$(($rownums-3))
tailrows=$(($headrows-3))
cat x1 | head -$headrows | tail -$tailrows > y1
nb=$(cat y1)
else
nb=0
fi
echo "--------------- Number of rows in table ... $tabname $nb"
echo
done < y
rm x y x1 y1
db2 terminate
如果 Siebel 模式名不是 SIEBEL,则应该对脚本和循环中的第一个查询做出相应地修改。
清单 2. 在迁移前获得所有 db 信息的脚本。脚本名:get_db_info.sh
if [ $# -lt 1 ]; then
echo "This script need a database name as a parameter "
echo
echo "Example $0 dbname "
echo;echo
exit 1
fi
export db_name=$1
date
echo;echo "-------------- Table counts"
nohup get_table_count.sh $db_name | tee table_count.log
db2 connect to $db_name
echo;echo "-------------- Tablespace lists with detail"
db2 list tablespaces show detail | tee tbspace_detail.log
echo;echo "-------------- Package lists with detail"
db2 list packages show detail | tee package_detail.log
echo;echo "-------------- DBM CFG"
db2 get dbm cfg | tee dbmcfg.log
echo;echo "-------------- DB CFG"
db2 get db cfg for $db_name | tee dbcfg.log
echo;echo "-------------- DB2 SET"
db2set -all | tee db2set.log
echo;echo "-------------- db2look for all db objects"
db2look -d $db_name -e -a -m -o db2look.log
db2 terminate
echo;echo "-------------- db2dart on all database. This will take time"
db2 force application all
db2dart $db_name /DB /V Y /RPT . /RPTF E
date
查看磁盘空间需求。数据库迁移需要额外的磁盘空间,如下所示:
SQLSPCS.1 和 SQLSPCS.2 文件包含表空间信息,并且在迁移过程中会增长为初始大小的四倍。如果这两个文件的总大小是 512KB,那您至少需要 2MB 的自由空间。
确保系统目录和系统临时表空间中具有足够的自由空间。然而,磁盘空间会发生变化,建议您应用下面的原则。将 SYSCATSPACE 和 TEMPSPACE1(这里是默认名称,可以改变)的总大小增加为目前的两倍。对于 SMS 表空间,增加容器文件的大小,而对于 DMS,则要增加额外的容器文件(这将使数据重新进行平衡)。只有进行迁移操作时才需要额外的空间,因此成功完成迁移后可以减少表空间的大小。以下的示例基于 AIX 和 Siebel 77 DB2 数据库,展示了如何确定 SYSCATSPACE 所占的空间大小。
$ db2 list tablespaces show detail
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = All permanent data. Regular table space.
State = 0x0000
Detailed explanation:
Normal
Total pages = 229882
Useable pages = 229882
Used pages = 229882
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
229882 pages x 4096 bytes per page which is about 898 MB.
Next, you need to find out where the containers for this tablespace are located.
$ db2 list tablespace containers for 0
Tablespace Containers for Tablespace 0
Container ID = 0
Name = /V9_FS/sia77u_v9/catalog
Type = Path
You now need to find out if the free space is at least twice of the used space.
$ df -k /V9_FS
Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
/dev/V9_LV 70909952 67149124 6% 704 1% /V9_FS
You can see that you have 67GB free space in this file system, which is enough
将 logfilsiz、logprimary 和 logsecond 的值增加为当前大小的两倍。迁移在单个事务中改变系统目录对象,并且这些更改需要足够的日志空间来包含该事务。如果空间不够的话,该事务将回滚并且也不能成功实现迁移。更多详细信息,请参考 “Increasing table space and log file sizes before migration”。
只针对 Linux:将裸设备(raw device)改为块设备(block device)。更多详细信息,请参考 “Changing raw devices to block devices (Linux)”。
发出以下命令停止 DB2 服务器: