oracle 如何边看表中字段信息_【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk 32H=>3H...

在【Oracle移行到Sqlserver完美解决案】③执行时间改善案bcp+bulk 一文中,移行实现了,但数据600多万件,占内存3G多的操作log表,移行需要32H,这个时间我们是无法接受的。

原因:

我分析是oracle和sqlserver之间的数据类型转化占用的大量的时间。

分析:

我们如何能避免类型数据的转化,你如果使用了sqlserver的provider创建dblink来查询,这个无法避免。所以开始考虑,将oracle数据的导出,和sqlserver数据的导入分开处理,中间用文件作为介质。通过bulk insert,将文件导入到sqlserver,我们上一章已经实现了,速度很快,这不是问题,那么问题就是在oracle有没有一个能将数据快速导出为文件的工具。答案是有的,那就是sqluldr2。具体的用法就不在这里说了,有不明白的可以给我发信息。我们主要说明解决案。

实现:

环境:sqlserver和oracle是2个服务器,在sqlserver服务器,安装了oracle的客户端,Oracle的provider要有,在sqlserver上执行移行的工具

【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk  32H=>3H

Oracle的provider

实现流程:

【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk  32H=>3H

移行实现流程

1.将oracle端的表数据导出到文件exp_LDBTLOGT.txt中

sqluldr.exe user=OracleUser/OraclePass@OracleSID query="SELECT * FROM LDBTLOGT" field=0x09 record=0x0a charset=AL32UTF8 file=E:YiXingexp_LDBTLOGT.txt

简单说明sqluldr.exe的语法,有问题联系。

field=0x09按照tab分割各个字段数据,如果你字段中的数据有tab键,就会有问题。它也支持自定义,例如:field='0x09|YYYY|'

record=0x0a 行数据回车,

charset=AL32UTF8 我是日文系统,数据库的字符集是AL32UTF8,字符集需要找特殊数据尝试

2.将导出的文件数据,插入到sqlserver

BULK INSERT V_LDBTLOGT FROM N'E:YiXingexp_LDBTLOGT.txt' WITH ( CODEPAGE=65001,ROWTERMINATOR='0x0A')

同样,BULK INSERT的使用也有很多注意的情况,它要和文件格式对应设置。

例如:CODEPAGE=65001,ROWTERMINATOR='0x0A',不同的格式应该加哪些设置,我这边也基本测试了一遍,有需要可以联系

3.blob字段的移行

Oracle的blob类型字段移行到sqlserver的varbinary类型。发现通过sqluldr.exe,无法将blob字段的内容保存到文件,所以对于有blob字段的几个表,单独通过DBlink,insert ... select方法移行

时间统计

这个表移行,整体用了不要3个小时,大幅度的缩减了。工具整体移行4个多小时就搞定了。基本上和oracle往oracle移行的时间差不多。执行时间问题基本就解决了。

反思

整个解决案,有几个瑕疵,首先sqlserver端要安装oracle客户端,其次使用sqluldr.exe,blob字段数据无法保存到文件。

接下来,我们要实现,sqlserver上不需要安装oracle客户端也可以正常移行。oracle端导出文件=》拷贝到sqlserver=》sqlerver端文件插入。那么使用了dblink的blob数据的移行,首先就需要解决。blob数据如何保存成文件,如何更新到sqlserver呢,敬请期待吧。

另外,这个文章主要说明解决案,每个技术点其实没有详细说明,有问题可以一起讨论下啊

索引:

【Oracle移行到Sqlserver完美解决案】①Sqlserver内存溢出

【Oracle移行到Sqlserver完美解决案】②内存溢出时查看SQL

【Oracle移行到Sqlserver完美解决案】③执行时间改善案bcp+bulk insert

【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk 32H=>3H

【Oracle移行到Sqlserver完美解决案】⑤不需要oracle客户端方案

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值