要把sqlServer中的数据迁移到Oracle有多种方法。如果数据量小,可以直接使用sql语句生成器(sqlDataToScript.exe)直接生成sql语句。如果数据量大,建议使用sql Loader工具进行数据迁移。
具体步骤如下:
1.创建中间库表。
之所以需要创建中间库表是因为,sqlServer中的源数据表结构,字段名可能与Oracle目标数据表结构,字段不一致。创建与Oracle中目标数据表一致的的中间库表有助于最终数据的导入。并且保留一个数据备份。
(另外,考虑到建表时由于其他原因可能会反复建或者新增表,建议在新建表前都先判断一下数据表是否已经存在于数据库中。
if EXISTS (select COUNT(*) from sysobjects where upper(name) ='Table1')
drop TABLE Table1
drop TABLE Table1
create table Table1(...)
)
2.初始化中间库数据。
将sqlServer中的源数据经过一定的转化插入到中间库表中。
3.导出中间库数据。
导出命令如下:bcp.exe [DataBase].[dbo].TableName out "path\TableName.txt" -c -r"℡" -t"||" -S "IP" -U "UserName" -P "PassWord"
4.编写数据表控制文件。
LOAD DATA
CHaraCTERSET ZHS16GBK
INFILE 'path\TableName.txt' "str X'A959'"
APPEND INTO TABLE TableName
FIELDS TERMINATED BY "||"
TRAILING NULLCOLS
(
FieldName1,FieldName2...
)
CHaraCTERSET ZHS16GBK
INFILE 'path\TableName.txt' "str X'A959'"
APPEND INTO TABLE TableName
FIELDS TERMINATED BY "||"
TRAILING NULLCOLS
(
FieldName1,FieldName2...
)
如果表中有时间类型字段需要做点转换。FIELDTIME"to_date(substr(:FIELDNAME,1,19),'yyyy-mm-dd HH24:mi:ss')"
5.编写数据表的导入文件。
盘符:
cd 盘符:\控制文件上一层地址
sqlldr 用户名/密码@数据库名 Control="ctrl\TableName.ctl" log="log\TableName.log" Bad="data\bad\TableName.bad" Errors=100 Rows=1000 BindSize=3072000 StreamSize=3072000 ReadSize=839288
move /y data\TableName.txt data\bak\TableName.txt
pause
cd 盘符:\控制文件上一层地址
sqlldr 用户名/密码@数据库名 Control="ctrl\TableName.ctl" log="log\TableName.log" Bad="data\bad\TableName.bad" Errors=100 Rows=1000 BindSize=3072000 StreamSize=3072000 ReadSize=839288
move /y data\TableName.txt data\bak\TableName.txt
pause