分类: Sybase
2008-03-26 11:28:27
我公司原Sybase 数据库搭建在Sun Solaris2.6 操作系统上,需要移植到IBM AIX4.3.3操作系统上,并且Sybase数据库版本由11.9.2升级到新的12.5版本。由于是跨平台的数据库升级,无法使用Sybase公司提供的Sqlupgrade升级工具或Dump和Load方式进行系统的移植。因此,我们需要采用Bcp方式进行数据库系统移植,即新建Sybase12.5数据库系统,然后在新数据库中重建原数据库各种对象,再使用Bcp命令将数据拷贝到新数据库中。为了顺利的完成数据库移植工作,保障应用系统的正常运行,需要进行详细的规划,因此我们将整个数据库移植工作分成准备、实施、测试等三个阶段进行。
准备阶段
1、记录和分析现有环境信息
由于数据库移植涉及到服务器、操作系统、数据库设备、数据库各种对象、应用系统、用户等多种信息,需做详细记录,保证移植过程无任何遗漏,这是整个移植工作的基础。
(1)、记录Sun和IBM服务器的硬件配置,包括CPU、Memory、Disk、Network等配置信息;同时分析IBMAIX4.3.3操作系统相关信息,包括针对SYBASE12.5数据库的操作系统补丁、交换区尺寸以及相应系统内核配置等,保障移植后的服务器硬件和操作系统平台能满足新数据库的系统要求 。
(2)、详细列出原数据库设备、数据库、用户、应用等设置和使用信息。
(3)、记录原数据库运行服务器的运行性能信息,包括CPU和Memory利用率,Disk I/O、Network I/O情况;同时最好能记录重要应用系统典型存储过程、SQL队列执行的平均响应时间,将这些信息作为数据库运行性能基准数据,以便在移植后进行对比,从而发现移植前后系统性能方面的变化和问题。
2、创建原数据库对象脚本
由于采用Bcp方式进行数据移植,需要生成原数据库对象DDL脚本,以便在新数据库中重建各种对象。需要生成DDL脚本的数据库对象有表、视图、存储过程、索引、触发器、缺省、规则、自定义数据类型、约束等。
3、比较Sybase数据库版本之间的差异
由于Sybase数据库版本由11.9.2升级到12.5,需要比较两数据库版本主要的不同点,尤其新版本与旧系统不兼容的问题。
(1)、Sybase12.5增加了新的保留字,使用存储过程sp_checkreswords检查原数据库各对象是否和新增保留字有冲突,如有冲突,可以使用存储过程sp_rename或加双引号的方法解决该问题。
(2)、Sybase12.5的系统表syslogins比版本11.9.2多了两个字段,因此使用Bcp直接移植该表中的数据时会出错,可以采用建立中间临时表的办法予以解决。
(3)、Sybase12.5新版本要求sybsystemprocs 、tempdb数据库以及各用户数据库的日志有更大的空间。
(4)、Sybase12.5对查询优化器(Optimizer)进行了改进,增加了systabstats,sysstatistics两个系统表提高优化器的性能,因此移植结束后应对主要的表运行
update statistics table_name
来提高查询效率。
当然,数据库升级前最好能了解更多新旧版本的差别,一方面可以保障移植的顺利的进行,另一方面也可以使用新版本提供的新功能,优化数据库性能,提高使用水平。有关这方面的详细信息可以查阅Sybase公司提供的相关资料
4、准备移植工具
(1)、准备Sybase Central 和Power Designer等DDL生成工具,用于导出原数据库对象的 DDL脚本。
(2)、客户端安装Sybase PC Client等数据库连接软件,以便执行SQL 语句和存储过程等相关命令。
5、备份
在正式开始数据库移植时,应将原数据库全部备份,一方面以防不测,另一方面可以保留一份移植前原数据库系统的完整数据来备档。
实施阶段
1、安装Sybase12.5新数据库
(1)、在IBM服务器上创建名为sybase的操作系统帐户和数据库安装目录,赋予该sybase用户对数据库安装目录的所有权限。
(2)、IBM 服务器必须设置异步disk I/O。用Aix操作系统smitty命令设置disk I/O。
(3)、执行Sybase12.5安装程序,缺省安装Adaptive server、Backup Servrer 、Monitor Server 、XP Server。
/usr/sbin/mount -rv cdrfs /dev/cd0 /cdrom ;将光盘Mount到系统上
./cdrom./install ;执行安装程序
(4)、配置Adpative Server
master device 和sysprocsdev device 最好建立在character device上 ,而不是文件系统上;而且两设备尽量不建立在同一个设备上,以提高性能和保障安全。
(5)、Character Set和Sort Order应和原数据库设置保持一致,否则移植后数据会出现问题 。
(6)、为用户设置环境变量
B sh环境下: $ . $SYBASE/SYBASE.sh
C sh 环境下: % soruce $SYBASE/SYBASE.csh
2、设置Adaptive Server数据库参数
使用sp_configure 配置数据库参数,常设数据库参数有内存、数据库设备数量、数据库数量、索引数量、对象数量、用户连接数量、CPU数量、锁数量等。用户可根据自己系统的情况,选取合适的数据库参数。
3、建立数据库设备
数据库设备名可以和原设备名不同,数据库设备和数据库日志设备应建在不同的硬盘上,以保障系统的可靠性。
例:
>disk init name = "userdbdev", physname="/dev/ruserdblv",vdevno=2, size = 1024000 ;userdbdev设备尺寸为1024000数据块(1个数据块=512字节)。
4、建立数据库
数据库名必须与原来保持一致。
例:
>create database testdb on userdbdev = 2000 log on userlogdev = 400 ; 在Userdbdev设备上创建数据库testdb,其中数据容量为2000MB ,日志建立在userlogdev设备上,容量为400MB
5、进行原数据库数据一致性检查
在原数据库上用dbcc checkdb,dbcc checktable, dbcc ckeckalloc, dbcc tablealloc等命令进行数据库一致性检查,保证数据的完整性和一致性。
6、移植数据库的帐户(Login)和用户(User)
(1)、移植帐户(login)
由于Sybase11.9.2的syslogins表比版本12.5 的syslogins表少两个字段,为了保证Bcp正确执行,在原数据库建立一个比syslogins多两个字段的临时表,再进行Bcp的导入和导出。
例:
* 在原数据库上运行
>select *, convert(int,null) as logincount, convert(int,null) as procid into tempdb..mysyslogins from master..syslogins
bcp tempdb..mysyslogins out mysyslogins -e mysyslogins.out -c -Usa -P -SOldserver
* 在新数据库上运行
>sp_configure "allow updates to system tables",1 ;打开允许更新系统表开关
bcp master..syslogins in mysyslogins -e mysyslogins.in -c -b1 -Usa -P -SNewserver
>sp_configure "allow updates to system tables",0 ;关闭允许更新系统表开关
(2)、移植用户(user)
需分别将各个数据库的用户由原数据库导入新数据库。
例:
* 在原数据库上运行
bcp testdb..sysusers out testdbusers -e testdbusers.out -c -Usa -P -SOldserver
* 在新数据库上运行
>sp_configure "allow updates to system tables",1
bcp testdb..sysusers in testdbusers -e testdbusers.out -c -Usa -P -SNewserver
>sp_configure "allow updates to system tables",0
注:
如果数据库使用别名,用sp_helpuser查看用户,然后再使用sp_addalias加入别名用户。
7、建立各数据库库结构
使用 DDL导出工具导出原数据库中所有用户对象(OBJECTS)的创建脚本。在新的数据库中运行这些脚本。下面使用Power Designer工具完成该任务。
(1)、从原数据库导出库结构
* 运行Power Designer;
* 选择File -->Reverse Engineering,然后选择要导出的数据库进行连接;
* 选择要反转(Reverse)的表、触发器、存储过程等,然后选择OK,这时反转引擎开始工作;
* 反转任务完成后,该数据库的库结构就显示在窗口上。
(2)、将原数据库的库结构写入新数据库中
* 从Power Designer的菜单条中选择Database-->connect,连接到新数据库中;
* 选择Database-->Generate Database;选择建立所有表、视图,然后单击Generate Database,这时库结构就会写入新数据库中。
* 选择Database-->Generate Triggers and procedures;选择建立所有触发器、存储过程,然后单击Generate Triggers,这是所有触发器、存储过程就会写入新数据库中。
注:
(1)、在进行数据库库结构导入时应注意顺序,一定要先建立自定义数据类型、表(可带主键),建后再建立表的外键以及存储过程及触发器等;否则基表未建立,系统将无法创建存储过程和外键约束等。
(2)、为了提高下一步骤中bcp导入表数据的速度,在本步骤中先不建立表的索引,待Bcp导入表数据结束后,最后再建立表的索引。
8、用BCP命令完成数据导出、导入
(1)、原数据库用户数据表数据导出
* 用SQL语句产生bcp命令脚本
select "bcp testdb.." + name + " out " + name + " -e " + name + ".out -n -T4096 -USa -P -SOldserver" from testdb..sysobjects where type="U"
* 然后在Pc Cleint等数据库连接软件中批处理执行bcp 命令脚本,将数据导出。
(2)、新数据库用户数据表数据导入
* 数据库配置选项的设置
打开允许Bcp数据写入开关,进行如下设置
>sp_dboption testdb, "select into/bulkcopy/pllsort", true ;
数据库执行bcp in脚本时,会产生大量的log,为保证bcp in进程不致因为log溢出而中断,应该设置如下选项
>sp_dboption testdb, "truncate log on chkpt",ture ;
* 当Sybase执行bcp in脚本时,会占用导入数据2倍的tempdb空间,因此在执行前要仔细估计最大数据表的大小,保证有足够的tempdb空间。当空间不够时,要考虑用分割数据表和删除陈旧数据的方法缩小数据表的大小,或者考虑增加tempdb的大小。
* 用SQL语句产生bcp命令脚本
select "bcp testdb.." + name + " in " + name + " -e " + name + ".in -n -T4096 -Usa -P -SNewserver" from testdb..sysobjects where type="U"
* 批处理执行bcp 命令脚本,将数据导入新数据库
注:如个别系统表被曾被用户修改过,如表示系统出错信息的sysmessages表,也可上用述的方法进行数据移植。
9 、备份
数据库系统成功移植结束后,应迅速建立和实施新数据库备份计划。任何时候都应记住,数据的安全是最重要的。
测试阶段
为了保证数据库系统成功的迁移,在数据移植结束后,应进行充分的测试。
1、完整性测试
检查旧系统中各种用户对象是否全部移入新数据库,同时比较数据表中数据行数是否相同。
2、 应用系统测试
模拟普通用户操作应用系统的过程,对应用系统进行操作并检查运行结果。
3、 性能测试
当上两项测试结束后,应针对服务器、数据库应用进行性能方面的测试,并与第一阶段记录的性能基准数据进行比照,解决性能方面的问题,并进行性能的优化。
至此,Sybase 数据库从Sun服务器向IBM服务器移植的过程全部结束。在整个数据库迁移过程中,制定详细计划,进行充分的准备是实现成功移植的保障。同时由于整个移植过程比较复杂,应该合理安排移植实施时间,充分考虑过程中可能出现的问题,做好备份工作,这样就可保证数据库系统平滑、顺利的过渡。