OGG概念、安装步骤及基本的配置步骤 for ORACLE

  1. 一个OGG实例最多支持300个并发extract和replicat进程,每个进程需要25-55M内存。
  2. GGSCI,view report,找到PROCESS VM AVAIL FROM OS,大约就是系统所需要的swap space大小

3. 磁盘空间每个实例50-150M,外加trail等等,至少给1G。trail所需空间的预估方法是:[log volume in one hour] x [number of hours downtime] * 0.4

4./tmp 空间,默认是dirtmp目录,可以通过CACHEMGR参数的CACHEDIRECTORY选项指定

5. 安装OGG的用户必须属于ORACLE数据库实例的组,通常就是dba。

6.要想支持RAC里的RMAN log retention特性, 得在add extract之前安装patch BUGFIX 11879974

  1. OGG的几种架构

如果只有一个数据库实例,那么就设置在profile里,如果有多个实例,就在extract 和 replicat的参数文件里设置,例如:

EXTRACT ora9a

SETENV (ORACLE_HOME = “/home/oracle/ora9/product”)

SETENV (ORACLE_SID = “ora9a”)

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

USERID ggsa, PASSWORD ggsa

RMTHOST sysb

RMTTRAIL /home/ggs/dirdat/rt

TABLE hr.emp;

也可以在每次启动的时候,将

export ORACLE_HOME

export ORACLE_SID

放到特定的启动脚本里,然后启动进程

另外需要设置的

export PATH=<installation directory>:$PATH

export LIBPATH=<absolute path of installation directory>:$ LIBPATH

解压安装包

ggsci

create subdirs

exit

解压安装包

ggsci

create subdirs

exit

可以将mgr配置成一个服务,随着系统自动启动,可以配置一个客户化的服务名字

ggsci

edit params ./GLOBALS

MGRSERVNAME <name>

Install addevent addservice [autostart | manualstart]

create user oggadm

identified by oggadm

default tablespace users

temporary tablespace temp;

extract:

grant CREATE SESSION, ALTER SESSION to oggadm;

grant RESOURCE to oggadm;

grant CONNECT to oggadm;

grant SELECT ANY DICTIONARY to oggadm;

grant FLASHBACK ANY TABLE to oggadm;

grant SELECT ANY TABLE to oggadm;

grant SELECT on dba_clusters to oggadm;

grant EXECUTE on DBMS_FLASHBACK  to oggadm;

sys.dbms_internal_clkm 复制Oracle Transparent Data Encryption (TDE)时需要.

SELECT ANY TRANSACTION 新的ASM特性时需要

10gR2之后,rman会协同extract进行归档日志的保留策略,需要如下权限

10g2

exec dbms_streams_auth.grant_admin_privilege('oggadm');

grant insert on system.logmnr_restart_ckpt$ to oggadm;

grant update on sys.streams$_capture_process to oggadm;

grant become user to oggadm;

11.1 and 11.2.0.1

exec dbms_streams_auth.grant_admin_privilege('oggadm');

grant become user to oggadm;

11.2.0.2 and later

exec dbms_goldengate_auth.grant_admin_privilege('oggadm');

replicat:

grant CREATE SESSION, ALTER SESSION  to oggadm;

grant RESOURCE to oggadm;

grant CONNECT to oggadm;

grant SELECT ANY DICTIONARY to oggadm;

grant SELECT ANY TABLE to oggadm;

grant CREATE TABLE to oggadm;

grant LOCK ANY TABLE to oggadm;

INSERT, UPDATE, DELETE ON <target tables>

在Source和 target都得执行,

grant dba to oggadm;

ggsci

EDIT PARAMS ./GLOBALS

GGSCHEMA oggadm

SQL> @sequence.sql

在source 系统里

GRANT EXECUTE on oggadm.updateSequence TO oggadm;

在target 系统里

GRANT EXECUTE on oggadm.replicateSequence TO oggadm;

DDL支持配置完毕,就可以支持sequences (CREATE, ALTER, DROP, RENAME) 操作的复制的,但如果只是单纯的想复制sequence的话,可以不配置DDL支持,只需要sequence参数就行。

GGSCI> dblogin userid oggadm@source,password oggadm

FLUSH SEQUENCE <owner.sequence> 或者wildcard

在initial synchronization之后,必须执行的就是在target上对没一个sequence至少取一次nextval

配置DDL环境,需要在数据库里创建如下一系列的表:

GRANT EXECUTE ON utl_file TO oggadm;

ggsci

EDIT PARAMS ./GLOBALS

GGSCHEMA oggadm

Sqlplus “/as sysdba”

@marker_setup.sql  必须到这个脚本所在目录进入sqlplus

@ddl_setup.sql

@role_setup.sql

Grant GGS_GGSUSER_ROLE to oggadm;

@ddl_enable.sql

@$ORACLE_HOME\rdbms\admin\dbmspool.sql

@ddl_pin oggadm;

开启和关闭DDL trigger

ddl_disable

ddl_enable

维护DDL marker表

Manager 参数文件的PURGEMARKERHISTORY提供设置最大和最小保留时间(根据最后一个修改动作的时间计算)

维护DDL history表

Manager 参数文件的PURGEDDLHISTORY参数设置最大和最小保留时间

清空DDL trace文件

运行ddl_cleartrace脚本删除trace文件,默认名字是ggs_ddl_trace.log在oracle 的 USER_DUMP_DEST目录里

DDL复制只支持两个系统之间的负责,active-passive 或者 active-active,而且必须是两个object必须是identical的,必须使用ASSUMETARGETDEFS参数。

如果使用数据泵的话,可以将PASSTHRU放在所有的要进行DDL复制的TABLE语句前,你可以把NOPASSTHRU放在任何不进行DDL复制而需要进行data转换的TABLE之前。数据泵不能使用任何DDL配置参数,比如DDL, DDLOPTIONS,

DDLSUBST, PURGEDDLHISTORY, PURGEMARKERHISTORY, DDLERROR

DDL &

INCLUDE UNMAPPED &

OPTYPE alter &

OBJTYPE ‘table’ &

OBJNAME “users.tab*” &

INCLUDE MAPPED OBJNAME “*” &

EXCLUDE MAPPED OBJNAME "temporary.tab*"

1. Run GGSCI.

2. STOP EXTRACT <group>

3. STOP REPLICAT <group>

4. Run SQL*Plus and log in as a user that has SYSDBA privileges.

5. Run the ddl_disable script.

6. Run the ddl_remove script,

7. Run the marker_remove script.

8. Run the marker_setup script.

9. Run the ddl_setup script.

10. Run the role_setup script.

11. Grant the role to all Oracle GoldenGate users

12. Run the ddl_enable.sql script.

1. Run GGSCI.

2. STOP EXTRACT <group>

3. STOP REPLICAT <group>

4. Run SQL*Plus and log in as a user that has SYSDBA privileges.

5. Run the ddl_disable script .

6. Run the ddl_remove script

7. Run the marker_remove script.

alter system set recyclebin=off;

sqlplus “/as sysdba”

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

ALTER SYSTEM SWITCH LOGFILE;

SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

ADD SCHEMATRANDATA:当配置DDL复制的时候应该使用,DDL不使用的时候,可以代替ADD TRANDATA,表没有主键和唯一键的时候,使用ADD TRANDATA的cols和table map的keycols来配合使用ADD SCHEMATRANDATA最好。

ADD TRANDATA:不适用DDL复制特性的时候使用,在下保证列情况下,在DDL复制环境下也可以使用ADD TRANDATA:在对表进行DDL时,一定不能有任何DML,可以有对其他不相关表的DML

1. (ADD SCHEMATRANDATA only) Apply Oracle Patch 10423000 to the source Oracle database. Oracle数据库11g以后才支持ADD/INFO/DELETE SCHEMATRANDATA命令

先sys执行exec dbms_streams_auth.grant_admin_privilege('oggadm');

2. On the source system, run GGSCI.

3. dblogin userid oggadm@source,password oggadm

4. Issue the ADD TRANDATA or ADD SCHEMATRANDATA command.

ADD TRANDATA <table> [, COLS <columns>][,NOKEY]

其中的COLS是配合extract中的TABLE参数和replicat中的MAP参数里的KEYCOLS子句来使用的,如果指定NOKEY,那就必须指定COLS,也必须指定KEYCOLS字句

ADD SCHEMATRANDATA <schema>

查看效果

INFO TRANDATA <owner/schema>.TCUST*

10.2.0.5.0以后,Replicat parameter DBOPTIONS with the SUPPRESSTRIGGERS option

9.2.0.7.0 以后,Replicat parameter DBOPTIONS with the DEFERREFCONST option

再之前的数据库版本就得手工停止trigger,或者手工忽略Replicat database user

Source上是DEFERRABLE的约束,在target里必须也是DEFERRABLE的,在Replicat parameter file文件里,添加一行SQLEXEC (“alter session set constraint deferred”)

9.2.0.7.0 以后,Replicat parameter DBOPTIONS with DEFERREFCONST

如果target上的表没有主键或唯一健,那么就会有重复记录存在,那么应用过来的操作就会针对多条记录进行操作,造成source和target不一致,需要设置一个选项DBOPTIONS LIMITROWS in the Replicat parameter file.

Oracle GoldenGate supports the capture and replication of TIMESTAMP WITH TIME ZONE as a UTC offset (TIMESTAMP '2011-01-01 8:00:00 -8:00') but abends on TIMESTAMP WITH TIME ZONE as TZR (TIMESTAMP '2011-01-01 8:00:00 US/Pacific') by default。

要想支持TIMESTAMP WITH TIME ZONE as TZR, 得在Extract parameter 文件里使用选项TRANLOGOPTIONS 如下两个选项:

INCLUDEREGIONID 从oracle到同版本oracle或更高版本

INCLUDEREGIONIDWITHOFFSET 从oracle到低版本或者非oracle

Ggsci

EDIT PARAMS MGR

port 7809

AUTOSTART ER *

AUTORESTART EXTRACT *,RETRIES 3,WAITMINUTES 5,RESETMINUTES 60

DYNAMICPORTLIST 7940-8100,7930

SOURCEDB gzcrm20,USERID gguser,PASSWD gguser

PURGEOLDEXTRACTS /ggs/dirdat/aa*,USECHECKPOINTS,MINKEEPDAYS 2

LAGREPORTHOURS 1 检查lag的间隔

LAGINFOMINUTES 3 报info

LAGCRITICALMINUTES 5 报error

INFO MGR

创建checkpoint table有两种方法,

一种是使用chkpt_ora_create.sql脚本创建,

另一种方式是使用ggsci里的命令如下:

dblogin userid oggadm@source,password oggadm

add checkpointtable oggadm.ggs_checkpoint

通过EDIT PARAMS ./GLOBALS加一行CHECKPOINTTABLE oggadm.ggs_checkpoint来指定checkpoint table的默认位置

如果没有在GLOBALS中添加的话,需要添加replicat的时候指定

ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\dirdat\et, CHECKPOINTTABLE oggadm.ggs_checkpoint

如果不想使用checkpoint,只是使用默认的trail文件中记录的checkpoint接受数据不一致的话,可以使用NODBCHECKPOINT

ADD EXTRACT ext_src, TRANLOG, BEGIN NOW

ADD EXTTRAIL G:\OGG\V26068-01-source\dirdat\et, EXTRACT ext_src

extract ext1

userid ggs,password ggs

exttrail g:\ogg\v26068-01-source\dirdat\et

rmthost 192.168.234.112, mgrport 7809
rmttrail c:\ggs\dirdat\r1
dynamicresolution
gettruncates

TRANLOGOPTIONS INCLUDEREGIONID,EXCLUDEUSER oggadm

DDL include all
table ggs.*;

SEQUENCE hr.employees_seq;

DDLERROR [RESTARTSKIP <1-10万>] [SKIPTRIGGERERROR <num errors>]

捕获DDL errors,Extract最多可以跳过十万个DDL 操作而不终止

DDLOPTIONS GETAPPLOPS, IGNOREREPLICATES(默认配置)

IGNOREREPLICATES 和 GETREPLICATES 控制extract是否忽略由replicat产生的ddl操作

GETAPPLOPS 和 IGNOREAPPLOPS 控制extract是否忽略由应用等其他操作产生的ddl操作

要想避免数据的looping复制,要做到两点:

第一点是合理配置IGNOREREPLICATES 和 GETREPLICATES,GETAPPLOPS 和 IGNOREAPPLOPS这两对参数;

第二点是identify local Replicat transactions,这个使用TRANLOGOPTIONS EXCLUDEUSER oggadm来实现

下面是针对DML的配置,直接写在extract文件里即可

GETAPPLOPS

IGNOREREPLICATES

下面是DDLOPTIONS里的配置

bi-directional模式里,需要配置成

Extract (primary and secondary)

DDLOPTIONS GETREPLICATES, GETAPPLOPS   

Replicat (primary and secondary)

DDLOPTIONS UPDATEMETADATA

Cascading模式

DDLOPTIONS GETREPLICATES, IGNOREAPPLOPS

一个实验过的例子:

edit params ext_src

extract ext_src

userid oggadm@source,password oggadm

EXTTRAIL G:\OGG\V26068-01-source\dirdat\et

dynamicresolution

gettruncates

TRANLOGOPTIONS INCLUDEREGIONID,EXCLUDEUSER oggadm

GETAPPLOPS

IGNOREREPLICATES

DDL include all

DDLOPTIONS GETAPPLOPS, GETREPLICATES

table source.*;

SEND EXTRACT <name> SHOWTRANS 查看extract需要的最早的log信息

ADD EXTRACT pump_src, EXTTRAILSOURCE G:\OGG\V26068-01-source\dirdat\et, BEGIN now

ADD RMTTRAIL G:\OGG\V26068-01-target\dirdat\rt, EXTRACT pump_src

Edit params pump_src

extract pump_src

userid oggadm@source,password oggadm

rmthost pc2011022014ptf, mgrport 7810

rmttrail g:\ogg\v26068-01-target\dirdat\rt

passthru

table source.*;

ADD REPLICAT rep_tag, EXTTRAIL G:\OGG\V26068-01-target\dirdat\rt, BEGIN now

replicat rep1

userid oggadm@target,password oggadm

assumetargetdefs

reperror (default,discard,abend)

DBOPTIONS LIMITROWS SUPPRESSTRIGGERS

DDL include all

HANDLECOLLISIONS 此参数在source active状态时做initial load才需要,initial load 之后SEND REPLICAT <Replicat group name>, NOHANDLECOLLISIONS

discardfile c:\oradata\repsz.dsc,append,megabytes 100

map ggs.*, target ggs.*;

MAP hr.employees_seq, TARGET payroll.employees_seq;

DDLOPTIONS UPDATEMETADATA

DDLERROR 捕获DDL errors

{<error> | DEFAULT} {<response>}

{INCLUDE <inclusion clause> | EXCLUDE <exclusion clause>}

[IGNOREMISSINGOBJECTS | ABENDONMISSINGOBJECTS]

例如:DDLERROR <error> IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 10 &

INCLUDE ALL OBJTYPE TABLE OBJNAME “tab*” EXCLUDE OBJNAME “tab1*”

一个实验用过的例子

Edit params rep_tag

replicat rep_src

userid oggadm@source,password oggadm

assumetargetdefs

reperror (default,discard,abend)

DBOPTIONS LIMITROWS DEFERREFCONST

DDL include all

DDLOPTIONS UPDATEMETADATA

map target.*, target source.*;

START REPLICAT

Syntax START REPLICAT <group name> ATCSN <csn> | AFTERCSN <csn>]

ATCSN <csn> 小于这个csn值的操作被跳过.

AFTERCSN <csn> 大于这个csn值的操作被跳过。

ADD EXTRACT ext_tag, TRANLOG, BEGIN NOW

ADD EXTTRAIL G:\OGG\V26068-01-target\dirdat\et, EXTRACT ext_tag

一个实验用过的例子

Edit params ext_tag

extract ext_tag

userid oggadm@target,password oggadm

EXTTRAIL G:\OGG\V26068-01-target\dirdat\et

dynamicresolution

gettruncates

TRANLOGOPTIONS INCLUDEREGIONID

DDL include all

DDLOPTIONS GETREREPLICATES, GETAPPLOPS

table target.*;

ADD EXTRACT pump_tag, EXTTRAILSOURCE G:\OGG\V26068-01-target\dirdat\et, BEGIN now

ADD RMTTRAIL G:\OGG\V26068-01-source\dirdat\rt, EXTRACT pump_tag

Edit params pump_tag

extract pump_tag

userid oggadm@target,password oggadm

rmthost pc2011022014ptf, mgrport 7809

rmttrail g:\ogg\v26068-01-source\dirdat\rt

passthru

table target.*;

ADD REPLICAT rep_src, EXTTRAIL G:\OGG\V26068-01-source\dirdat\rt, BEGIN now

Edit params rep_src

replicat rep_src

userid oggadm@source,password oggadm

assumetargetdefs

reperror (default,discard,abend)

DBOPTIONS LIMITROWS DEFERREFCONST

DDL include all  

map target.*, target source.*;

DDLOPTIONS UPDATEMETADATA

在extract中使用filter和where选行

TABLE <table spec>, FILTER ([, ON INSERT | ON UPDATE| ON DELETE][, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE], <filter clause>);

MAP <table spec>, TARGET <table spec>,

, FILTER ([, ON INSERT | ON UPDATE| ON DELETE][, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE][, RAISEERROR <error_num>], <filter clause>);

使用cols和colsexcept选列

column mapping分为表级别的和global级别的,在TABLE和MAP参数里 ,使用COLMAP选项,如果source和target的表是identical的,那么就只使用COLMAP选项就行,但是如果不是identical的,就要创建data-definitions file了

表级别的column mapping,如果使用了COLMAP,那么在TABLE中就得像MAP语句一样,增加一个TARGET选项,例如:

MAP sales.acctbl,TARGET sales.accttab,

COLMAP (

USEDEFAULTS,

name = cust_name,

transaction_date =@DATE (“YYYY-MM-DD”, “YY”,YEAR, “MM”, MONTH, “DD”, DAY),

area_code =@STREXT (phone_no, 1, 3),

phone_prefix =@STREXT (phone_no, 4, 6),

phone_number =@STREXT (phone_no, 7, 10));

GLOBAL级别的column mapping,如下

COLMATCH NAMES customer_code = cust_code

COLMATCH NAMES customer_name = cust_name

COLMATCH NAMES customer_address = cust_addr

COLMATCH PREFIX S_

COLMATCH SUFFIX _tab

MAP sales.acct, TARGET sales.account, COLMAP (USEDEFAULTS);

MAP sales.ord, TARGET sales.order, COLMAP (USEDEFAULTS);

COLMATCH RESET

MAP sales.reg, TARGET sales.reg;

MAP sales.price, TARGET sales.price;

Tokens,传递数据用

TABLE ora.oratest,TOKENS(TK-HOST=@GETENV("GGENVIRONMENT","HOSTNAME"));

MAP

ora.oratest,TARGET ra.rpt,COLMAP(USEDEFAULTS,host=@token("TK-HOST"));

source 和 target 的表有不同的data definitions(比如oracle到sql server,列名不同,数据类型不同,列长度不一样,表中列的顺序不一致)的时候,就要使用data-definitions file,在source上创建source-definitions file, 在target上创建target-definitions file,步骤一样:

ggsic

EDIT PARAMS DEFGEN

DEFSFILE C:\ggs\dirdef\record.def

USERID oddadm, PASSWORD oggadm

TABLE acct.cust100, DEF custdef;  此处定义了一个模板

TABLE ord.*;

TABLE hr.*;

保存退出后,运行defgen工具来生成出相应的data-definitions file

defgen paramfile dirprm/defgen.prm [reportfile dirrpt/defgen.rpt]

不指定reportfile的话,报告信息就只是输出到屏幕上

引用相应的data-definitions file的方法,是在extract参数文件里添加TARGETDEFS参数,在replicat参数文件里添加SOURCEDEFS参数

上面的例子对应的replicat的参数文件如下:

REPLICAT acctrep

SOURCEDEFS c:\ggs\dirdef\record.def

USERID ggs, PASSWORD ggs

MAP acct.cust*, TARGET acct.cust*, DEF custdef;

MAP ord.prod, TARGET ord.prod;

MAP ord.parts, TARGET ord.parts;

MAP hr.emp, TARGET hr.emp;

MAP hr.salary, TARGET hr.salary;

● “Loading data with a database utility”

● “Loading data from file to Replicat”

Extract writes records to an extract file and Replicat applies them to the target tables. This is the slowest initial-load method.

SOURCEISTABLE

SPECIALRUN

END RUNTIME

● “Loading data from file to database utility”

Extract writes records to extract files in external ASCII format. The files are used as data files for input into target tables by a bulk load utility. Replicat creates the run and control files.

SOURCEISTABLE

FORMATASCII, {BCP | SQLLOADER}

GENLOADFILES <template file>

● “Loading data with an Oracle GoldenGate direct load”

Extract communicates with Replicat directly across TCP/IP without using a Collector process or files. Replicat applies the data through the database engine.

ADD EXTRACT <initial-load Extract name>, SOURCEISTABLE

EXTRACT <initial-load Extract name>

ADD REPLICAT <initial-load Replicat name>, SPECIALRUN

REPLICAT <initial-load Replicat name>

  1. 环境变量
  2. unix环境安装
  3. windows环境安装
  1. 创建OGG用户:
  2. 支持sequence配置:
  3. 支持DDL配置:
  4. 重置DDL环境:
  5. 删除DDL环境:
  1. 关闭回收站和配置附加日志
  2. initiate the logging of key values
  3. 防止由于triggers 和cascade constraints带来的数据重复修改
  4. Deferring constraint checking
  5. Limiting row changes in tables that do not have a key
  6. 复制TIMESTAMP with TIME ZONE
  1. 配置MGR参数
  2. 配置CHECKPOINT TABLE
  1. SOURCE
      1. EXTRACT1
      1. Data pump1
  2. TARGET
      1. Replicat2
      1. Extract2
      1. Data pump2
  3. SOURCE
      1. Replicat1
  4. mapping and manipulating data
  5. data-definitions file

  • “Loading data with a direct bulk load to SQL*Loader” on page 232. Extract extracts records in external ASCII format and delivers them directly to Replicat, which delivers them to Oracle’s SQL*Loader bulk-load utility. This is the fastest method of loading Oracle data with Oracle GoldenGate.

猜你喜欢

转载自blog.csdn.net/zll4859291/article/details/129901081
今日推荐