在异种机之间进行数据库迁移是一件麻烦的事但有时候为了进行数据库升级或其他原因又必须进行这种操作我在工作中就遇到了这种情况要求是将原来在vax机(操作系统为open vms)上的生产管理库procdb(sybase数据库)迁移到alpha机(操作系统为digital unix)上借助syabse的power designer和unix的shell命令可以很方便地完成此项工作
具体过程如下
一ALPHA服务器上建立新的数据库procdb
.建立生产管理库procdb
#isql Usa Pxxxxxxx
>create database procdb
>on data_dev=
>log on data_dev=
>with override
>go
.增加新用户
>use master
>go
>sp_addlogin sssxxxxxxxxxxprocdb
>go
>use procdb
>sp_changedbowner sss
>go
二生产管理库procdb的移植
.使用PowerDesigner 从vax上的procdb中移出数据库结构
* 运行PowerDesigner
* 选择File菜单下的Reverse Engineering …
* 连接到vax上的procdb数据库
* 迁移库结构
* 保存该文件
.将从vax获取的数据库结构移入alpha机的procdb数据库
* 连接到alpha上的procdb数据库
* 选择Database菜单下的Gernate Database将数据库表结构写入alpha机的procdb数据库;
* 执行Database菜单下的Gernate Trigger and Procedure将存储过程和触发器写入alpha机的procdb数据库;
.数据迁移
* 注册到unix机上用select 语句选出Procdb数据库中的表并且输出到文件tabnametxt中
#isql U sss P xxxxx o tabnametxt
> select name from sysobjects
> where type =U
> go
* 建立awkout文件用于产生从vax机上读取数据的bcp命令批
# vi awkout
awkout
{
print bcp $out $dat U sss P xxxxx S vax_sybase c
}
* 产生读取数据的bcp文件bcpout
#awk f awkout tabnametxt >bcpout
产生的bcpout文件格式如下
bcp table out tabledat U sss P xxxxx S vax_sybase c
bcp table out tabledat U sss P xxxxx S vax_sybase c
bcp table out tabledat U sss P xxxxx S vax_sybase c
.
.
.
* 建立awkin文件用于产生写入数据到alpha机上的bcp命令批
awkin
{
print bcp $in $dat U sss P xxxxx S alpha_sybse c
}
* 建立用于插入数据的bcp文件bcpin
#awk f awkin tabnametxt >bcpin
产生的bcpout文件格式如下
bcp table in tabledat U sss P xxxxx S vax_sybase c
bcp table in tabledat U sss P xxxxx S vax_sybase c
bcp table in tabledat U sss P xxxxx S vax_sybase c
* 执行这两个bcp文件
#ksh bcpout
#ksh bckin
自此数据库迁移完成以上代码在digital unix上运行通过power designer在Win上运行