在異種機之間進行數據庫遷移是一件麻煩的事
但有時候為了進行數據庫升級或其他原因又必須進行這種操作
我在工作中就遇到了這種情況
要求是將原來在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 sss
xxxxxxxxxx
procdb
>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數據庫中的表並且輸出到文件tabname
txt中
#isql
U sss
P xxxxx
o tabname
txt
> select name from sysobjects
> where type =
U
> go
* 建立awk
out文件
用於產生從vax機上讀取數據的bcp命令批
# vi awk
out
awk
out
{
print
bcp
$
out
$
dat
U sss
P xxxxx
S vax_sybase
c
}
* 產生讀取數據的bcp文件bcp
out
#awk
f awk
out tabname
txt >bcp
out
產生的bcp
out文件格式如下
bcp table
out table
dat
U sss
P xxxxx
S vax_sybase
c
bcp table
out table
dat
U sss
P xxxxx
S vax_sybase
c
bcp table
out table
dat
U sss
P xxxxx
S vax_sybase
c
.
.
.
* 建立awk
in文件
用於產生寫入數據到alpha機上的bcp命令批
awk
in
{
print
bcp
$
in
$
dat
U sss
P xxxxx
S alpha_sybse
c
}
* 建立用於插入數據的bcp文件bcp
in
#awk
f awk
in tabname
txt >bcp
in
產生的bcp
out文件格式如下
bcp table
in table
dat
U sss
P xxxxx
S vax_sybase
c
bcp table
in table
dat
U sss
P xxxxx
S vax_sybase
c
bcp table
in table
dat
U sss
P xxxxx
S vax_sybase
c
* 執行這兩個bcp文件
#ksh bcp
out
#ksh bck
in
自此
數據庫遷移完成
以上代碼在digital unix上運行通過
power designer在Win
上運行
From:http://tw.wingwit.com/Article/program/Oracle/201311/18975.html