关于sqlserver和ORACLE之间数据交换的问题
来源:互联网 发布:dhcp 端口 67 68 编辑:程序博客网 时间:2024/05/17 17:14
数据交换是很多应用中遇到的问题,也是一个不好解决的问题。用数据库本身的机制进行数据交换无非就是那几个方法(sql :bcp,isql,dts Oracle:sqlldr,sqlplus等)通过个人的摸索以及上网求助,找到了一个可行的解决办法。以SQL SERVER2008上传数据至ORACLE 10g为例进行说明:
大致过程是 先从sql数据库中通过bcp命令导出需要进行交换的数据,然后通过Oracle的sqlldr命令将sql导出的数据进行导入,具体步骤如下:
- 从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数据表字段相对应,方便下面的操作 - oracle导入
sqlldr userid=【数据库用户名】/【数据库密码】@【数据库连接地址】/【数据库实例】 control='B.ctl' log=B.txt rows=100160 readsize=20971520 bindsize=20971520 PARALLEL=TRUE
仔细看上面导入的脚本,发现它关联了一个ctl控制文件,也就是说它导入的哪个文件以及导入到哪个表中,字段如何对应就在这个控制文件中了。 - 控制文件
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')
) - 以上配置正确后就可以做一个bat文件运行这个交换了。。。。。
- 关于sqlserver和ORACLE之间数据交换的问题
- 子窗口和父窗口之间的数据交换问题
- ORACLE 和SQLSERVER 两表之间批量更新数据对比
- 关于总店与分店之间的数据交换
- [原创]两个listbox之间操作数据交换的问题!
- 企业之间的数据交换
- 数据库之间的数据交换
- 关于两个窗体之间交换数据
- Activity和Service之间的相互交换数据
- fluent UDF 和 Scheme 之间的数据交换探究
- 笔记分享--matlab和c++工程之间的数据交换
- Activity之间的数据交换Intent和Bundle区别
- OpenCV学习(6) 文件和Mat之间的数据交换
- 列和列之间交换数据
- EZDML支持在ORACLE和SQLServer异构数据库之间导出备份和导入恢复数据
- JSON的数据交换、缓存问题和同步问题详解
- JSON的数据交换、缓存问题和同步问题详解
- 关于oracle导入sqlserver存在的唯一索引问题
- 学习jQuery formValidator
- 乔布斯在斯坦福的演讲
- ESXi 5.0主机只能显示实时性能数据
- Lesson 16 线程同步与异步套接字
- 最大公约数和最小公倍数求法总结
- 关于sqlserver和ORACLE之间数据交换的问题
- .Net 常用中间件积累
- .net获取域名
- 调用约定 C++对照及汇编详解
- 普通的get和set
- springMVC多视图解析器
- 数据库与java类型映射
- Lesson17进程间通信
- JDBC - executeQuery、executeUpdate 和 execute