oracle11g ASM(单节点RAC)使用ogg配置双活步骤

  • A+
所属分类:技术

chatGPT账号

oracle11g ASM(单节点RAC)使用ogg配置双活步骤

 

配置思路:

先配置单向同步,单向同步配置完成后说明ogg环境是正常可用的,单向配置成功后再配置双向同步。在配置单向同步的过程中先配置dml同步,再配置ddl同步,在配置dml同步的过程中先配置insert和delete同步,再配置update同步。

总体思路如下:

i)先配置insert和delete单向同步

(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登录终端:

 

如果不能正常进入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

3、重新启动extract进程

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 repa

kill掉repa进程

[oracle@edsir4p1-CPROD4 dirdat]$ kill -9 14344

查看repa进程状态,正常情况下应该是stopped或者abend

GGSCI (edsir4p1.us.oracle.com) 152> info all

本文由 路远 首发于【路远网http://www.luyuan.io)】未经允许不得以任何方式转载,违者必将追究法律责任

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号
路远

发表评论

您必须登录才能发表评论!