关于sqlserver和ORACLE之间数据交换的问题

数据交换是很多应用中遇到的问题,也是一个不好解决的问题。用数据库本身的机制进行数据交换无非就是那几个方法(sql :bcp,isql,dts Oracle:sqlldr,sqlplus等)通过个人的摸索以及上网求助,找到了一个可行的解决办法。以SQL SERVER2008上传数据至ORACLE 10g为例进行说明:

大致过程是  先从sql数据库中通过bcp命令导出需要进行交换的数据,然后通过Oracle的sqlldr命令将sql导出的数据进行导入,具体步骤如下:

  1. 从sql server中导出数据 【A:sql数据库  AT:SQL数据库表 B:oracle数据库 BT:oracle数据库表】
    bcp "SELECT * FROM A..AT" queryout AT.csv -c -S 【数据库连接地址】 -U 【数据库用户名】 -P 【数据库密码】
    通过此命令可以将SQL数据库中需要交换的数据导出成文本,导出文本数据列之间默认是以tab分割,当然也可以用这种方式,增加列分割符、行分隔符以及其他的东西,至于具体参数可以到网上搜哈啦。。
    bcp "select * from A..AT" queryout AT.csv -c -t "<<<>>>" -r "<$$>" -S 【数据库连接地址】 -U 【数据库用户名】 -P 【数据库密码】   -t是列分割符,-r是行分割符,注意中间的空格,不要随意删除或者增加  
    此处查询出的交换数据最好和要交换的ORACLE数据表字段相对应,方便下面的操作
  2. oracle导入
    sqlldr userid=【数据库用户名】/【数据库密码】@【数据库连接地址】/【数据库实例】 control='B.ctl' log=B.txt rows=100160 readsize=20971520 bindsize=20971520 PARALLEL=TRUE

    仔细看上面导入的脚本,发现它关联了一个ctl控制文件,也就是说它导入的哪个文件以及导入到哪个表中,字段如何对应就在这个控制文件中了。
  3. 控制文件
    LOAD DATA 
    CHARACTERSET ZHS16GBK    //此处定义了文件的编码方式,如果导入报错发现截取数据列很乱时应该就是编码方式错了
    INFILE "B.csv" "str '<$$>'"      //此处定义了从哪个文件读取要导入的数据,str后定义的是行分隔符,还有很多其他的参数,此处不再列出
    truncate INTO B    //导入到Oracle数据库的名称
    Fields terminated by '<<<>>>'   //此处为列分隔符
    trailing nullcols    

    COL1 integer external,   //定义了对应B中的字段的转换方式,因为sql和oracle字段类型不能通用,所以此处必须转换,列出了int型和date型的转换方式
    COL2 char(50),    //如果不指定长度,默认是255
    COL3 Date "YYYY-MM-DD HH24:MI:SS" NULLIF(COL3='NULL')
    )

  4. 以上配置正确后就可以做一个bat文件运行这个交换了。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值