Oracle数据迁移至MySQL

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目录下,
[[email protected] bin]# chown oracle.oinstall   sqluldr2.bin
 
[[email protected] bin]# chmod  775  sqluldr2.bin
 
[[email protected] bin]# su  -  oracle

[[email protected] ~]$ sqluldr2   help=yes
Valid Keywords:
   user    = username/[email protected]
   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/[email protected]_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即可

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

时间: 2024-10-20 10:55:52

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

oracle数据迁移到mysql

首先要确保你的oracle和mysql连接没有问题,我的oracle10g和mysql5.2,工具是mysql-gui-tools-5.0-r17-win32.msi 叫MySQL Migration Tookit 然后安装这个MySQL Migration Tookit,下载地址是http://dev.mysql.com/downloads/gui-tools/5.0.html,按照你本地的环境下载,我下载的是Windows版本安装成功后打开软件,这个名字叫做:MySQL Mi个ration

Oracle数据迁移expdp/impdp

Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创建Directory 2.使用expdp导出用户数据 2.1 只导出scott用户的元数据,且不包含统计信息: 2.2 只导出scott用户的数据: 2.3 只导出scott用户下的emp,dept表及数据: 2.4 只导出scott用户下的emp,dept表结构: 2.5 导出scott用户下所有

SQL server 数据迁移到mysql

刚加入的新项目才刚刚起步,很多技术还没有真正定型,本来组长决定是用SQL server 的,这几天也在忙着数据库设计,建表,写存储过程,感觉轻车熟路,但是昨天跟着组长去参加我们这个项目的研讨会,用SQL server的计划直接被否决了,不因为性能什么的,只是因为---Money.跟客户谈的时候被砍掉几百万,主任说一套SQL就得十几万,我们这个项目要搭建十几台服务器,这个钱真出不起啊.(Oracle更别提,这个才是真心贵)所以我们只能被迫转为使用开源的mysql,这个不收钱. 所以之前SQLser

Oracle 数据迁移

oracle 数据库迁移 ######################################################################################## ######################################################################################## 在源库中导出数据(备份) exp OMS_lvnain01/OMS_lvnain01 owner=OMS_lvnain

oracle数据迁移中的故障解决:

1.数据迁移之后,出现乱码问题 解决过程 a.使用select * from nls_database_parameters;命令查看源库中的字符集,内容可能如何.(这次故障按照下面字符集内容进行解决) SQL> select * from nls_database_parameters; ...... ...... NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_LANGUAGE AMERICAN PARAMETER -------------------------

SQL Server数据迁移至MySQL

背景: 我所在公司的官网使用了PHP进行重新开发,抛弃了原有.net开发环境,但需要使用到老官网的一些数据,所以需要进行数据迁移. 环境如下: 老官网:Windows Server 2008 R2, SQL Server 2008 R2 新官网:RedHat 6.5,MySQL,PHP... ====================我是分割线========================= 目前网络上有很多软件声称是可以进行SQL Server-> My SQL的数据迁移,比如OBDB2DB,

利用AMP(Alibaba Migration Platfrom)神器轻松把Oracle数据库中的数据迁移到MySQL数据库

转载请注明出处: http://blog.csdn.net/guoyjoe/article/details/44926187 上传AMP包并解压:tar -jxvf amp.2.1.0.tar 启动AMP:nohup sh start.sh > /tmp/log.txt 1 & >2 1.我把AMP迁移工具部署到了192.168.1.8上,在192.168.1.8上也装了MySQL数据库,可以正常连接,如下: 2.配置AMP,如下 3.点保存并预检查,报错如下 目标库的大小写敏感设置 

django -> 博客项目sqlite数据迁移至mysql

准备: 云服务器上安装mysql 本地虚拟环境安装mysqlclient(下载地址): python -m pip install  mysqlclient-1.4.4-cp36-cp36m-win_amd64.whl mysql数据设置 # root账号登录 mysql -u root -p # 创建数据库 — mysite_db create database mysite_db default charset=utf8mb4 default collate utf8mb4_unicode_

Oracle 数据迁移(从Oracle11G高版本迁移到Oracle10G低版本)

1,数据库状况    生产环境是11G,linux系统,测试环境是10G,windows系统,需要从生产环境导出一个用户下所有的数据,导入测试环境中.    因为数据量比较小,准备采用EXP和IMP工具来做. 2,在生产环境上导出用户数据    命令:       exp \'system/syspl as sysdba\' owner=PLAS buffer=10240000 FILE=/tmp/PLAS_20141113.DMP 执行过程:[[email protected] ~]$  ex