- A+
oracle11g ASM(单节点RAC)使用ogg配置双活步骤
配置思路:
先配置单向同步,单向同步配置完成后说明ogg环境是正常可用的,单向配置成功后再配置双向同步。在配置单向同步的过程中先配置dml同步,再配置ddl同步,在配置dml同步的过程中先配置insert和delete同步,再配置update同步。
总体思路如下:
(ii)再添加update单向同步
(iii)然后配置ddl单向同步
(iv)接下来配置双向同步包括dml和ddl同步
(v)最后配置避免循环同步的设置
配置单向同步
数据库配置
一、开启数据库级别和表级附加日志
1、开启数据库级别的附加日志:
查询数据库是否已经开启附加日志功能
SQL>select supplemental_log_data_min from v$database;
正常值应该是NO,即数据库没有开启附加日志功能
2、开启数据库级别的附加日志功能
SQL>alter database add supplemental log data;
3、附加日志功能是对下一个日志组起作用的,对当前日志组不 生效,所以开启数据库附加日志功能后必须立即切换日志组, 目的是使附加日志功能生效。
切换当前日志组:
SQL〉ALTER SYSTEM ARCHIVE LOG CURRENT;
或
SQL〉ALTER SYSTEM SWITCH LOGFILE;
4、表级别附加日志功能可以用sql开启,但是较为繁琐,稍后安 装完ogg后可以使用ogg提供的开启表级附加日志的功能。 表级附加日志 - dba_log_groups
针对每一个表设定在日志中所要额外记录的列
Alter table <table> add supplemental log group <group> (column,..) always;
OGG提供了add trandata命令,无需手工写sql 。
注:此步暂不做任何修改,安装完ogg后使用ogg提供的开 启表级附加日志的功能:add trandata hr.* 即对hr用户下的 所有的表全部开启表级附加日志功能。
5、创建ogg同步数据时要使用的数据库用户并授权
在源端和目标端都要执行创建用户并授权的操作
执行如下指令:
源端:
CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
GRANT CONNECT TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT ALTER SESSION TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT ALTER ANY TABLE TO goldengate;
GRANT SELECT ANY TRANSACTION to goldengate;
目标端:
CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
GRANT ALTER SESSION TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT CONNECT TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT SELECT ANY TRANSACTION to goldengate;
GRANT INSERT ANY TABLE TO goldengate;
GRANT UPDATE ANY TABLE TO goldengate;
GRANT DELETE ANY TABLE TO goldengate;
注:源端和目标端的goldengate用户的权限是不同的,在源端goldengate用户只有所有的查询权限,在目标端goldengate用户需要有insert、udapte、delete的权限,因为源端的数据要同步到目标端,所以在目标端goldengate用户必须有对任意表增删改的权限才能同步数据。在数据库同步过程中产生的所有事物都属于goldengate用户,由goldengate用户修改到需要同步的用户的schema中。goldengate用户是ogg软件在数据库中的用户,ogg软件对数据所有的操作都是由goldengate用户来完成的。
ogg配置
二、ogg安装
源端和目标端都要安装ogg软件
1、使用oracle用户上传软件包
注:ogg的软件包命名很长,中间有空格。上传到linux后 unzip加压失败,unzip不允许压缩文件名包含空格,所以 在上传之前必须先修改软件包名,或者上传完成后重命名 软件包,重命名指令如下:
mv Oracle GoldenGate V11.2.1.0.1 for Oracle 11g on Linux x86.zip goldengate.zip
2、创建软件安装目录并解压缩软件包:
[oracle@edsir1p8-PROD4 ~]$ cd /home/oracle/software [oracle@edsir1p8-PROD4 ~]$ mkdir Goldengate [oracle@edsir1p8-PROD4 ~]$mv goldengate.zip ./ Goldengate [oracle@edsir1p8-PROD4 ~]$cd Goldengate [oracle@edsir1p8-PROD4 Goldengate]$ unzip goldengate.zip正常情况下解压缩完成以后就可以使用了。
执行如下命令确认ogg是否可以正常使用:
进入ogg解压目录:
[oracle@edsir1p8-PROD4 Goldengate]$ ./ggsci
如果不能正常进入ogg终端,报错如下:
不能找到shared object :xxx.lib,xxxx.io,xxxx.LD.........
总之就是关于找不到共享类库或者是第三方类库工具等 的报错信息,解决方法是配置环境变量,指定ogg需要使 用的oracle类库路径。
解决方法:
编辑.bash_profile文件,重新编译使之生效。
配置完成后的.bash_profile文件截图如下:
注:.bash_profile概要文件参考:ogg/.bash_profile_137.txt
和ogg/.bash_profile_138.txt
重新编译使之生效:
执行如下指令:
[oracle@edsir1p8-PROD4 ~]$ cd /home/oracle [oracle@edsir1p8-PROD4 ~]$ . ./.bash_profile重新执行如下指令应该可以正常进入ogg终端:
[oracle@edsir1p8-PROD4 Goldengate]$ ./ggsci三、manager进程配置
1、编辑mgr进程参数文件:
GGSCI (edsir1p8.us.oracle.com) 2> edit param mgr
编辑完成后截图如下:
mgr参数文件内容参考:ogg/mgr_137.txt
2、启动mgr进程:
GGSCI (edsir1p8.us.oracle.com) 4> start mgr
3、确认进程运行状态:
GGSCI (edsir1p8.us.oracle.com) 4> info all
成功启动的效果如下:
注:mgr进程参数文件各个参数的意义:
DYNAMICPORTLIST:动态分配端口时端口的选择范围
purgeoldextracts:定时删除抽取队列文件
四、extract进程配置
1、添加extract进程:exta
GGSCI (edsir1p8.us.oracle.com) 5> add ext exta, tranlog, begin now
2、指定extract进程抽取到的本地队列
GGSCI>add exttrail /home/oracle/software/Goldengate/dirdat/ra,ext exta,MEGABYTES 20
3、编辑exta进程的参数文件:
GGSCI (edsir1p8.us.oracle.com) 6> edit param exta
编辑完成后效果如下:
exta进程的参数文件参考:ogg/exta_137.txt
4、开启表级附加日志功能
GGSCI (edsir1p8.us.oracle.com) 24> add TRANDATA hr.*
开启hr用户模式下所有表的表级附加日志功能
5、修改hr用户模式下所有的表为logging类型
具体步骤参考下面模块:nologging类型的表怎样实现同步
6、启动exta进程
GGSCI (edsir1p8.us.oracle.com) 7> start exta
正常启动后的截图如下:
注:dpea和repb是稍后需要添加的进程,只要exta的状态 是running 就表示正常启动。
exta进程需要抽取PROD4实例的redo,但是PROD4的redo文件存储在asm上,并且是OMF类型的文件。exta进程不能通过访问PROD4实例来获取redo文件,只能通过+ASM实例来抽取PROD4的redo文件,详细配置exta进程访问+ASM实例的步骤和注意事项参考:ogg/配置exta进程访问asm实例的步骤.docx
五、extract data pump进程配置
1、添加extract data pump进程
该进程的作用是读取本地队列ra中的数据到远程队列。ra 中的数据是exta进程从redo中抽取进来的。使用该进程 可以实现断点续传功能。如果不配置该进程直接使用exta进程通过内存同步数据到目标端,那么一旦目标端网络故障或者repa进程异常都会导致数据丢失,数据无法同步到目标端,并且数据将永久的丢失了,源端和目标端数据再也无法实现同步。
添加pump进程:
GGSCI >ADD EXTRACT dpea, EXTTRAILSOURCE /home/oracle/software/Goldengate/dirdat/ra
2、指定pump进程的远程队列
GGSCI >add rmttrail /home/oracle/software/Goldengate/dirdat/ra,ext dpea, MEGABYTES 20
3、编辑dpea进程的参数文件
GGSCI>edit param dpea
编辑完成后的截图如下:
dpea进程参数文件参考:ogg/ dpea_137.txt
4、编辑完成后暂不启动dpea进程,因为dpea进程需要的远 程队列还没有在远端创建。现在启动dpea进程正常情况 下应该不会报错,可以正常启动。但是针对不同的版本, 可能出现意外的报错,主要原因就是远程队列还没有创建。
六、replicate进程配置
replicate进程又名delivery进程,主要作用是解析抽取过 来的redo信息,在目标端翻译成对应的数据库操作,实现 数据的同步。
1、目标端先创建mgr进程
GGSCI>edit param mgr
mgr进程参数文件参考:ogg/mgr_138.txt
2、启动mgr进程
GGSCI>start mgr
3、创建replicate进程并指定抽取的本地队列
GGSCI> add rep repa, exttrail /home/oracle/software/Goldengate/dirdat/ra,nodbcheckpoint
4、编辑repa进程的参数文件
GGSCI>edit param repa
编辑完成后效果截图如下:
repa进程参数文件参考:ogg/repa_138.txt
5、启动repa进程
GGSCI> start repa
成功启动repa进程到running状态后,该进程会到指 定的目录下创建抽取队列,即dpea进程中指定的远程 队列。repa进程启动成功后才能成功启动dpea进程, 否则启动dpea进程会报错(不同版本可能情况不同)
6、在源端启动dpea进程
GGSCI> start dpea
使ddl操作可以同步到目标端的配置
七、修改参数配置并执行相关脚本
1、在源端extract进程exta的参数文件中添加
ddl include all
该指令的作用是对同步的表上的所有ddl操作全部同 步到目标库。不是对数据库上的所有的ddl操作都生效,
只对exta进程中指定的schema或数据库对象起作用。
在本示例中只对hr用户下的数据库对象的ddl操作起 作用。
2、进入Goldengate安装目录,SYS用户用SQL*Plus执行 以下脚本:
SQL >@ marker_setup.sql
SQL >@ ddl_setup.sql (需要为goldengate用户创建单独 的表空间,不同版本要求不同,某些版本可能不 需要创建单独的表空间,照样可以正常执行。)
SQL >@ role_setup.sql
注:该脚本执行完成后会提示用户手动给ogg的数据库用户授予相关的角色权限,即对goldengate用户授予ggs_ggsuser_role角色权限。该步骤必须执行,如果忽略了给用户授权的步骤,在后续启动dpea的过程中会报错:GGS_GGSUSER_ROLE 权限不足,角色冲突等。
SQL >@ ddl_enable.sql
GGSCI> stop exta
GGSCI> start exta
4、在目标端为goldengate用户指定权限
SQL> grant create any table,drop any table,alter any table to goldengate;
5、测试ddl同步配置是否生效,使用create table指令测试ddl
在源端创建表:
SQL>create table oggtest(id number,name varchar2(30));
在目标端测试是否同步成功
SQL>desc oggtest;
6、至此ogg单向同步的配置已经完成。
配置双向同步
八、重复单向同步操作
1、在138端配置extb进程
2、在137端配置 repb进程
3、在138端配置dpeb进程
4、在138端配置ddl操作同步配置
参考步骤:七、修改参数配置并执行相关脚本
注:extb进程的参数文件参考:ogg/extb_138.txt
repb进程参数文件参考:ogg/repb_137.txt
dpeb进程参数文件参考:ogg/dpeb_138.txt
九、避免循环抽取的设置
双活系统一端发生数据库变化会立即同步到另一端,该端同步 过来的变化又会同步到源端,这样就产生了源端和目标端的循 环同步,根本停不下来!
为了解决循环同步的问题需要做如下配置:
在extract进程exta、extb的参数文件中添加:
IGNOREREPLICATES
TRANLOGOPTIONS EXCLUDEUSER goldengate
第一句的意思是:抽取进程忽略replicate进程同步过来的redo, 即不抽取replicate进程带来的数据库变化产生的redo
第二句的意思是:不抽取goldengate用户操作产生的redo
goldengate用户对数据库的操作只有同步数据,即往目标库中同步数据。所以goldengate用户产生的redo信息只记录了源端同步过来的数据库操作,所以抽取redo信息时忽略goldengate用户的所有redo信息才能避免掉循环同步的现象。
配置双活过程中的常见问题
如果目标端repa进程意外终止,如何解决(数据同步失败)
具体步骤参考:ogg/如果目标端repa进程意外终止,如何解决(数据同步失败).docx
nologging类型的表怎样实现同步
1、想要通过ogg实现数据的同步,目标表必须是logging类型的,即该表的所有操作都记录在redo中。因此在做ogg同步之前必须先确定该用户模式下的所有的表都是logging的。
查看目标表是否是logging的指令:
select table_name,LOGGING from dba_tables where owner='HR';
2、如果是nologging类型的表必须修改为logging类型
a.查询出该用户下所有nologging类型的表并产生批量修改的sql 语句
select 'alter table '|| owner||'.'|| table_name ||' logging;' from dba_tables where owner='HR' and LOGGING='NO';
b.执行上一条sql产生的批量修改表为logging类型的sql语句。
3、确认该用户下是否还有其他的nologging类型的表,如果所有表全部成功修改为logging类型了,那么该用户下的所有数据库操作都能成功同步到目标端。
SQL> select table_name from dba_tables where owner='HR' and LOGGING='NO';
4、至此完成修改nologging类型的表为logging类型。
重启mgr进程启动失败
mgr进程重启失败基本上只有一种原因:mgrport被占用,即端口被占用,造成该问题的原因是上次没有正确停止mgr进程。
解决方法:
[oracle@edsir1p8-PROD4 dirdat]$ ps -ef | grep 7809找到对应的进程号,杀死该进程即可
[oracle@edsir1p8-PROD4 dirdat]$ kill -9 16991最后启动mgr进程
GGSCI (edsir1p8.us.oracle.com) 23> start mgr
exta进程不能访问asm实例的解决方法
具体步骤参考:ogg/配置exta进程访问asm实例的步骤.docx
dpea进程启动失败的解决方法
启动过程中报错:找不到ra00000x队列文件
解决该报错的最有效的方法就是重建dpea进程。
1、停止exta进程
GGSCI (edsir1p8.us.oracle.com) 25> stop exta
2、停止repa进程
GGSCI (edsir4p1.us.oracle.com) 154> stop repa
3、删除dpea进程
GGSCI (edsir1p8.us.oracle.com) 26> delete extract dpea
4、删除源端的所有抽取队列文件
[oracle@edsir1p8-PROD4 dirdat]$ cd /home/oracle/software/Goldengate/dirdat [oracle@edsir1p8-PROD4 dirdat]$ rm -rf ra*5、删除目标端的所有抽取队列文件
[oracle@edsir4p1-CPROD4 dirdat]$ cd /home/oracle/software/Goldengate/dirdat [oracle@edsir4p1-CPROD4 dirdat]$ rm -rf ra*6、按照正确的启动顺序启动同步进程
源端:
GGSCI (edsir1p8.us.oracle.com) 28> start exta
成功启动该进程后会自动在源端创建抽取队列文件ra*
目标端:
GGSCI (edsir4p1.us.oracle.com) 154> start repa
成功启动该进程后会自动在目标端创建抽取队列文件ra*
源端:
GGSCI (edsir1p8.us.oracle.com) 28> start dpea
校验源端和目标端的抽取队列文件,成功启动depa进程。
进程停不下来的解决方法(以repa进程为例)
操作系统级别kill进程即可
查找停不下来的进程:repa
[oracle@edsir4p1-CPROD4 dirdat]$ ps -ef | grep repakill掉repa进程
[oracle@edsir4p1-CPROD4 dirdat]$ kill -9 14344查看repa进程状态,正常情况下应该是stopped或者abend
GGSCI (edsir4p1.us.oracle.com) 152> info all
本文由 路远 首发于【路远网(http://www.luyuan.io)】未经允许不得以任何方式转载,违者必将追究法律责任
- 我的微信
- 这是我的微信扫一扫
- 我的电报
- 这是我的电报扫一扫