数据迁移:从SqlServer到Oracle

本文介绍了一种从Sql Server迁移数据到Oracle的方法。适用于不同规模的数据迁移需求,包括创建中间库表、初始化数据、导出与导入等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    要把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

     create table Table1(...)

    )    
    2.初始化中间库数据。
    将SqlServer中的源数据经过一定的转化插入到中间库表中。
    3.导出中间库数据。
    导出命令如下:bcp.exe [DataBase].[dbo].TableName out "path\TableName.txt"  -c -r"℡" -t"||" -S "IP" -U "UserName" -P "PassWord"
    bcp命令的具体格式可以直接到网上搜索。把所有表的导出命令写到一个txt文件中,并改文件扩展名为bat。
    4.编写数据表控制文件。
    每个表编写一个控制文件,文件的扩展名为ctl。具体内容如下
     LOAD DATA
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.编写数据表的导入文件。
    每个表编写一个导入命令文件,文件扩展名为bat。具体内容如下:
    盘符:
    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
 
     当数据表较多时,可以在Oracle数据库中建一个Package自动生成需要迁移的表的控制文件和导入命令文件。
     6.建一个批量执行导入文件的bat文件。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值