现在有个任务是需要把Oracle的数据迁移到MySQL,因为就涉及到了几个表,所以我最先想到了使用spool把Oracle的数据导成txt文件,然后再load 进去MySQL。非常遗憾的是,我的有一个表有110个字段,并且有160万的数据,始终就只能倒进一部分数据,最后由于时间问题,没有继续尝试,然后打算用golden gate完成任务。

我们知道golden gate主要就在于几个进程的配置,安装很简单,解压缩就可以,下面重点讲解各个进程的配置问题。

整体迁移的思路以及注意事项:

首先在oracle端和mysql端安装上OGG,安装很简单,然后在oracle源端和目标端配置好mgr(端口需要一致),然后在源端配置上抓取进程,在目标端配置上replicate进程(只运行一次即可),然后在源端使用DEFGEN命令做映射文件,并把文件传到mysql端相应目录下。启动源端的抓取进程即可实现数据库初始化,也就完成了数据迁移。

注意事项和相关报错:

1,oracle到mysql的ogg属于异构的ogg, 需要借助DEFGEN命令生成一个映射文件,也就是两个表的映射关系,并把文件放到目标端相应位置下。否则会报错WARNING OGG-01194 EXTRACT task RINIG1 abended : Could not find definition for INFOSERVICE.T_MEMBER_INFO_SUM

2,在源端配置抓取进程,需要注意的是:初始化数据库过程需要一个的抓取进程,之后保持数据同步也需要一个抓取进程,这两个抓取进程是有区别的,然后目的端也需要两个replicate进程,一个用来初始化数据库,一个用来实时同步数据 。

3,注意oracle字段默认是区分大小写的,但是mysql默认是不区分的。如下:

mysql> select login_id from T_MEMBER_INFO where login_id = 'SHFRONT';

+----------+

| login_id |

+----------+

| shfront |

| SHFRONT |

+----------+

2 rows in set (0.81 sec)

需要这样修改,让mysql对大小写敏感。

mysql> alter table T_MEMBER_INFO modify login_id varchar(100) binary;

mysql> select login_id from T_MEMBER_INFO where login_id = 'SHFRONT';

+----------+

| login_id |

+----------+

| SHFRONT |

+----------+

1 row in set (0.78 sec)

如果mysql的主键是login_id,那么可能会遇到下面这个报错,主键冲突,真正的原因是:mysql字段值默认是不区分大小写

报错:WARNING OGG-01004 Aborted grouped transaction on 'liuwenhe.T_MEMBER_INFO_SUM', Database error 1062 ([SQL error 1062]Duplicate entry 'shandongchaoyue' for key 'PRIMARY'

从oracle转到MySQL的OGG,在使用mysql过程中,会遇到很多不同于oracle的问题,初始化数据的时候总是报主键冲突,但是这些数据都是从同样表结构的oracle数据库中导出来的,当然主键也是一样的。

查看了一下数据文件,发现存在很多数据只是大小写不一样,如’goolen,‘GOOLEN’,‘Goolen’这样的数据,

其实MySQL中,字段值默认是不区分大小写的,也就是说插入值‘abc’和'ABC‘是等价的,

下面展示具体的配置:

源端oracle 抓取进程配置:

[oracle@master2 ggs]$ cd   /u01/OGG_linux/ggs

[oracle@master2 ggs]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle

Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

1,GGSCI (master2) 1>  create  subdirs

Creating subdirectories under current directory /u01/OGG_linux/ggs

Parameter files                /u01/OGG_linux/ggs/dirprm: already exists

Report files                   /u01/OGG_linux/ggs/dirrpt: created

Checkpoint files               /u01/OGG_linux/ggs/dirchk: created

Process status files           /u01/OGG_linux/ggs/dirpcs: created

SQL script files               /u01/OGG_linux/ggs/dirsql: created

Database definitions files     /u01/OGG_linux/ggs/dirdef: created

Extract data files             /u01/OGG_linux/ggs/dirdat: created

Temporary files                /u01/OGG_linux/ggs/dirtmp: created

Stdout files                   /u01/OGG_linux/ggs/dirout: created,

2,登录数据库

GGSCI (master2) 3> dblogin userid ogg,password ogg

Successfully logged into database.

3,添加需要同步的用户到ogg

开启scott用户下所有表的附加日志

GGSCI (WebServer) 3> add trandata infoservice.*

2013-03-08 11:02:33  WARNING OGG-00869  No unique key is defined for table 'BONUS'.

All viable columns will be used to represent the key, but may not guarantee

uniqueness.  KEYCOLS may be used to

define the key.

Logging of supplemental redo data enabled

for table SCOTT.BONUS.

Logging of supplemental redo data enabled

for table SCOTT.DEPT.

Logging of supplemental redo data enabled

for table SCOTT.EMP.

2013-03-08 11:02:34  WARNING OGG-00869  No unique key is defined for table

'SALGRADE'. All viable columns will be used to represent the key, but may not

guarantee uniqueness.  KEYCOLS may be

used to define the key.

Logging of supplemental redo data enabled

for table SCOTT.SALGRADE.

4,GGSCI (WebServer) 4> info trandata scott.*

Logging of supplemental redo log data is

enabled for table SCOTT.BONUS.

Columns supplementally logged for table

SCOTT.BONUS: ENAME, JOB, SAL, COMM.

Logging of supplemental redo log data is

enabled for table SCOTT.DEPT.

Columns supplementally logged for table

SCOTT.DEPT: DEPTNO.

Logging of supplemental redo log data is

enabled for table SCOTT.EMP.

Columns supplementally logged for table

SCOTT.EMP: EMPNO.

Logging of supplemental redo log data is

enabled for table SCOTT.SALGRADE.

Columns supplementally logged for table

SCOTT.SALGRADE: GRADE, LOSAL, HISAL.

3,GGSCI (master2) 3>edit params mgr

PORT 7839

4,GGSCI (master2) 3> start  mgr

5,GGSCI (master2) 3>info  mgr

Manager is running (IP port

WebServer.7839).

1.抓取进程

GGSCI (oracle3) 10>add extract  ext_1,sourceistable ####sourceistable代表直接从表中读取数据

GGSCI (oracle3) 10> view params ext_1

extract ext_1

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

userid goldengate@cbl , password ogg123456

rmthost 192.168.0.12,mgrport 7839

rmttask replicat,group rinig1

table INFOSERVICE.T_MEMBER_INFO;

2.DEFGEN命令生成的映射文件。

1)创建DEFGEN工具的参数文件;

GGSCI (oracle3) 3> view params defgen

defsfile ./dirdef/source.def, purge

userid ogg@rman_cbl1 , password ogg

TABLE INFOSERVICE.T_PUBLISH_INFO;

TABLE INFOSERVICE.T_PUBLISH_ZBXX;

TABLE INFOSERVICE.T_MEMBER_INFO;

TABLE INFOSERVICE.T_MEMBER_INFO_FUBIAO1;

TABLE INFOSERVICE.T_MEMBER_INFO_SUM;

TABLE INFOSERVICE.T_MEMBER_MY;

TABLE INFOSERVICE.T_MEMBER_MY_INFO;

TABLE INFOSERVICE.T_PUBLISH_INFO_SUM_TONGJI;

TABLE INFOSERVICE.USER_REGIST_LS_FAIL;

TABLE INFOSERVICE.USER_REGIST_LS;

2))运行DEFGEN工具生成数据定义文件

进入GGSCI安装目录下,命令行执行:

[oracle@oracle3 ogg]$./defgen paramfile dirprm/defgen.prm

3)把生成的文件 scp到目标端相应文件下:

[oracle@oracle3 ogg]scp /home/oracle/ogg/dirdef/source.def root@192.168.0.12:/files/ogg/dirdef/source.def

目标端:replicate 配置:

GGSCI (db2) 1> add replicat rinig1,specialrun //specialrun代表只运行一次

注意下面的target liuwenhe.T_MEMBER_INFO

GGSCI (server02) 12> view params rinig1

replicat rinig1

sourcecharset ZHS16GBK

setenv (NLS_LANG=AMERICAN_AMERICA.zhs16gbk)

sourcedefs ./dirdef/source.def

sourcedb infoservice,userid ogg,password ogg

discardfile ./dirrpt/rinig1.dsc,purge

map infoservice.T_MEMBER_INFO, target liuwenhe.T_MEMBER_INFO REPERROR (1403, discard);

最后打开源端的抓取进程即可

GGSCI (oracle3) 3>start ext_1

GGSCI (oracle3) 3> view report ext_1 ###查看输出结果

最后可以看日志:

ogg错误日志

[root@server02 dirdef]# find / -name ggserr.log

[root@server02 dirdef]#tail -f /files/ogg/ggserr.log

总结:

oracle到mysql的ogg需要借助defgen命令生成的映射文件,并把文件传到目标端相应位置下,才能完成数据库初始化,用于初始化的replicate进程,只会运行一次。注意字符集问题,就是源端的抓取进程配置的字符集和目标端replicate配置的字符集必须是一样的,否则可能会导致只导进去一部分数据。

ogg oracle 到mysql_借助OGG完成Oracle到MySQL的数据迁移相关推荐

  1. Oracle向mysql进行数据迁移

    Oracle向mysql进行数据迁移 1. 需要进行的类型替换 序号 Oracle(o) Mysql(m) 1 VARCHAR2.NVARCHAR2 VARCHAR 2 DATE DATETIME 3 ...

  2. angularjs 读取mysql_如何使用AngularJS PHP从MySQL获取数据

    1.表结构 我在教程示例中使用users表.CREATE TABLE `users` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `fnam ...

  3. gbase迁移mysql_基于datax实现从gbase到mysql的数据迁移--时间字段篇

    项目背景 前期已经写过几篇用datax实现异构数据迁移的文章,面对复杂的上游数据,无法用一种通用的方式来实现所有业务表的迁移,比如一个大业务表中rowid字段与表记录差异特别大(一个表有3亿条记录,里 ...

  4. Oracle数据迁移MySQL

    前言: 现今,Oracle数据迁移MySQL的需求已经越来越普遍,主要的迁移场景大致可以分为三类,第一类是涉及小表以及少量表的一次性迁移,无需进行增量同步,第二类是涉及大表以及多表的一次性迁移,第三类 ...

  5. Oracle到MySQL实时数据同步CloudCanal实战

    简述 CloudCanal 2.1.0.x 版本开始支持 Oracle 作为源端的数据迁移同步能力,目前邀请测试中. 本文通过 Oracle 到 MySQL 的数据迁移同步案例简要介绍这个源端的能力. ...

  6. oracle ogg双向通步,使用ogg的Oracle-Oracle的双向复制

    不使用数据泵完成Oracle-Oracle的双向复制. 操作系统:redhat  as   4.5 oracle version:10.2.0.1 源端ip:          172.17.61.1 ...

  7. ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步

    Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段.近期有场景需要做Oracle到Hadoop体系的实时导入,这里以此案例做以介绍. Oracle作为商业化的数据库解 ...

  8. ogg oracle 测试kafka_利用ogg实现oracle到kafka的增量数据实时同步

    前言 ogg即Oracle GoldenGate是Oracle的同步工具,本文讲如何配置ogg以实现Oracle数据库增量数据实时同步到kafka中,其中同步消息格式为json. 下面是我的源端和目标 ...

  9. Oracle Golden Gate(OGG)学习——源端安装OGG (数据库版本为Oracle 10g)

    GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与目标数据库的数据同步,保持亚秒级的数据延迟. GoldenG ...

最新文章

  1. 【XAduio2】6.如何枚举音频设备
  2. 机器学习实战-聚类分析KMEANS算法-25
  3. 2022年Python数据分析的宝藏地带
  4. Spring框架:跨域问题之使用@CrossOrigin注解解决失败的原因总结
  5. c++堆栈溢出怎么解决_StackOverFlowError 常见原因及解决方法
  6. 参加电子工业出版社博文视点举办的作者高峰论坛有感
  7. 运用ajax上传图片(formdata+input)
  8. MS08067红队攻防第三期 今晚7点 不见不散~
  9. 【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
  10. 【react】---redux-actions的基本使用---【巷子】
  11. 不允许对系统目录进行即席更新_不被允许再更新安卓系统,华为手机用户怎么办?华为回应!...
  12. C#汉字转拼音首字母
  13. 概率机器人(Probability Robotics)笔记 Chapter 9: 占据栅格建图(Occupancy Grid Mapping)
  14. 如何为py图表添加坐标轴/标题/图例等辅助元素
  15. python连接MySQL数据库的示例代码
  16. BBR原版/魔改/plus/锐速/七合一脚本linux加速脚本/硬盘挂载/cc防御/宝塔
  17. Webpack 安装css-loader和style-loader报错
  18. C语言详解系列——循环语句详解(3)do while语句的语法结构
  19. 【NOIP2013模拟】粉刷匠
  20. c++的armadillo库语法指南

热门文章

  1. 如何使用svconfigeditor.exe编辑WCF Service配置文件-配置一个基本的Endpoint(一)
  2. SpringBoot2.x 同个文件的加载顺序,静态资源文件
  3. (转)PHP生成图片缩略图
  4. 字符串匹配算法——KMP算法学习
  5. linux特殊权限SUID,SGID和SBIT的介绍
  6. 2星|《麦肯锡图表工作法》:用图表做商业分析的入门演示
  7. 剑指Offer(java版):字符串的排列
  8. MySQL 存储过程参数:in、out、inout
  9. @Html.ValidationSummary()作用
  10. 脚本程序gdb 脚本