名称 | 源端 | 目标端 |
---|---|---|
OGG版本 | OGG 19.1.0.0.4For Oracle | OGG 19.1.0.0.3 For MySQL |
数据库版本 | Oracle 11.2.0.4 | MySQL 5.7 |
OGG_HOME | /home/oracle/ogg | /opt/ogg |
IP地址 | 172.24.104.214 | 172.24.104.207 |
数据库用户 | scott | orcl |
mgr进程 | mgr | mgr |
extract进程 | exi | rei |
datapump进程 | expump |
基础环境配置:
查看当前环境是否满足要求:
SQL> SELECT NAME,LOG_MODE,OPEN_MODE,PLATFORM_NAME,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
如果条件不满足则实行该部分:
#### 开启归档(开启归档需要重启数据库)
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list;
#### 开启附加日志和强制日志
SQL> alter database add supplemental log data;
SQL> alter database force logging;
SQL> alter system switch logfile;
#### 启用OGG支持11.2.0.4或以上需要执行。
SQL> show parameter enable_goldengate_replication
SQL> alter system set enable_goldengate_replication=true;
#### 再次查看当前环境是否满足要求
SQL> SELECT NAME,LOG_MODE,OPEN_MODE,PLATFORM_NAME,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE
创建oracle用户:
创建ogg用户
#### 查看当前数据库已存在的表空间,可使用已有表空间或新建单独的表空间
SQL> SELECT TABLESPACE_NAME, CONTENTS FROM DBA_TABLESPACES;
#### 查看当前表空间文件数据目录
SQL> SELECT NAME FROM V$DATAFILE;
#### 创建一个新的OGG用户的表空间
SQL>CREATE TABLESPACE OGG_DATA DATAFILE '/u01/app/oracle/oradata/orcl/ogg01.dbf' SIZE 1G autoextend on next 100M maxsize 30G;
#### 创建ogg用户且指定对应表空间并授权
CREATE USER ogg IDENTIFIED BY ogg DEFAULT TABLESPACE OGG_DATA;
grant connect,resource,unlimited tablespace to ogg;
grant create session,alter session to ogg;
grant execute on utl_file to ogg;
grant select any dictionary, select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant select any transaction to ogg;
grant sysdba to ogg;
grant execute on dbms_streams_adm to ogg;
grant execute on dbms_flashback to ogg;
exec dbms_goldengate_auth.grant_admin_privilege('OGG');
MySQL数据库OGG用户创建
mysql> create user 'ogg'@'%' identified by 'ogg';
mysql> grant all on *.* to 'ogg'@'%';
#### 提前创建好ogg存放checkpoint表的数据库
mysql> create database ogg;
#### 编辑/创建mgr配置文件
ggsci> edit params mgr
PORT 7809
DYNAMICPORTLIST 8000-8050
-- AUTOSTART extract
-- AUTORESTART extract,retries 4,waitminutes 4
STARTUPVALIDATIONDELAY 5
ACCESSRULE, PROG *, IPADDR 172.24.104.*, ALLOW
ACCESSRULE, PROG SERVER, ALLOW
PURGEOLDEXTRACTS /home/oracle/ogg/dirdat/*, USECHECKPOINTS,MINKEEPFILES 3
#### 启动并查看mgr状态
ggsci> start mgr
ggsci> info all
ggsci> view report mgr
#### 编辑/创建mgr配置文件
ggsci> edit params mgr
PORT 7809
DYNAMICPORTLIST 8000-8050
-- AUTOSTART extract
-- AUTORESTART extract,retries 4,waitminutes 4
STARTUPVALIDATIONDELAY 5
ACCESSRULE, PROG *, IPADDR 172.24.104.*, ALLOW
ACCESSRULE, PROG SERVER, ALLOW
PURGEOLDEXTRACTS /opt/ogg/dirdat/*, USECHECKPOINTS,MINKEEPFILES 3
#### 启动并查看mgr状态
ggsci> start mgr
ggsci> info all
ggsci> view report mgr
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
#### 使用ogg用户登录appdb实例(TNS配置)对scott所有表增加表级补全日志
ggsci> dblogin userid ogg@orcl,password ogg
ggsci> add trandata scott.*
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
#### 创建一个新的增量抽取进程,从redo日志中抽取数据
ggsci> add extract exti,tranlog,begin now
#### 创建一个抽取进程抽取的数据保存路径并与新建的抽取进程进行关联
ggsci> add exttrail /home/oracle/ogg/dirdat/ms,extract exti,megabytes 1024
#### 创建抽取进程配置文件
ggsci> edit params exti
extract exti
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
setenv (ORCLE_SID = "orcl")
userid ogg@orcl,password ogg
discardfile /home/oracle/ogg/dirrpt/exti.dsc,append,megabytes 1024
exttrail /home/oracle/ogg/dirdat/ms
statoptions reportfetch
reportcount every 1 minutes,rate
warnlongtrans 1H,checkinterval 5m
table scott.*;
#### 启动源端抽取进程
ggsci> start exti
ggsci> info all
ggsci> view report exti
pump进程启动时需要与目标端的mgr进程进行连接,所以需要优先将目标端的mgr提前配置好,否则会报错连接被拒绝,无法传输抽取的日志文件到目标端对应目录下.
如果要关闭备份端的MGR进程一定要先关闭源端的PUMP进程,不至于
ABEND掉,出现未知的错误。
也就是
启动:先启动目标端mgr进程,再启动pump进程
关闭:先关闭源端pump进程,再关闭目标端mgr进程
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
#### 增加一个传输进程与抽取进程抽取的文件进行关联
shell> add extract extpump,exttrailsource /home/oracle/ogg/dirdat/ms
#### 增加配置将抽取进程抽取的文件数据传输到远程对应目录下
#### 注意rmttrail参数指定的是目标端的存放目录,需要目标端存在该目录路径
shell> add rmttrail /opt/ogg/dirdat/ms,extract extpump
#### 创建传输进程配置文件
shell>edit params extpump
extract extpump
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
setenv (ORCLE_SID = "orcl")
userid ogg@orcl,password ogg
RMTHOST 172.24.104.207,MGRPORT 7809
RMTTRAIL /opt/ogg/dirdat/ms
discardfile /home/oracle/ogg/dirrpt/extpump.dsc,append,megabytes 1024
table scott.*;
#### 启动源端抽取进程
#### 启动前确保目标端mgr进程已开启
ggsci> start extpump
ggsci> info all
ggsci> view report extpump
#### 创建mapping文件配置
shell> cd $OGG_HOME
shell> vim ./dirprm/mapping_scott.prm
defsfile ./dirdef/scott.def,purge
userid ogg@orcl,password ogg
table scott.*;
#### 基于配置生成scott用户的mapping文件
#### 默认生成的文件保存在$OGG_HOME目录的dirdef目录下
shell> ./defgen paramfile ./dirprm/mapping_scott.prm
#### 将该文件拷贝至目标端对应的目录
shell> scp ./dirdef/scott.def [email protected]:/opt/ogg/dirdef
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
ggsci> edit param ./GLOBALS
checkpointtable ogg.ggs_checkpoint
ggsci> dblogin sourcedb [email protected]:3306 userid ogg
ggsci> add checkpointtable ogg.ggs_checkpoint
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
#### 添加一个回放线程并与源端pump进程传输过来的trail文件关联,并使用checkpoint表确保数据不丢失
ggsci> add replicat repi,exttrail /opt/ogg/dirdat/ms,checkpointtable ogg.ggs_checkpoint
#### 增加/编辑回放进程配置文件
ggsci> edit params repi
replicat repi
targetdb [email protected]:3306,userid ogg,password ogg
sourcedefs /opt/ogg/dirdef/scott.def
discardfile /opt/ogg/dirrpt/repi.dsc,append,megabytes 1024
HANDLECOLLISIONS
MAP scott.*,target orcl.*;
注意:replicat进程只需配置完成,无需启动,待全量数据抽取完毕后启动目标端回放进程即可完成数据准实时同步。
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
#### 增加/编辑全量抽取进程配置文件
#### 其中RMTFILE指定抽取的数据直接传送到远端对应目录下
#### 注意:RMTFILE参数指定的文件只支持2位字符,如果超过replicat则无法识别
ggsci> edit params extinit
SOURCEISTABLE
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
SETENV (ORACLE_SID=orcl)
SETENV (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
USERID ogg@orcl,PASSWORD ogg
RMTHOST 172.24.104.207,MGRPORT 7809
RMTFILE /opt/ogg/dirdat/ms,maxfiles 100,megabytes 1024,purge
TABLE scott.*;
#### 启动并查看抽取进程正常
shell> nohup ./extract paramfile ./dirprm/extinit.prm reportfile ./dirrpt/extinit.rpt &
## 查看日志是否正常进行全量抽取
shell> tail -f ./dirrpt/extinit.rpt
#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
ggsci> edit params repinit
SPECIALRUN
END RUNTIME
TARGETDB [email protected]:3306,USERID ogg,PASSWORD ogg
EXTFILE /opt/ogg/dirdat/ms
DISCARDFILE ./dirrpt/repinit.dsc,purge
MAP scott.*,TARGET orcl.*;
#### 启动并查看回放进程正常
shell> nohup ./replicat paramfile ./dirprm/repinit.prm reportfile ./dirrpt/repinit.rpt &
#### 查看日志是否正常进行全量回放
shell> tail -f ./dirrpt/repinit.rpt
检查mysql数据库的数据是否与初始化抽取进程记录数一致。
向原数据库插入几条数据
启动目标端ogg回放线程(replicat)
start repi
检查目标数据库是否有刚才新增的测试数据。
由于原来的参数为table scott.*;已经包含了所有的表,这里不需要增加。
edit params exti
由于原来的参数为MAP scott.,target orcl.;已经包含了所有的表,这里不需要增加。
edit params repi
GGSCI (template) 2> dblogin userid ogg,password ogg;
Successfully logged into database.
GGSCI (template as ogg@orcl) 3> add trandata scott.*
GGSCI (template as ogg@orcl) 4>info trandata scott.*
这里没有修改无需重启。
shell> cd $OGG_HOME
shell> vim ./dirprm/mapping_scott.prm
defsfile ./dirdef/scott.def,purge
userid ogg@orcl,password ogg
table scott.*;
shell> ./defgen paramfile ./dirprm/mapping_scott.prm
shell> scp ./dirdef/scott.def [email protected]:/opt/ogg/dirdef
stop repi