第一部分:安装和基本配置
一、环境
两台rhel 6.4虚拟机,分别异构oracle到mysql数据库同步测试 Ip:192.168.0.23 部署oracle 11.2.0.4,goldgate 12.1.2.1.0 for oracle Ip:192.168.0.25 部署mysql5.5.9,goldengate 12.1.2.1.0 for mysql
二、Oracle to Mysql需要注意的地方:
对MySQL支持的数据类型:
CHAR|DATETIME|VARCHAR|TIMESTAMP|INT|BINARYTINYINT|VARBINARYSMALL INT|TEXTMEDIUM INT|TINYTEXTBIG INT|MEDIUMTEXTDECIMAL|LONGTEXTFLOAT|BLOBDOUBLE|TINYBLOBDATE|MEDIUMBLOBTIME|LONGBLOBYEAR|ENUM|BIT(M)
不支持的数据类型
?The XML,SET,and Geometry data types and similar are not supported. ?There is limited support for the Interval data type. Mysql字符集: Database create database test charset utf8; Table create table test( id int,name char(100)) charset utf8; Column create table test ( id int,name1 char(100) charset gbk,name2 char(100) charset utf8));
Mysql用户权限:
INSERT,UPDATE,DELETE on target tables CREATE TABLE SELECT ANY TABLE or SELECT ON database.table
数据库引擎:
Oracle GoldenGate supports InnoDB storage engine for a source MySQL database,goldengate对mysql只支持innodb引擎,所以,在创建mysql端的表的时候,要指定表为innodb引擎。create table mysql (name char(10)) engine=innodb; 当然5.9默认的存储引擎就是InnoDB。
三、Oracle端的基础配置
1.安装oracle11g,开归档模式,略过
2.在源端安装OGG将ogg压缩包(V47367-01.zip)解压到 /u01 下
ogg 12c的安装和以前的版本安装不同,使用了OUI的安装方式,以前的版本直接解压就可以了.所以最好要有x环境.如果没有,也支持静默安装. 安装步骤如下: [[email?protected] Disk1]$ ./runInstaller 显示欢迎界面,点下一步,

gg 12c只支持 oracle 11g和oracle 12c,选择合适的oracle版本.

software location定义了ogg将要安装的位置,database location定义了oracle数据库软件的安装位置,并且定义manager的端口.

出现安装信息汇总,选择"install"安装. 把gg的安装目录分别到加LD_LIBRARY_PATH和PATH变量中.整个安装过程还是十分简单,虽然也是oui的安装方式,只是在software和database location处有可能会产生误解。 下面是oracle用户的环境变量设置
[[email?protected] ~]$ cat .bash_profile
bash_profile:
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc . ~/.bashrc
fi
User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME OGG_HOME=$ORACLE_BASE/product/11.2.0/ogg12c; export OGG_HOME ORACLE_SID=oggtt; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=$ORACLE_HOME/bin:$OGG_HOME:$BASE_PATH:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
?
create subdirectories:
[[email?protected] ogg12c]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO Linux,x64,64bit (optimized),Oracle 11g on Aug 7 2014 09:14:25 Operating system character set identified as UTF-8.
Copyright (C) 1995,2014,Oracle and/or its affiliates. All rights reserved. GGSCI (oggtest) 1> create subdirs
Creating subdirectories under current directory /u01/app/oracle/product/11.2.0/ogg12c
Parameter files /u01/app/oracle/product/11.2.0/ogg12c/dirprm: already exists Report files /u01/app/oracle/product/11.2.0/ogg12c/dirrpt: already exists Checkpoint files /u01/app/oracle/product/11.2.0/ogg12c/dirchk: already exists Process status files /u01/app/oracle/product/11.2.0/ogg12c/dirpcs: already exists SQL script files /u01/app/oracle/product/11.2.0/ogg12c/dirsql: already exists Database definitions files /u01/app/oracle/product/11.2.0/ogg12c/dirdef: already exists Extract data files /u01/app/oracle/product/11.2.0/ogg12c/dirdat: already exists Temporary files /u01/app/oracle/product/11.2.0/ogg12c/dirtmp: already exists Credential store files /u01/app/oracle/product/11.2.0/ogg12c/dircrd: already exists Masterkey wallet files /u01/app/oracle/product/11.2.0/ogg12c/dirwlt: already exists Dump files /u01/app/oracle/product/11.2.0/ogg12c/dirdmp: already exists
3.源端的相关基础配置
3.1 修改数据库为归档模式,略过。 3.2 打开辅助日志
打开辅助日志:
alter database add supplemental log data;
3.3 关闭回收站 3.2 打开辅助日志
关闭回收站:
alter system set recyclebin=off scope=both;(10G需要,11g不需要) System altered.
3.4 创建复制用的用户,并授权
create user:
SQL> create tablespaceoggtbsdatafile ‘/u01/app/oracle/oradata/oggtt/oggtbs01.dbf‘ size 500M autoextend on; SQL> create user ggs identified by ggs default tablespaceoggtbs;
User created.
SQL> grant dba to ggs;
Grant succeeded. 测试系统,授予了dba权限,科用以下权限替代dba权限 GRANT create table to ggs;? GRANT CONNECT TO ggs;? GRANT ALTER ANY TABLE TO ggs;? GRANT ALTER SESSION TO ggs;? GRANT CREATE SESSION TO ggs;? GRANT FLASHBACK ANY TABLE TO ggs; GRANT SELECT ANY DICTIONARY TO ggs;? GRANT SELECT ANY TABLE TO ggs;? GRANT RESOURCE TO ggs;? GRANT DELETE ANY TABLE TO ggs;? GRANT INSERT ANY TABLE TO ggs;? GRANT UPDATE ANY TABLE TO ggs;? GRANT RESTRICTED SESSION TO ggs; System altered.
3.5 登陆到ogg,执行初始化
初始化:
在源库上执行 第一步: GGSCI (oggtest) 2> edit params ./globals ggschema ggs 第二步: [[email?protected] ogg12c]$ sqlplus / as sysdba sql>@sequence.sql根据提示输入:ggs sqlplus / as sysdba 需要设置enable_goldengate_replication SQL> alter system set enable_goldengate_replication =true scope=both; sql>@marker_setup.sql prompt: ggs sql>@ddl_setup.sql prompt: ggs sql>@role_setup.sql prompt: ggs sql>grant GGS_GGSUSER_ROLE to ggs; SQL>@ddl_enable.sql 10g需要安装dbms_share_pool包: sql> @?/rdbms/admin/dbmspool.sql sql> @ddl_pinggs;
四、Mysql端的基础配置
1.安装mysql5.5.9略过 2.给mysqlroot配置密码:
MySQL端安装:
mysql> use mysql Database changed mysql> UPDATE user SET Password=PASSWORD(‘123456‘) where USER=‘root‘ and host=‘root‘ or host=‘localhost‘; Query OK,2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0
mysql> show grants for [email?protected];Grants for [email?protected] ALL PRIVILEGES ON?.?TO ‘root‘@‘localhost‘ WITH GRANT OPTIONGRANT PROXY ON ‘‘@‘‘ TO ‘root‘@‘localhost‘ WITH GRANT OPTION
2 rows in set (0.08 sec)
mysql> FLUSH PRIVILEGES; Query OK,0 rows affected (0.01 sec) mysql> exit
3.因为复制需要二进制日志,所以启动mysql的时候需要启用二进制日志 查看mysql是否开启了二进制文件
二进制文件:
mysql> show variables like ‘log_bin‘;Variable_nameValuelog_binON
1 row in set (0.00 sec)
mysql> show master status;FilePositionBinlog_Do_DBBinlog_Ignore_DBmysql-bin.000003487?
1 row in set (0.05 sec)
[[email?protected] ~]# mysqlbinlog mysql-bin.000003?
初始化备库端:
[[email?protected]]
Oracle GoldenGate Command Interpreter for MySQL Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140920.0203 Linux,MySQL Enterprise on Sep 20 2014 03:43:22 Operating system character set identified as UTF-8. Copyright (C) 1995,Oracle and/or its affiliates. All rights reserved. GGSCI (ttmysql) 1> create subdirs
Creating subdirectories under current directory /ogg
Parameter files /ogg/dirprm: already exists Report files /ogg/dirrpt: created Checkpoint files /ogg/dirchk: created Process status files /ogg/dirpcs: created SQL script files /ogg/dirsql: created Database definitions files /ogg/dirdef: created Extract data files /ogg/dirdat: created Temporary files /ogg/dirtmp: created Credential store files /ogg/dircrd: created Masterkey wallet files /ogg/dirwlt: created Dump files /ogg/dirdmp: created
第一部分安装和基本配置完成。
第二部分:oracle源端配置
源端配置大致分为如下三个步骤:配置mgr,配置抽取进程,配置投递进程。? 在源端先创建一张表,记得带主键:
oracle建表:
SQL> create user chen identified by chen default tablespace users; User created. SQL> grant dba to chen; Grant succeeded. SQL> conn chen/chen; Connected. SQL> create table student (id int,namevarchar(20),primary key(id));
Table created.
1.登陆ogg,配置全局设置
oracle配置全局设置:
[[email?protected] ~]
Oracle GoldenGate Command Interpreter for Oracle Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO Linux,Oracle and/or its affiliates. All rights reserved.
GGSCI (oggtest) 1>dblogin userid ggs password ggs Successfully logged into database.
GGSCI (oggtest as [email?protected]) 2> view params ./GLOBALS
ggschema ggs GGSCI (oggtest as [email?protected]) 3>
2.配置mgr
配置mgr:
GGSCI (oggtest as [email?protected]) 4> edit param mgr PORT 7809 DYNAMICPORTLIST 7810-7909 --AUTOSTART ER * AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3 PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints,minkeepdays 3 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45
MANAGER进程参数配置说明:? PORT:指定服务监听端口;这里以7809为例,默认端口为7809? DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;? COMMENT:注释行,也可以用--来代替;? AUTOSTART:指定在管理进程启动时自动启动哪些进程;? AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;? PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。 LAGREPORT、LAGINFO、LAGCRITICAL:? 定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。
3.启动mgr,并查看状态
启动mgr:
GGSCI (oggtest as ggs@oggtt) 5> start mgr MGR is already running. GGSCI (oggtest as ggs@oggtt) 6> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING?
4.添加并查看需要复制的表:
添加并查看需要复制的表:
GGSCI (oggtest as [email?protected]) 7> add trandata chen.student Logging of supplemental redo data enabled for table CHEN.STUDENT. TRANDATA for scheduling columns has been added on table ‘CHEN.STUDENT‘.
GGSCI (oggtest as [email?protected]) 8> info trandata chen.* Logging of supplemental redo log data is enabled for table CHEN.STUDENT. Columns supplementally logged for table CHEN.STUDENT: ID. GGSCI (oggtest as [email?protected]) 9>
如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。不开启表级的最小附加日志,update的redo信息不记录没有进行更新的字段信息,如主键不更新的话主键不记录在redo中,所以会导致同步失败。
5.配置抽取进程
配置抽取进程:
GGSCI (oggtest as [email?protected]oggtt) 9> edit params ext3 extract ext3 dynamicresolution userid ggs,password ggs exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs table chen.student; --table chen.teacher;
GGSCI (oggtest as [email?protected]) 10> add extract ext3,tranlog,begin now EXTRACT added.
GGSCI (oggtest as [email?protected]) 11> add exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs,extract ext3 EXTTRAIL added.
ext的模板可以是:? EXTRACT extmb setenv (NLS_LANG = "AMERICAN_AMERICA.UTF8") SETENV (ORACLE_HOME = "/u01/oracle/product/11.2.0/db_1") SETENV (ORACLE_SID = "orcl") USERID ggs,PASSWORD ggs --GETTRUNCATES REPORTCOUNT EVERY 1 MINUTES,RATE DISCARDFILE ./dirrpt/extmb.dsc,APPEND,MEGABYTES 1024 --THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENS 60000 DBOPTIONS ALLOWUNUSEDCOLUMN WARNLONGTRANS 2h,CHECKINTERVAL 3m EXTTRAIL ./dirdat/mb --TRANLOGOPTIONS EXCLUDEUSER USERNAME FETCHOPTIONS NOUSESNAPSHOT TRANLOGOPTIONS CONVERTUCS2CLOBS TABLE hr.emp;
SETENV:配置系统环境变量? USERID/ PASSWORD: 指定OGG连接数据库的用户名和密码,这里使用3.4部分中创建的数据库用户OGG;? COMMENT:注释行,也可以用--来代替;? TABLE:定义需复制的表,后面需以;结尾? TABLEEXCLUDE:定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉得表。? GETUPDATEAFTERS|IGNOREUPDATEAFTERS:? 是否在队列中写入后影像,缺省复制? GETUPDATEBEFORES| IGNOREUPDATEBEFORES:? 是否在队列中写入前影像,缺省不复制? GETUPDATES|IGNOREUPDATES:? 是否复制UPDATE操作,缺省复制? GETDELETES|IGNOREDELETES:? 是否复制DELETE操作,缺省复制? GETINSERTS|IGNOREINSERTS:? 是否复制INSERT操作,缺省复制? GETTRUNCATES|IGNORETRUNDATES:? 是否复制TRUNCATE操作,缺省不复制;
6.配置投递进程
配置投递进程:
GGSCI (oggtest as ggs@oggtt) 12> edit params push3 extract push3 passthru dynamicresolution userid ggs,password ggs rmthost 192.168.0.25,mgrport 7809 rmttrail /ogg /dirdat/xs table chen.student;
GGSCI (oggtest as [email?protected]) 13> add extract push3,exttrailsource /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs EXTRACT added. GGSCI (oggtest as [email?protected]) 14> add rmttrail /ogg/dirdat/xs,extract push3 RMTTRAIL added.
push的模板:? EXTRACT pushmb? SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")? USERID ggs,PASSWORD ggs? PASSTHRU? RMTHOST 192.168.0.165,MGRPORT 7809,compress? RMTTRAIL /u01/ogg/11.2/dirdat/xs? TABLE hr.ah4;?
RMTHOST:指定目标系统及其Goldengate Manager进程的端口号,还用于定义是否使用压缩进行传输,本例中的compress为压缩传输;? RMTTRAIL:指定写入到目标断的哪个队列;? EXTTRAIL:指定写入到本地的哪个队列;? SQLEXEC:在extract进程运行时首先运行一个SQL语句;? PASSTHRU:禁止extract进程与数据库交互,适用于Data Pump传输进程;? REPORT:定义自动定时报告;? STATOPTIONS:定义每次使用stat时统计数字是否需要重置;? REPORTCOUNT:报告已经处理的记录条数统计数字;? TLTRACE:打开对于数据库日志的跟踪日志;? DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;? DBOPTIONS:指定对于某种特定数据库所需要的特殊参数;? TRANLOGOPTIONS:指定在解析数据库日志时所需要的特殊参数,例如:对于裸设备,可能需要加入以下参数 rawdeviceoggset 0? WARNLONGTRANS:指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔3分钟检查一次场交易,对于超过2小时的进行警告;
7.配置define文件
因为是异构关系,所以define两个数据库之间表的关系映射,是必不可少的。
配置define文件:
GGSCI (oggtest as [email?protected]) 17> edit params chen defsfile /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student userid ggs,password ggs table chen.student; [[email?protected] ogg12c]$ ./defgen paramfile dirprm/chen.prm
并将生成的/u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student传到目的端的相应目录中去? scp /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student 192.168.0.25:/ogg/dirdef/? 注意:mysql端的ogg我是装在oracle用户下的。
第三部分:mysql目标端的配置
目的端配置大致分为如下三个步骤:配置mgr,配置checkpoint table,配置应用进程 在目的端先创建一张表,记得带主键:
mysql创建表:
mysql> create database chen charset utf8; Query OK,1 row affected (0.00 sec) mysql> use chen; Database changed mysql> create table student(id int,name varchar(20),primary key(id)) charset utf8; Query OK,0 rows affected (0.11 sec)
mysql> show tables;Tables_in_chenstudent
1 row in set (0.00 sec)
1.配置mgr
配置mgr:
GGSCI (oggtest) 1> edit params mgr PORT 7809 DYNAMICPORTLIST 7810-7909 --AUTOSTART ER * AUTORESTART EXTRACT *,minkeepdays 3 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45 GGSCI (oggtest) 1> start mgr Manager started.
GGSCI (oggtest) 2> info ERROR: Invalid command.
GGSCI (oggtest) 3> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING?
2.配置checkpoint table
配置checkpoint table:
GGSCI (ttmysql) 5> edit params ./GLOBALS CHECKPOINTTABLE chen.checkpoint GGSCI (ttmysql) 8> dblogin sourcedb chen userid root,password 123456 Successfully logged into database. GGSCI (ttmysql DBLOGIN as root) 9> add checkpointtable chen.checkpointtab Successfully created checkpoint table chen.checkpointtab.
3.配置应用进程:
配置应用进程:
GGSCI (nosql2) 10> edit params rep3
replicat rep3 sourcedefs /ogg/dirdef/chen.student SOURCEDB chen,userid root,password 123456 reperror default,discard discardfile /ogg/dirrpt/F,append,megabytes 50 map chen.student,target chen.student;
GGSCI (ttmysql DBLOGIN as root) 11> add replicat rep3,exttrail /ogg/dirdat/xs,checkpointtable chen.checkpointtab REPLICAT added.
REPLICAT进程参数配置说明:? ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;? SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。? MAP:用于指定源端与目标端表的映射关系;? MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;? REPERROR:定义出错以后进程的响应,一般可以定义为两种:? ABEND,即一旦出现错误即停止复制,此为缺省配置;? DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。? DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;? SQLEXEC:在进程运行时首先运行一个SQL语句;? GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。? MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。
4.测试
在目的端启动rep3进程,在源端启动ext3和push3进程。? 在源端的student表中插入一条数据,看是否在目的端的student表中能看到。? 源端进程?
源端进程:
GGSCI (oggtest as ggs@oggtt) 31> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING? EXTRACT RUNNING EXT3 00:00:00 00:00:09? EXTRACT RUNNING PUSH3 00:00:00 00:00:09? 源端插入数据 SQL> insert into student values(3,‘xinxin‘);?
1 row created.
目标端进程?
目标端进程:
GGSCI (ttmysql DBLOGIN as root) 16> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING? REPLICAT RUNNING REP3 00:00:00 00:00:03? 查询目标端数据库
mysql> select * from student;idname2jia3xinxin
2 rows in set (0.00 sec)
到此完成ogg异构oracle到mysql数据库准实时数据同步。
第四部分:总结
本测试主要描述了针对一个测试表异构从oracle到mysql实现准实时同步数据。为了实现数据同步,需要配好OGG的几个进程。? 1、Manager管理进程在两端开启,监控和重启其他进程;分配数据存储和报告错误及事件(进程不能run,需要仔细查看ggserr.log,此日志在ogg安装目录下)。? 2、Extract进程从日志中抓取并传输到target端事务数据;extract日志抓取根据参数配置可分为本地和异地。本文档在源端配置了两个ext进程,ext3(本地),push3(异地)。? 3、Server Collector进程在target(接受)端接受数据并写入trail文件;? 4、Replicat进程读取trail文件,并应用到traget数据库;? 5、trail文件时gg自己抓捕信息的文件,是一个OS文件,存放在./dirdat/下,以xs00000命名,N顺序1,2,3…此文件用完可配置参数自动删除。
第五部分:新加表的同步
1、源端配置
1.1、Table chen.t1为新加表
Sqlpus下执行? Create table chen.t1 as select * from chen.student; Alter table chen.t1 add constraint pk_id primary key (id);
1.2、配置源端抽取参数
配置源端抽取参数:
GGSCI (oggtest) 13> view params ext3
extract ext3 dynamicresolution userid ggs,password ggs exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs table chen.student; table chen.t1;
GGSCI (oggtest) 14> view params push3
extract push3 passthru dynamicresolution userid ggs,password ggs rmthost 192.168.0.25,mgrport 7809 rmttrail /ogg/dirdat/xs table chen.student; table chen.t1;
1.3、添加需要同步的表
添加需要同步的表:
add trandata chen.t1 --添加需要同步的表 查看是否添加成功 GGSCI (oggtest) 18> dblogin userid ggs,password ggs Successfully logged into database. GGSCI (oggtest as [email?protected]) 19> INFO TRANDATA chen.* Logging of supplemental redo log data is enabled for table CHEN.STUDENT. Columns supplementally logged for table CHEN.STUDENT: ID. Logging of supplemental redo log data is enabled for table CHEN.T1. Columns supplementally logged for table CHEN.T1: ID. GGSCI (oggtest as [email?protected]) 20>
1.4重新生成异构表的关系映射
重新生成异构表的关系映射:
GGSCI (oggtest as [email?protected]) 20> view params chen
defsfile /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student userid ggs,password ggs table chen.student; table chen.t1;
用命令生成映射(注意因为与原映射文件名相同,原映射文件需要改名备份)? [[email?protected] ogg12c]$ ./defgen paramfile dirprm/chen.prm? 并将生成的/u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student传到目的端的相应目录中去? scp /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student 192.168.0.25:/ogg/dirdef/
2、目标端配置
1、目标端建chen.t1表,带主键
Show create table chen.studentG,查看,改表名就行。
2、目标端修改复制进程参数
目标端修改复制进程参数:
GGSCI (ttmysql) 8> view params rep3
replicat rep3 sourcedefs /ogg/dirdef/chen.student SOURCEDB chen,discard discardfile /ogg/dirrpt/rep4.dsc,target chen.student; map chen.t1,target chen.t1;
3、启动目标端和源端进程,查看同步情况
先info all查看进程情况? 目标端:? Start mgr? Start rep3? 源端:? Start mgr? Start ext3? Start push3? 分别查看ggserr.log,没有报错,进程正常? 查看目标端复制情况,因为源端是用create table as select建表,带有数据,但发现原数据没有同步到目标端,随后在源端insert的数据能同步到目标端。? 第六部分:表数据在源端的导出和目标端的导入? 前提:需要在源端配置相关mgr,ext等进程工作正常,涉及到的异构表的转换文件准备好,目标端rep进程配置好,但不启用。(以上设置参考前几部分的配置)
1、建测试表和测试SQL
建测试表和测试SQL:
SQL> conn chen/chen Connected. / 以chen为应用用户 / SQL> create table tt01 (t1 int primary key,t2 int,t3 varchar2(30)); Table created. / 为别在source和target创建该测试用表,在这里我们先不考虑同步DDL/ SQL> create sequence seqt1 start with 1 increment by 1; Sequence created. declare #此程序测试同步复制 rnd number(9,2); begin for i in 1..100000 loop insert into tt01 values(seqt1.nextt01al,i*dbms_random.value,‘NANFANG IS TESTING‘); commit; end loop; end; PL/SQL procedure successfully completed.
SQL> begin
loop delete from tt01 where rownum=1; commit; loop delete from tt01 where rownum=1; commit;
insert into tt01 values(seqt1.nextt01al,200000*dbms_random.value,‘NANFANG IS UPDATING‘);? commit;? insert into tt01 values(seqt1.nextt01al,300000*dbms_random.value,‘NANFANG IS UPDATING‘);? commit;? update tt01 set t2=t2+10 where rownum=1;? commit;? dbms_lock.sleep(1);? end loop;? end; /
2、从源端导出表数据
从源端导出表数据:
/ 注意在配置完replicat后,不要去启动它;直到完成initial load才能启动/ / 接下来要配置initial load使用的extract和replicat /
add extract einit,sourceistable
/?以sourceistable选项创建extract?/
view params einit extract einit SOURCEISTABLE userid ggs,password ggs RMTHOST 59.202.48.46,MGRPORT 7809 RMTFILE /u01/app/gg12c/dirdat/chentt1 Table chen.tt1;
/?之后我们需要在命令行界面下调用该extract?/ extract paramfile dirprm/einit.prm 3.在目标端导入数据 首先需要在mysql下建表 use chen create table tt01 (t1 int primary key,t2 int,t3 varchar(30)); /?接下来我们要在target上配置initial load使用的replicat,以导入之前的EXTFILE?/ ggsci下操作 add replicat rinit,specialrun
异构导入的参数配置 edit params rinit replicat rinit SPECIALRUN sourcedefs /u01/app/gg12c/dirdef/chen.tt1 SOURCEDB chen,password 123456 EXTFILE /u01/app/gg12c/dirdat/chentt1 ASSUMETARGETDEFS map chen.tt1,target chen.tt1;
/?之后我们在命令行上调用该replicat?/ os $GGHOME下操作 replicat paramfile dirprm/rinit.prm?
利用OGG将原表数据的导出,再异构导入,后启动复制进程,追同步日志,这一原理能实现在线oracle到mysql的数据迁移。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|