一、源为ORACLE 11g,目的 MYSQL 5.6
二、从http://download.oracle.com/ 找到并下载相应安装包,直接释放到相应目录。建设全用root,数据库也用dba。因为可能要改系统参数。
三、ORACLE端配置
系统环境配置
#sqlplus /nolog
SQL>conn / as sysdba
SQL>ARCHIVE LOG LIST 查看归档状态
SQL> ALTER DATABASE ARCHIVELOG; 设成归档模式
如果已启动ORACLE,可能需要关闭再设置。
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
打开辅助日志
SQL> ALTER DATABASE ADD supplemental log data;
关闭回收站
SQL>alter system set recyclebin=off scope=both;
--创建相应表空间
SQL>create tablespace oggtbs datafile '/u01/app/oracle/oradata/onimei1/oggtbs01.dbf' size 500M autoextend on;
--授权
SQL>create user ggs identified by ggs default tablespace oggtbs;
SQL>GRANT create table to ggs;
SQL>GRANT CONNECT TO ggs;
SQL>GRANT ALTER ANY TABLE TO ggs;
SQL>GRANT ALTER SESSION TO ggs;
SQL>GRANT CREATE SESSION TO ggs;
SQL>GRANT FLASHBACK ANY TABLE TO ggs;
SQL>GRANT SELECT ANY DICTIONARY TO ggs;
SQL>GRANT SELECT ANY TABLE TO ggs;
SQL>GRANT RESOURCE TO ggs;
SQL>GRANT DELETE ANY TABLE TO ggs;
SQL>GRANT INSERT ANY TABLE TO ggs;
SQL>GRANT UPDATE ANY TABLE TO ggs;
SQL>GRANT RESTRICTED SESSION TO ggs;
SQL> @sequence.sql 根据提示输入:ggs
SQL> @marker_setup.sql prompt: ggs
SQL> @ddl_setup.sql prompt: ggs
SQL>@role_setup.sql
SQL> grant GGS_GGSUSER_ROLE to ggs;
SQL> @ddl_enable.sql
10g需要安装dbms_share_pool包:
SQL> @?/rdbms/admin/dbmspool.sql
SQL> @ddl_pin ggs;
SQL>QUIT;
#sqlplus /nolog
SQL>conn ggs/ggs
SQL>CREATE TABLE TEST (ID INT,NAME VARCHAR(50),TESTDATE DATE,PRIMARY KEY(ID));
SQL>QUIT;
GGS全局变量配置
#./ggsci
GGSCI (ora11g) >CREATE SUBDIRS
在源库上执行:
GGSCI (ora11g) 2> EDIT PARAMS ./GLOBALS
在统计模式下输入并保存:ggschema ggs
GGSCI (ora11g) 1> dblogin userid ggs password ggs
Successfully logged into database.
GGSCI (ora11g) 3> 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分钟,则把它作为警告写到错误日志中。
GGSCI (ora11g) 6> start mgr
Manager started.
GGSCI (ora11g) 7> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
添加并查看需要复制的表:
GGSCI (ora11g) 8> ADD TRANDATE ggs.test
GGSCI (ora11g) 9> info trandata ggs.*
配置抽取进程
GGSCI (ora11g) 11> edit params ext3
extract ext3
dynamicresolution
userid ggs,password ggs
exttrail /u01/ogg/11.2/dirdat/xs
table ggs.test;
--注意分号结尾
GGSCI (ora11g) 13> add extract ext3,tranlog,begin now
EXTRACT added.
GGSCI (ora11g) 14> add exttrail /u01/ogg/11.2/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操作,缺省不复制;
配置投递进程
GGSCI (ora11g) 17> edit params push3
extract push3
passthru
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.166,mgrport 7809
rmttrail /u01/ogg/11.2/dirdat/xs
table ggs.test;
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小时的进行警告;
配置define文件
GGSCI (ora11g) 21> edit params test
defsfile /u01/ogg/11.2/dirdef/test.prm
userid ggs,password ggs
table ggs.test;
去相应的目录下生产define文件:
[oracle@ora11g 11.2]$ ./defgen paramfile dirprm/test.prm
[root@ora11g ~]# scp /u01/ogg/11.2/dirdef/ah4.prm 192.168.0.166:/u01/ogg/11.2/dirdef/
GGSCI (ora11g) 18> add extract push3,exttrailsource /u01/ogg/11.2/dirdat/xs
EXTRACT added.
GGSCI (ora11g) 19> add rmttrail /u01/ogg/11.2/dirdat/xs,extract push3
RMTTRAIL added.
四、MYSQL目的端配置
#vi /etc/my.cnf
log-bin=master-bin
binlog-format=row
mysql -u root -p
mysql>CREATE DATABASE ggs;
mysql>use ggs;
mysql>CREATE TABLE test (ID INT,NAME VARCHAR(50),TESTDATE DATE,PRIMARY KEY(ID)) engine=innodb;
创建ogg的初始化目录
#./ggsci
GGSCI (mysql) 1> create subdirs
配置mgr
GGSCI (mysql) 2> edit params 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
GGSCI (mysql) 3> start mgr
Manager started.
GGSCI (mysql) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
配置checkpoint table
GGSCI(mysql)>dblogin sourcedb ggs,userid root,password 123456
GGSCI (mysql) 7> edit params ./GLOBALS
CHECKPOINTTABLE ggs.checkpoint
GGSCI (mysql) 8> add checkpointtable ggs.checkpointtab
Successfully created checkpoint table ggs.checkpointtab.
GGSCI (mysql) 9> info checkpointtable ggs.checkpointtab
在相应的mysql数据库中,也可以看到相应的表被添加了:
mysql> show tables;
+---------------+
| Tables_in_hr |
+---------------+
| test |
|checkpointtab_lox |
| checkpointtab |
+---------------+
配置应用进程
GGSCI (mysql) 10> edit params rep3
replicat rep3
sourcedefs /u01/ogg/11.2/dirdef/test.prm
TARGETDB ggs,userid root,password 123456
reperror default,discard
discardfile /u01/ogg/11.2/dirrpt/rep3.dsc,append,megabytes 50
map ggs.test, target ggs.test;
GGSCI (nosql2) 13> add replicat rep3,exttrail /u01/ogg/11.2/dirdat/xs,checkpointtable ggs.test
PS:
REPLICAT进程参数配置说明:
ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;
SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。
MAP:用于指定源端与目标端表的映射关系;
MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;
REPERROR:定义出错以后进程的响应,一般可以定义为两种:
ABEND,即一旦出现错误即停止复制,此为缺省配置;
DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
SQLEXEC:在进程运行时首先运行一个SQL语句;
GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。
MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。
五、测试和排错
在源端
GGSCI>START ext3
GGSCI>START push3
通过info all
应该可以看到 mgr,ext3,push3被启动,观察一会儿,会不会掉下来。
在目的端
GGSCI>START rep3
通过 info all
可以看到mgr,rep3
如果不能正常启动,可以查看 ggserr.log。查找原因。
常见可能的出错原因有:
1、由于/tmp/mysql.sock不存在,导致dbloing失败。在自定义的目录,通过export MYSQL_UNIX_TCP= 来指向文件,或者通过ln -s建立软链接。
2、由于分号或其他参数配置问题导致参数出错。
3、由于两边对应关系不一致,导致不能正常启动相应进程。
4、字符集的问题,建议两端都设成UTF8.
ORACLE端:
1). 关闭数据库
SQL>SHUTDOWN IMMEDIATE
2) 启动到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
LINUX环境配置:
# export NLS_LANG='American_America.AL32UTF8'
#export LANG=en_US.UTF-8
LANG,NLS_LANG,客户端OS 这3个字符集一致
(GB2312 ZHS16GBK)
(UTF-8 AL32UTF8)
MYSQL 端
CREATE DATABASE TEST DEFAULT CHARSET SET UTF-8
OGG 设置源端和目的端:
ggsci>edit params ./GLOBALS
在第一行加
CHARSET UTF-8
参考官方文档
http://docs.oracle.com/goldengate/1212/gg-winux/GWURF/preface.htm#GWURF101