从SQLServer导数据到Oracle大概有以下几种方法:

  1. 使用SSMS的导出数据向导,使用Microsoft ODBC for Oracle或Oracle Provider for OLE DB连接到Oracle
  2. 导出到平面文件
  3. 导出包含数据的SQL脚本。
  4. 使用ETL工具。
  5. 自己开发软件。

以下使用第2种方法来进行数据迁移的。

使用BCP合适导出大容量数据。这里导出千万级别的数据,也是很快就能成功。

如果导出时还需要做一些数据的处理,比如多表关联,字符处理等,比较复杂的逻辑,最好是做成存储过程,BCP直接调用存储过程即可。

BCP "exec TestDB.dbo.export_t1 " queryout d:\export\t1.txt -c -t"||" -S"192.168.1.100" -Urpt -Prpt123
pause
USE TestDB
GOCREATE PROC [dbo].[export_usercar]
ASSELECT  [carId],CONVERT(NVARCHAR(30), [addTime], 120),CONVERT(NVARCHAR(30), [lastSearchTime], 120),CONVERT(NVARCHAR(30), [updateTime], 120),[carType],[userTelephone],[isCorrect],[userId],[validFlag],[Channel],[carCode],[engineNumber],[carNumber]FROM    [TestDB].[dbo].[t1] WITH ( NOLOCK )WHERE   validFlag = 1AND isCorrect = 1;

把导出文件上传到Oracle所在的主机上,如CentOS下。

使用Oracle的SQL*LOADER导入平面文件。假如Oracle中有已经创建好的表,与导入文件对应。

把以下的内容用vi,写到import-t1.ctl

load data
CHARACTERSET 'ZHS16GBK'
infile '/data/import/t1.txt' "str '\r\n'"
into table SCOTT.T1
fields terminated by '||' TRAILING NULLCOLS
(
carId,
addTime DATE "YYYY-MM-DD HH24:MI:SS",
lastSearchTime DATE "YYYY-MM-DD HH24:MI:SS",
updateTime DATE "YYYY-MM-DD HH24:MI:SS",
carType ,
userTelephone  ,
isCorrect  ,
userId  ,
validFlag ,
Channel ,
carCode  ,
engineNumber ,
carNumber
)

使用SQL*LOADER注意几个问题:

  • 字符编码
  • 字段分隔符
  • 行结束符
  • 日期或时间格式
  • 特殊字符
  • 导入字段的顺序
  • 导文件文件的表字段类型和长度是否合适

使用sqlldr命令把数据导入到Oracle中。

sqlldr user/"user_password" control=import-t1.ctl

默认下,生成的日志文件在当前目录下。无论成功与否,一定要查看日志。看看是否导入成功或失败,或是部分成功。导入的问题一般从日志文件即可找到。

如果有错误,还会生成与导入文件同名的t1.bad文件。

以下是日志文件,显示数据导入的一些信息。成功导入了18495032行记录,没有导入失败的记录。

[oracle@ttoracle /data/import]$ cat import-t1.log SQL*Loader: Release 11.2.0.1.0 - Production on Fri Jun 15 12:46:09 2018Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.Control File:   import-t1.ctl
Character Set ZHS16GBK specified for all input.Data File:      /data/import/t1.txtFile processing option string: "str '
'"Bad File:     t1.badDiscard File:  none specified(Allow all discards)Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      ConventionalTable SCOTT.T1, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effectColumn Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
CARID                               FIRST     *           CHARACTER            Terminator string : '||'
ADDTIME                              NEXT     *           DATE YYYY-MM-DD HH24:MI:SSTerminator string : '||'
LASTSEARCHTIME                       NEXT     *           DATE YYYY-MM-DD HH24:MI:SSTerminator string : '||'
UPDATETIME                           NEXT     *           DATE YYYY-MM-DD HH24:MI:SSTerminator string : '||'
CARTYPE                              NEXT     *           CHARACTER            Terminator string : '||'
USERTELEPHONE                        NEXT     *           CHARACTER            Terminator string : '||'
ISCORRECT                            NEXT     *           CHARACTER            Terminator string : '||'
USERID                               NEXT     *           CHARACTER            Terminator string : '||'
VALIDFLAG                            NEXT     *           CHARACTER            Terminator string : '||'
CHANNEL                              NEXT     *           CHARACTER            Terminator string : '||'
CARCODE                              NEXT     *           CHARACTER            Terminator string : '||'
ENGINENUMBER                         NEXT     *           CHARACTER            Terminator string : '||'
CARNUMBER                            NEXT     *           CHARACTER            Terminator string : '||'Table SCOTT.T1:18495032 Rows successfully loaded.0 Rows not loaded due to data errors.0 Rows not loaded because all WHEN clauses were failed.0 Rows not loaded because all fields were null.Space allocated for bind array:                 214656 bytes(64 rows)
Read   buffer bytes: 1048576Total logical records skipped:          0
Total logical records read:      18495032
Total logical records rejected:         0
Total logical records discarded:        0Run began on Fri Jun 15 12:46:09 2018
Run ended on Fri Jun 15 12:55:58 2018Elapsed time was:     00:09:48.90
CPU time was:         00:03:37.62

使用平面文件迁移数据,最大麻烦是就是特殊字符,或是有垃圾数据。如果原数据包含与字符分隔符相同的字符,如这里面的“||”,或是有一些不可见的字符,如回车,换行符,等。这些字符会造成导入时,分割字段错位,导致导入错误,数据导不全,甚至导入失败。

但从导出导入的速度来说,是最快的,平面文件可以跨不同的数据库进行迁移。如果数据不容忍丢失,只能通过工具来导了,但速度会相对较慢。

转载于:https://www.cnblogs.com/fishparadise/p/9406943.html

SQLServer导数据到Oracle相关推荐

  1. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  2. sqoop增量导入hive_使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)...

    最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右 ...

  3. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......

    在excel表里,什么是:字段.记录.数据类型.多工... declare @t table(id numeric(18,2)) insert into @t SELECT   col1 FROM   ...

  4. sql server 2008数据导入Oracle方法

    试了几种sql server数据导入Oracle的方法,发现还是sql server 的导入导出工具最好使.使用方法很简单,照着向导做就可以.不过使用中需要注意以下几点: 系统盘需要足够大.因为SSI ...

  5. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  6. apache sgoop 导入数据到 oracle、导出数据到 oracle 实现

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 业务场景:是在oracle 数据库和  hive 数据库中 ,有多个相同结构的表,要求数据从2个库定 ...

  7. ×××数据库导数据ora-01400错误小计

    ×××源端和目标段的数据库版本都是11.2.0.1 使用exp.imp导入导出 导入目标库时会报ora-01400的错误 IMP-00019: row rejected due to ORACLE e ...

  8. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...

    如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...

  9. oracle impdp导入超慢,Oracle:impdp导入等待statement suspended, wait error to be cleared

    用数据泵impdp往开发数据库导数据,但导入到INDEX时感觉卡住不动了Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX ----查看状态, ...

  10. 异构数据库之间完全可以用SQL语句导数据 ths 碧血剑!

    问题:异构数据库之间完全可以用SQL语句导数据.大家抛弃BatchMove吧 如果觉得好请Up一下,如果觉得不好也请Up一下 ( 积分:1, 回复:684, 阅读:43158 ) 分类:数据库-C/S ...

最新文章

  1. SCI写作常用句式总结,帮你迅速提升paper档次
  2. 程序员杂记:兴趣井”与“机遇缝”
  3. cordova编译报错:Execution failed for task ':processDebugResources'
  4. react native 报错:cannot read property 'length' of undefined
  5. mysql:mysql error:Access denied for user 'root'@'localhost' (using password: YES)
  6. 题解 P4753 【River Jumping】
  7. 【正一专栏】登贝莱,该不该来!
  8. WildFly 10 CR 2发布– Java EE 7,Java 8,Hibernate 5,JavaScript支持热重载
  9. @程序员,不要瞎努力!比起熬夜更可怕的是“熬日”!
  10. 使用jQuery开发tab选项卡插件
  11. es6 Object.getPrototypeOf()方法
  12. 数据处理--One Hot Encoding
  13. STM32示波器设计
  14. 人工智能AI对客户服务的影响正在形成
  15. excel文件因服务器未响应无法打开,excel打开显示兼容模式(未响应)
  16. linux进程管理(一)
  17. 2022年1024程序员节日纪念
  18. 机器学习 知识图谱常用术语
  19. This Python interpreter is in a conda environment问题解决
  20. 【Kotlin开发者社区文章集锦】66篇精选技术精华文章

热门文章

  1. 全网首发:LINUX制作安装deb版本时,打开方式的适配总结
  2. UOS应用商店deb打包的正确目录结构
  3. 我说我水平高,因为我CSDN博客排名前100
  4. JAVA格式化输出字串
  5. CSDN博文分类全部删除了?
  6. 管理感悟:一个人的工作效率是不可能提高的
  7. H264 STAP-A解包代码(测试通过)
  8. 祝贺中国推送联盟初测成功
  9. VS:无法将“char *”转换为“const wchar_t *”/不能将参数从“const char []”转换为“const wchar_t *”
  10. 遇到ffmpeg错误:non monotonically increasing dts to muxer in stream