在【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的provider

实现流程:

移行实现流程

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客户端方案

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

  1. 【Oracle】快速向表中插入大量数据Oracle中append与Nologging

    当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候,oracle需要生成 redo log和undo log;此时最好的解决办法是用insert, 并且将表设置为n ...

  2. oracle 字段全大写,Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)...

    前言 今天查询一个数据字段一直提示字符无效,明明在数据库表字段中是存在的: 查询后得知,数据库表字段为小写时,查询需要将字段名小写并加上双引号: 表名同理,我这里表名是大写,暂时不需要改. 搜到一个批 ...

  3. oracle 表字段顺序_Oracle数据库如何修改表中字段顺序

    Oracle数据库如何修改表中字段顺序 发布时间:2020-07-09 15:53:15 来源:亿速云 阅读:166 本篇文章给大家分享的是有关Oracle数据库如何修改表中字段顺序,小编觉得挺实用的 ...

  4. Oracle中V$SESSION等各表的字段解释,Oracle官方解释

    https://www.cnblogs.com/grey-wolf/p/10119219.html Oracle中V$SESSION等各表的字段解释,Oracle官方解释 阅读目录 一.常用的视图 1 ...

  5. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  6. Oracle数据库表中字段顺序的修改方法

    Oracle数据库表中字段顺序的修改方法 这篇文章主要给大家介绍了关于Oracle数据库表中字段顺序的修改方法,在介绍修改的方法之前先给大家介绍了Oracle数据库表新建字段的方法,文中通过示例代码介 ...

  7. oracle 表字段顺序_如何更改Oracle数据库表中字段顺序

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  8. oracle 判断数字是否连续,oracle中 如何 判断 表中字段是否为 连续的数字,例如‘3333333333',‘44444444’...

    oracle中 如何 判断 表中字段是否为 连续的数字,例如'3333333333','44444444' (2011-09-23 15:42:45) 标签: 判断 字段是否为 连续的数字 杂谈 分类 ...

  9. mysql中通过sql语句查询指定数据表的字段信息

      mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...

最新文章

  1. 博客园自定义页面风格设计 后续篇(页面设计模式及代码高亮 鼠标点击效果升级)...
  2. 通过域名,直接访问到网站主页
  3. HDUOJ---老人是真饿了
  4. 《葵花宝典:WPF自学手册》三大网点书评集萃
  5. JSP+JavaBean+Servlet工作原理实例讲解
  6. FINEMVC重定向和显示合计
  7. 腾讯QQ群视频功能“视频秀”即将上线
  8. pb 系统托盘实例(定时任务管理)
  9. Delphi学习链接
  10. java公司薪酬管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  11. mysqld: [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1
  12. 在线培训-虚拟演播室嵌入网页直播
  13. 实用小技巧---如何给全部网页截图
  14. 计算机怎么化成10的次方,10的n次方换算关系 10^N 计算机存储单位的换算关系
  15. 一个简单的JS(盒子移动)
  16. 多边形等距放缩原理与python实现
  17. Pytorch踩坑记之交叉熵(nn.CrossEntropy,nn.NLLLoss,nn.BCELoss的区别和使用)
  18. ADI电路设计电子书课件分享
  19. 文章解读 -- FlowNet3D:Learning Scene Flow in 3D Point Clouds
  20. 【负载均衡server】F5与nginx的区别

热门文章

  1. 设计模式的征途—21.迭代器(Iterator)模式
  2. Mysql 解压版 安装时候的注意事项
  3. 谈谈对线程与进程的理解
  4. Ruby中对象数组排序
  5. N - Is It A Tree?(判断环)
  6. grub 的安装与使用
  7. java对象的生命周期及回收
  8. 在ASP.NET中实现Url Rewriting
  9. 意识到自己的无知这就是进步
  10. UA MATH567 高维统计IV Lipschitz组合1 Lipschitz函数