Ogg | 您所在的位置:网站首页 › ogg同步到kafka大小写 › Ogg |
说明:这篇文章将介绍如何配置oracle到mysql的ogg同步 源端:ip-192.168.56.11 数据库类型-oracle 11.2.0.4 目标端:ip-192.168.56.71 数据库类型-mysql 5.7.25 1. 解压并准备目录(源端) su - oracle mkdir -p /home/oracle/ogg1/ tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /home/oracle/ogg1 (目标端) su - mysql mkdir -p /home/mysql/ogg2/ tar -xvf ggs_Linux_x64_MySQL_64bit.tar -C /home/mysql/ogg2 创建socket软链接,mysql ogg默认使用/tmp/mysql.sock 查看mysql socket的位置 (root@localhost)[(none)]> show variables like 'socket'; +---------------+-----------------------------+ | Variable_name | Value | +---------------+-----------------------------+ | socket | /opt/mydata/data/mysql.sock | +---------------+-----------------------------+ ln -s /opt/mydata/data/mysql.sock /tmp/mysql.sock 2. 创建目录,用户(源端) cd /home/oracle/ogg1 ./ggsci GGSCI> create subdirs # 在sqlplus创建管理ogg需要的数据库用户ggs SQL> create user ggs identified by ggs; SQL> grant connect,resource,select any dictionary,select any table,alter any table,flashback any table to ggs; SQL> grant insert any table,update any table,delete any table to ggs; SQL> grant execute on dbms_flashback to ggs; SQL> grant execute on utl_file to ggs; # 授予用户查看数据字典的权力 # 同步的表在哪个用户下,哪个用户就要拥有查看数据字典的权力,源端使用tom做测试 SQL> create user tom identified by tom; SQL> grant connect,resource,select any dictionary to tom; # 打开追加日志数据模式 SQL> alter database add supplemental log data; SQL> select supplemental_log_data_min from v$database; #须yes (目标端) cd /home/mysql/ogg2 ./ggsci GGSCI> create subdirs # 在mysql创建管理ogg需要的数据库用户ggt (root@localhost)[(none)]> create user ggt@'%' identified by 'ggt'; (root@localhost)[(none)]> grant all on *.* to ggt@'%'; (root@localhost)[(none)]> flush privileges; 3. 准备测试用的表(源端) # ogg的表必须有主键 SQL> create table tom.test1(id number primary key, name varchar2(30), ctime date); (目标端) (root@localhost)[(none)]> create database hello; (root@localhost)[(none)]> use hello; (root@localhost)[hello]> create table test2(id int primary key, name varchar(30), ctime datetime); 4. 配置define文件,异构的ogg需要这步(源端) GGSCI> edit params oracle_to_mysql ------------------------------------ defsfile dirdef/oracle_to_mysql.prm userid ggs,password ggs table tom.test1; 新开一个窗口 [root@orasingle ~]# su - oracle [oracle@orasingle ~]$ cd ogg1 [oracle@orasingle ogg1]$ ./defgen paramfile dirprm/oracle_to_mysql.prm [oracle@orasingle ogg1]$ scp dirdef/oracle_to_mysql.prm [email protected]:/home/mysql/ogg2/dirdef 5. 添加需要同步的表(源端) # 这里是添加表的附加日志 GGSCI> dblogin userid ggs, password ggs GGSCI> add trandata tom.test1 GGSCI> info trandata tom.test1 6. 添加checkpoint表(目标端) # 续传的功能 GGSCI> dblogin sourcedb hello, userid ggt, password ggt GGSCI> edit params ./GLOBALS #或使用vi编辑参数文件,注意GLOBALS是在ogg的主目录下面,使用绝对路径或者./GLOBALS,不能使用edit params GlOBALS,否则会进到dirprm目录下面 -------------------------------------------------------------------------- checkpointtable hello.checkpoint GGSCI> view params ./GLOBALS #查看参数文件 GGSCI> add checkpointtable hello.checkpoint #在数据库中创建检查点记录表 GGSCI> info checkpointtable hello.checkpoint 7. 配置管理进程的参数文件(源端) GGSCI> edit params mgr -------------------------------------------------------------------- port 7788 autorestart extract *,waitminutes 2,retries 5 purgeoldextracts /home/oracle/ogg1/dirdat/*,usecheckpoints,minkeephours 1,frequencyminutes 30 GGSCI> view params mgr (目标端) GGSCI> edit params mgr -------------------------------------------------------------------- port 7788 autorestart extract *,waitminutes 2,retries 5 purgeoldextracts /home/mysql/ogg2/dirdat/*,usecheckpoints,minkeephours 1,frequencyminutes 30 GGSCI> view params mgr # 参数解释autorestart-自动重启抽取进程,purgeoldextracts-定期清理trail文件 8. 配置抽取进程(源端) 8.1 编辑抽取参数文件 GGSCI> edit params ext1 ------------------------------------------------------------------------------------------- extract ext1 setenv(ORACLE_SID=orcl) #填源端的sid setenv(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) #填源端的字符集 userid ggs,password ggs rmthost 192.168.56.11,mgrport 7788 #填源端的ip,抽取的文件放到哪个地方 exttrail /home/oracle/ogg1/dirdat/et table tom.test1; 8.2 添加抽取进程 GGSCI> add extract ext1, tranlog, begin now 8.3 添加抽取进程需要的文件 GGSCI> add exttrail /home/oracle/ogg1/dirdat/et,extract ext1,megabytes 100 #设置trail文件最大100m,默认10m 9. 配置投递进程(源端) 9.1 编辑投递参数文件 GGSCI> edit params pump1 ------------------------------------------------------------------------ extract pump1 PASSTHRU #这是参数适用于源端和目标端表结构一致且没有过滤行 RMTHOST 192.168.56.71, MGRPORT 7788 #目标端ip RMTTRAIL /home/mysql/ogg2/dirdat/p1 #目标端文件的目录 TABLE tom.test1; 9.2 添加投递进程 GGSCI> add extract pump1,exttrailsource /home/oracle/ogg1/dirdat/et, begin now 9.3 添加投递到远程的文件 GGSCI> add rmttrail /home/mysql/ogg2/dirdat/p1, extract pump1,megabytes 100 10. 配置复制进程(目标端) 10.1 编辑复制参数文件 GGSCI> edit params rep1 ----------------------------------------------------------------- replicat rep1 sourcecharset ZHS16GBK #填源端的字符集 targetdb hello, userid ggt, password ggt sourcedefs /home/mysql/ogg2/dirdef/oracle_to_mysql.prm discardfile /home/mysql/ogg2/dirdat/rep1.dsc,append MAP tom.test1, TARGET hello.test2; -------------------------------------------------------------------- 10.2 增加复制进程 GGSCI> add replicat rep1,exttrail /home/mysql/ogg2/dirdat/p1 #注意这一步可能提示下面错误 ERROR: No checkpoint table specified for ADD REPLICAT. 解决办法:退出重新登陆,再执行那步操作 GGSCI> exit [mysql@mysqla ogg2]$ ./ggsci GGSCI> dblogin sourcedb hello, userid ggt, password ggt GGSCI> add replicat rep1,exttrail /home/mysql/ogg2/dirdat/p1 11. 启动进程源端 GGSCI> start mgr GGSCI> start ext1 GGSCI> start pump1 目标端 GGSCI> start mgr GGSCI> start rep1 在源端查看进程状态 GGSCI> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING EXTRACT RUNNING EXT1 00:00:00 00:00:09 EXTRACT RUNNING PUMP1 00:00:00 00:00:02 在目标端查看进程状态 GGSCI> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING REPLICAT RUNNING REP1 00:00:00 00:00:04 12. 测试同步与否(源端) SQL> insert into test1 values(25,'小豹子加油',sysdate); SQL> commit; (目标端) (root@localhost)[hello]> select * from test2; +----+-----------------+---------------------+ | id | name | ctime | +----+-----------------+---------------------+ | 25 | 小豹子加油 | 2019-04-21 11:44:06 | +----+-----------------+---------------------+ 同步完成,中文显示也没有问题 13. 记录报错的日志文件/home/oracle/ogg/ggserr.log 14. 总结14.1从ogg到mysql有字段类型的变化,比如oracle中date类型就是“年月日 时分秒”类型,到了mysql中只有“年月日”,所以mysql中需要定义成datetime类型。还有mysql中字符类型是默认不区分大小写的,oracle中明确区分大小写,所以在同步时如果字符类型上面有唯一索引,还会报错。 14.2异构的ogg比同构的ogg还需要define文件,定义表的结构。 |
CopyRight 2018-2019 实验室设备网 版权所有 |