Oracle GoldenGate安装(三)

来源:这里教程网 时间:2026-03-03 18:02:13 作者:

八、 目标端安装软件

目标端创建管理用户

创建管理用户,授予的权限和源端的不同

SQL> create tablespace odc_tps datafile '/oradata/smkdb/odc01.dbf' size 100M autoextend on;

Tablespace created.

SQL> create user odc identified by odc default tablespace odc_tps;

GRANT CONNECT TO odc;

GRANT ALTER ANY TABLE TO odc;

GRANT ALTER SESSION TO odc;

GRANT CREATE SESSION TO odc;

GRANT FLASHBACK ANY TABLE TO odc;

GRANT SELECT ANY DICTIONARY TO odc;

GRANT SELECT ANY TABLE TO odc;

GRANT RESOURCE TO odc;

GRANT DBA TO odc;

   

配置library 环境变量

不同操作系统不同的环境变量配置:

HP-UX : SHLIB_PATH

AIX : LIBPATH

LINUX :  LD_LIBRARY_PATH

例如:

export LD_LIBRARY_PATH =$ORACLE_HOME/lib:$LD_LIBRARY_PATH 

安装软件

1. 将对应操作系统数据库版本的介质拷贝到源端后,创建安装目录或文件系统

例如 /odc

# su - oracle

$ mkdir /odc 

2. 解压软件安装包

$ cd /odc

$ tar xf ggs_LINUX_ppc_ora11g_64bit_v11_1_1_0_11_001.tar 

注:如果是 windows ,需要单独安装服务

运行cmd cd 到安装软件目录下,执行:

C:\odc> install addservice  

3. 创建子工作目录

解压并解包成功后在/odc 目录执行

$ ./ggsci

ggsci>create subdirs 

以上所创建的目录的作用:

Name

purpose

dirchk

Checkpoint files

用来存放检查点(checkpoint) 文件, 次检查点是ogg 自己的检查点与实例不同

dirdat

GoldenGate trails

用来存放TRAIL 文件

dirdef

Data definition files

用来存放通过DEFGEN 工具生成的源或目标端数据定义文件

dirprm

Parameter files

用来存放配置参数文件

dirpcs

Process status files

用来存放进程状态文件

dirrpt

Report files

用来存放进程报告文件

dirsql

SQL script files

用来存放SQL 脚本文件

dirtmp

Temporary files

当事物所需要的内存超过已分配内存时, 默认存储在这个目录

 

4. 创建管理进程

 

创建管理进程所需参数:

参数

阀值

定义

port

7809

mgr 进程使用的TCP/IP 端口侦听请求,默认端口为7809

DYNAMICPORTLIST

7800-7810

指定可用动态   TCP/IP 端口列表,用于源端与目标端进程通信的绑定,最大支持256 个端口

PURGEOLDEXTRACTS

./dirdat/sm*

定期清理抽取出的过期文件,可以被设置在Manager, Extract, and Replicat 参数文件中,oracle 建议设置在Manager

USECHECKPOINTS

根据任何MINKEEP 规则,允许清除那些已经被Extract Replicat 进程检测过的,保证数据不丢失。

MINKEEPHOURS

24

trail 文件的保留时间,超过这个时间则删除

autorestart

replicat*

指定进程失败时自动重启

retries

10

指定尝试重新启动进程的次数(默认尝试2 次)

waitminutes

10

指定重新启动进程的等待时间,直到必要资源变得可用或一些其他的事件发生。默认的延迟时间为2 分钟。

 

具体设置如下:

ggsci>edit param mgr

输入:

port 7809

DYNAMICPORTLIST 7800-7810

PURGEOLDEXTRACTS ./dirdat/sm*, USECHECKPOINTS, MINKEEPHOURS 24

autorestart replicat* retries 10 waitminutes 10

autostart RE *

 

ggsci>edit param ./GLOBALS

输入:

GGSCHEMA odc

CHECKPOINTTABLE odc.ggs_checkpoint --- 保存退出

 

ggsci>start mgr

5. 创建 checkpoint table

cd /odc

$ sqlplus odc/odc@smkdb

SQL> @chkpt_ora_create.sql

DROP TABLE ggs_checkpoint

           *

ERROR at line 1:

ORA-00942: table or view does not exist

 

Table created.  

九、初始化同步 (以同构oracle 数据库为例)

源端查询相关信息

源端端查询表格所在表空间

SQL> select distinct tablespace_name from dba_tables where owner='OGGTEST ';

SQL> select distinct tablespace_name from dba_tab_partitions where table_owner='OGGTEST ';

 

目标端端查询是否存在以上表空间,若没有则创建,如果不想创建,在后面的impdp 中需要配置remap_tablespace 参数。

 

源端索引所在表空间:

SQL> select distinct tablespace_name from dba_indexes where owner in ('OGGTEST ');

SQL> select distinct tablespace_name from dba_ind_partitions where index_owner in ('OGGTEST ');

 

源端用户默认临时表空间:

SQL> select distinct temporary_tablespace from dba_users  

检查源端undo 保留时间及表空间大小

SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS1';

SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS2';

 

SQL> show parameter undo

SQL> select tablespace_name,sum(bytes/1024/1024/1024) from dba_data_files group by tablespace_name;

SQL> select tablespace_name,sum(bytes/1024/1024) from dba_free_space group by tablespace_name;

 

SQL> alter system set undo_retention=172800sid='*';

 

SQL> ALTER tablespace UNDOTBS1 RETENTION GUARANTEE;

SQL> ALTER tablespace UNDOTBS2 RETENTION GUARANTEE;

 

SQL> ALTER tablespace UNDOTBS1 RETENTION NOGUARANTEE;

SQL> ALTER tablespace UNDOTBS2 RETENTION NOGUARANTEE;

 

如果空间不够则添加:

SQL> ALTER tablespace UNDOTBS1 add datafile ' +MCDATA/ora11g/undotbs103.ora' size 3g autoextend on;

SQL> ALTER tablespace UNDOTBS2 add datafile ' +MCDATA/ora11g/undotbs03.ora' size 3g autoextend on;

   

源端查询SCN

SQL> select to_char(current_scn) from v$database;

14569604987950

 

9i 数据库:

SQL> select to_char(dbms_flashback.get_system_change_number) from dual;

14644839175132 

源端导出

$ export NLS_LANG=american_america.zhs16gbk

$ nohup expdp odc/odc schemas=OGGTEST directory=expdp flashback_scn=14569604987950 dumpfile=OGGTEST.dmp logfile=OGGTEST.log & 

目标端导入

$ export NLS_LANG=american_america.zhs16gbk

$ nohup impdpodc/odcschemas=OGGTESTdirectory=expdpdumpfile=OGGTEST.dmp logfile=OGGTEST.log&

 

导入前检查目标端表空间的大小

select segment_type,count(*),sum(bytes/1024/1024) from dba_segments  where owner='OGGTEST' group by segment_type;

   

目标端相关操作

备份库禁用触发器

select 'alter trigger '||owner||'.'||trigger_name||' disable;' from dba_triggers where owner='OGGTEST' and status='ENABLED';

e.g.

alter trigger ZJHIS4.TRI_ZY_DETAIL_CHAREGE disable;

alter trigger EMR4.TRI_BL_BINGCHENGBCJL disable;

alter trigger ZJHIS4.TRI_LAB_TEST_MASTER_ZY disable;

 

移除JOB

select job,log_user,schema_user,next_date,broken from dba_jobs;

select 'exec dbms_job.remove('||JOB||');' FROM dba_jobs;

exec dbms_job.remove(<that job id>);

exec dbms_ijob.remove(21);

exec dbms_job.broken(186,true)

 

select * from dba_scheduler_jobs where owner= 'OGGTEST';

禁用:

DBMS_SCHEDULER.DISABLE('job1, job2, job3, sys.jobclass1, sys.jobclass2');

或删除:

DBMS_SCHEDULER.DROP_JOB (job_name => 'my_job1');

 

注意:要在当前用户下执行(sys 用户不用管)

  

十、创建replicat 进程

应用进程要配置的参数:

参数

阀值

定义

replicat

sm_rep

指定进程名和类型 

setenv

(NLS_LANG="SIMPLIFIED   CHINESE_CHINA.ZHS16GBK")

配置系统环境变量

userid/ password

odc

指定OGG 连接数据库的用户名和密码

ASSUMETARGETDEFS

源端和目标端数据库类型一致,无需生成数据定义文件

ALLOWNOOPUPDATES

允许执行无实际变化的updata

DBOPTIONS

DEFERREFCONST

约束延迟设置。在复制进程的事物被提交之前,延迟级联删除、级联更新时的校验和实施。

HANDLETPKUPDATE

定义即使目标数据库环境中存在数据完整性问题,replicat 进程仍然能够继续处理 trail 中的数据。

ddlerror

955 ignore

定义来处理被找到的对象错误

DISCARDFILE

/odc/dirrpt/sm.dsc

定义discardfile 文件位置,如果处理中油记录出错会写入到此文件中

APPEND

discardfile 文件中如果已经包含记录的话,在后面继续追加,不删除之前的记录。

megabytes

20

定义discardfile 文件大小

DISCARDROLLOVER

on sunday

定义文件过期设定,为了防止discard file 被写满

map    target

map OGGTEST.* target OGGTEST.*;

用于指定源端和目标端表的映射关系

  

具体参数如下:

ggsci>dblogin userid odc password odc

ggsci>add replicat sm_rep exttrail ./dirdat/sm

 

ggsci>edit param sm_rep

 

参数:

replicat sm_rep

setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")

--setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

userid odc, password odc

--handlecollisions

ASSUMETARGETDEFS

ALLOWNOOPUPDATES

DBOPTIONS DEFERREFCONST

SOURCEDEFS /odc/dirdef/sm.def

map oggtest.t2,target oggtest.t2,colmap(USEDEFAULTS col1=cola,col2=colb2,col3=colc);

-- 表结构不同时,要加以上参数)

sql

ddlerror 955 ignore

ddlerror 1917 ignore

ddlerror 24344 ignore

ddlerror 1031 ignore

ddl include mapped

ddlerror 10655 ignore

ddlerror 10636 ignore

ddlerror 942 ignore

ddlerror 1435 ignore

REPERROR (1843, DISCARD)

ddlerror 4063 ignore

ddlerror 4043 ignore

ddlerror 2019 ignore

DISCARDFILE /odc/dirrpt/sm.dsc, APPEND megabytes 20

DISCARDROLLOVER on sunday

--DISCARDROLLOVER

--ddlerror 942 ignore

map OGGTEST.* target OGGTEST.*;

 

4043 对象不存在

2019 连接串不存在

 

 

1 oracle 11.2.0.4 不支持 replicat 进程中的 DBOPTIONS DEFERREFCONST 参数,如果要使这个参数正常生效必须在数据库中配置 ENABLE_GOLDENGATE_REPLICATION ,即:

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;      

参数介绍:

Colmap 参数

语法结构:

MAP <table spec>, TARGET <table spec>,COLMAP ([USEDEFAULTS, ] <target column> = <source expression>);

USEDEFAULTS :源端的列名与目标端的列名相同,使用 USEDEFAULTS target column: 目标列 source expression :源端表达式或列

 

当使用 COLMAP 为源端与目标端的表的结构不相同的时候,必须使用 defgen 生成定义文件。

当使用 COLMAP 为源端与目标端的表的结构相同的时候,仅使用 COLMAP 进行其他的功能例如转换等,不需要定义文件,但是必须使用 ASSUMETARGETDEFS 参数。   例如:

map oggtest.t1,target oggtest.t2,colmap(USEDEFAULTS col1=col2,col2=colb3,col3=col1);      

Handlecollisions 参数

HANDLECOLLISIONS 是我们使用 goldengate 过程中常有的一个 REPLICAT 参数,该参数依赖于主键或唯一索引处理冲突数据,常用于初始化阶段。对于无主键或唯一索引的表无法处理冲突,且可能导致重复记录。注意打开此参数则所有数据错误不管 reperror 如何配置均不再写 discard 文件,即所有数据冲突信息被默认规则处理,没有任何日志 ( 则会忽略 error mapping 数据错误,而且不会报告到 discard 文件 ) ,因此日常复制不建议使用该参数;可予以考虑的特殊场景为只需新增数据,无需复制历史数据。    使用 HANDLECOLLISIONS 的几个场景:

l   target 丢失 delete 记录 (missing delete) ,忽略该问题并不记录到 discardfile

l   target 丢失 update 记录 (missing update)

²   更新的键值是主键 = update 转换成 INSERT ,默认情况下插入记录不完整

²   更新的键值是非主键 = 忽略该问题并不记录到 discardfile

l   重复插入已存在的主键值到 target 表中,这将被 replicat 转换为 UPDATE 现有主键值的行的其他非主键列

 

另:该参数仅处理数据本身的 Insert/Delete 冲突,如果出现两端映射或其它结构性问题 Replicat 进程依然会 abend ,不能被忽略    此外对于主键的更新操作,若在 target 使用 HANDLECOLLISIONS 且该 update 丢失,在会转换为 INSERT 该主键的操作,注意默认情况下插入的记录不完整, FETCHOPTIONS FETCHPKUPDATECOLS 将捕获完整的 redo image 镜像到 trail 中,这保证把 primary key 的更新通过 HANDLECOLLISIONS 转换为对 target 的一个完整记录的插入。

我们可以通过 send 命令动态取消 HANDLECOLLISIONS

GGSCI (XIANGBLI-CN) 29> send rep2, NOHANDLECOLLISIONS

Sending NOHANDLECOLLISIONS request to REPLICAT REP2 ...

REP2 NOHANDLECOLLISIONS set for 1 tables and 0 wildcard entries      

DISCARDFILE 参数

语法结构:

DISCARDFILE ./dirrpt/sm.dsc, APPEND megabytes 20

表示该 discard 文件在 ogg 安装目录的 dirrpt 文件下,文件名为 sm.dsc ,该文件的最大大小为 20M ,当该文件达到 20M ,且还没到清理时间时, ogg 应用会报错:                                              

处理方法:

Ø   清理 discard 文件后重启进程( ./dirrpt/sm.dsc ;

修改该参数,将大小改为合适的值后重启进程。 

十一、在初始化完成后启动sm_rep

ggsci> start sm_rep atcsn 14569604987950 

相关推荐