ORACLE DB: 11.2.0.3.0

MYSQL DB: 5.5.14

因项目需求,需要将ORACLE生产中数据迁移至MYSQL数据库中作为初始数据,方法有如下几种:

1、ORACLE OGG

2、通过手动编写select “insert into”脚本

3、工具,本次我就是使用了工具(sqluldr2),工具下载地址可以到www.anysql.net去下载

使用方法:
将sqluldr2.bin工具上传到oracle的bin目录下,
[root@db01 bin]# chown oracle.oinstall   sqluldr2.bin
 
[root@db01 bin]# chmod  775  sqluldr2.bin
 
[root@db01 bin]# su  -  oracle

[oracle@db01 ~]$ sqluldr2   help=yes
Valid Keywords:
   user    = username/password@tnsname
   sql     = SQL file name
   query   = select statement
   field   = separator string between fields
   record  = separator string between records
   rows    = print progress for every given rows (default, 1000000)
   file    = output file name(default: uldrdata.txt)
   log     = log file name, prefix with + to append mode
   fast    = auto tuning the session level parameters(YES)
   text    = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).
   charset = character set name of the target database.
   ncharset= national character set name of the target database.
   parfile = read command option from parameter file
   read    = set DB_FILE_MULTIBLOCK_READ_COUNT at session level
   sort    = set SORT_AREA_SIZE at session level (UNIT:MB)
   hash    = set HASH_AREA_SIZE at session level (UNIT:MB)
   array   = array fetch size
   head    = print row header(Yes|No)
   batch   = save to new file for every rows batch (Yes/No)
   size    = maximum output file piece size (UNIB:MB)
   serial  = set _serial_direct_read to TRUE at session level
   trace   = set event 10046 to given level at session level
   table   = table name in the sqlldr control file
   control = sqlldr control file and path.
   mode    = sqlldr option, INSERT or APPEND or REPLACE or TRUNCATE
   buffer  = sqlldr READSIZE and BINDSIZE, default 16 (MB)
   long    = maximum long field size
   width   = customized max column width (w1:w2:...)
   quote   = optional quote string
   data    = disable real data unload (NO, OFF)
   alter   = alter session SQLs to be execute before unload
   safe    = use large buffer to avoid ORA-24345 error (Yes|No)
   crypt   = encrypted user information only (Yes|No)
   sedf/t  = enable character translation function
   null    = replace null with given value
   escape  = escape character for special characters
   escf/t  = escape from/to characters list
   format  = MYSQL: MySQL Insert SQLs, SQL: Insert SQLs.
   exec    = the command to execute the SQLs.
   prehead = column name prefix for head line.
   rowpre  = row prefix string for each line.
   rowsuf  = row sufix string for each line.
   colsep  = separator string between column name and value.
   presql  = SQL or scripts to be executed before data unload.
   postsql = SQL or scripts to be executed after data unload.
   lob     = extract lob values to single file (FILE).
   lobdir  = subdirectory count to store lob files .
   split   = table name for automatically parallelization.
   degree  = parallelize data copy degree (2-128).
   hint    = MySQL SQL hint for the Insert, for example IGNORE.
   unique  = Unique Column List for the MySQL target table.
   update  = Enable MySQL ON DUPLICATE SQL statement(YES/NO).
   crack   = The crack key for the content protection.
   uncrack = The uncrack key for the content protection.

for field and record, you can use '0x' to specify hex character code,
  \r=0x0d \n=0x0a |=0x7c ,=0x2c, \t=0x09, :=0x3a, #=0x23, "=0x22 '=0x27

每次参数所代表的具体含义和意义不描述,自己看

注意以下3点:
1、将ORACLE数据库中数据迁移到MYSQL,不要通过分隔符的方法,测试过分隔符,在导入到MYSQL过程中会有警告,一些数据被截断,避免大家走弯路

2、切记ORACLE生产环境的字符集是GBK,而MYSQL生产环境的字符集是UTF-8

3、将ORACLE数据全部导出成insert into 语句,这样在插入的过程避免出错,可以通过MYSQL还原命令直接还原,如出错进程会终止,source插入数据,中间出现警告,无法去验证

在测试ORACLE导出成insert into文本后,在还原到MYSQL过程中,测试N多次后,最终导出命令如下:
sqluldr2.bin   user=yoon/yoon@CS_177 query="select * from YOON.CESHI" charset=UTF8 text=MYSQLINS format=SQL  file=/u01/backup/oracle_mysql/CESHI_%b.txt  size=30000MB table=CESHI safe=YES

user : 用户名/密码@服务名

query:查询语句

charset:字符集UTF-8 , 将oracle中gbk字符集数据导出为文本格式后的字符集为UTF-8

text :导出文件类型,必须为MYSQLINS, 成为的文件数据中自动生成插入mysql语句的``符号,例如:`张三`

format:格式为MYSQL

file:导出数据文件保存路径

%b:字母b必须为小写,可生成多个数据文本文件 ,例如:CESHI_1,CESHI_2 ......;  避免直接生成一个超级大的数据文件

size:必须以MB为单位,导出的每个文件的大小,30000MB,导出的每个数据文件30G

table:生成的数据文件中直接包含表名,否则会成生成insert into " ",没有表名

safe:YES   这个一定要加,在测试大量的表中,发现有的oracle表导出过程中会报ORA-24345错误,说是工具的BUG,加参数safe=YES即可

总结:
经过大量的测试后最终总结上面的导出命令语句,目前测试的表数据没有问题,至少对于我而言是这样.

Oracle数据迁移至MySQL的更多相关文章

  1. oracle数据迁移到mysql

    今天遇到需求要把oracle的部分数据搬到mysql,用java代码抓数据,然后拼接成sql语句,然后用navicat执行sql脚本的方法,导入数据库. import oracle.jdbc.driv ...

  2. Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具

    Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具 1 kettle --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议. ...

  3. 如何将MongoDB数据库的数据迁移到MySQL数据库中

    FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...

  4. Oracle数据迁移至HBase操作记录

    Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...

  5. Oracle数据迁移expdp/impdp

    Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创 ...

  6. Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)

    1 试用了MysqlWorkBench的数据迁移功能 以为能实现:建立跟Sqlserver一样的表结构和视图的功能,sqlserver的数据迁移到mysql 实际上发现:即使勾选了表和视图,实际上却只 ...

  7. Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具

    1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ...

  8. Oracle数据迁移笔记-Rownum与序列的自增长的组合用法技巧

    Rownum与序列的自增长的组合用法技巧 根据序列自增长的步长规律,结合表行记录Rownum值的规则批量生成表的行记录主键的用法技巧 案例如下: CREATE OR REPLACE PROCEDURE ...

  9. oracle数据迁移之Exp和Expdp导出数据的性能对比与优化

    https://wangbinbin0326.github.io/2017/03/31/oracle%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E4%B9%8BExp%E ...

随机推荐

  1. C语言之实现控制台光标随意移动

    原理引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2:回车键:执行换行的功能. 3.普通键:输入功能. 终点就是要获取到屏幕上的坐标,当按下了方向 ...

  2. C# 枚举显示中文

    转自:http://www.cnblogs.com/yank/archive/2011/09/08/EnumDisplayInChinese.html   using System; using Sy ...

  3. Firefox下载文件时中文名乱码问题

    为了形象化,先看几张不同浏览器下下载文件时的效果图: 1:Firefox 36.0.1 2:IE8 3:Chrome 40.0.2214.93 m 4:360 7.1.1.322 很明显在Firefo ...

  4. 堆栈的实现(c语言)

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define EmptyTOS (-1) ...

  5. Duilib学习笔记《07》— 资源加载

    Duilib的界面表现力能如此丰富,很大程度上得益于贴图描述的简单强大.通过之前的学习及参看相关例子,我们可以发现,在XML布局文件中,不管是窗体背景还是控件,都添加了对应的图片资源以此来美化界面.而 ...

  6. AceAdmin In MVC之控件

    AceAdmin有很多Html控件,而下载下来之后全部混杂在一起,想用一个控件有时得调整半天,干脆整理出一个版本,而且结合起来MVC的封装.以后就不用一个js css的调了. 在MVC中Html的控件 ...

  7. leetcode 7

    此题实现比较简单,但是边界处理比较麻烦.题目要求是以32位考虑,所以可表达的数的范围是-2147483648~2147483648. 我们需要判断当前的数翻转之后是否在这个范围中,我的思路是首先对当前 ...

  8. 【好文要转】Python:模拟登录以获取新浪微博OAuth的code参数值

    [转自]http://www.tuicool.com/articles/zAz6zi [原文]http://blog.segmentfault.com/hongfei/1190000000343851 ...

  9. Mybatis SQL语句查询

    MyBatis中使用in查询时的注意事项 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach一共有三种类型,分别为List,[](array),Map三种. ...

  10. Unieap3.5-需要用到window.setTimeout的地方

    1.js大数据量操作且需要显示进度条 unieap.showLoading(true);//进度条 window.setTimeout(function(){ checkUtils.setAllRow ...