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