温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

oracle ogg搭建

发布时间:2020-05-17 21:23:57 来源:网络 阅读:1789 作者:18620626259 栏目:关系型数据库

 

 

1.环境介绍

项目

源端

目标端

ip

192.168.12.23

192.168.22.24

oracle sid

orcl

orcl

goldengate用户

oracle

oracle

ogg版本

11.2.1.0.1

11.2.1.0.1

操作系统版本

linux

linux


2. ogg基础环境配置

2.1创建ogg操作系统用户

  两台服务器都需要创建ogg操作系统用户(此步骤非必须)

  useradd -u 1003 -g oinstall -G dba ogg1 passwd ogg

2.2修改OGG操作系统用户环境变量

PATH=$PATH:$HOME/bin

export PATH

umask 022

export ORACLE_HOSTNAME=segment2

export ORACLE_BASE=/u01/app/oracle

export ORACLE_SID=orcl

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export TNS_ADMIN=$ORACLE_HOME/network/admin

exportPATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_BASE/ogg

exportPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib

exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE

exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib

exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib

exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib

exportLIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib

export ORACLE_OWNER=oracle

export SPFILE_PATH=$ORACLE_HOME/dbs

export ORA_NLS10=$ORACLE_HOME/nls/data

exportOGG_HOME=$ORACLE_BASE/ogg

2.3创建OGG安装目录

    mkdir /ogg chown -Rogg:oinstall /ogg

2.4上传OGG安装介质

 OGG安装文件上传到两台服务器的OGG操作系统用户的家目录(默认为/home/ogg)  

  fbo_ggs_Linux_x64_ora11g_64bit.tar  

fbo_ggs_Linux_x64_ora11g_64bit.tar解包到/ogg目录(源和目标端都需要操作)

tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg

2.5登录OGG测试

$./ggsci

    解压安装后目录

[oracle@sourceogg]$ ls -l |grep ^d

drwxr-x---2 oracle oinstall     4096 Apr 23  2012 cfg

drwxr-x---2 oracle oinstall     4096 Apr 23  2012 dirjar

drwxr-x---2 oracle oinstall     4096 Apr 23  2012 dirprm

drwxr-x---7 oracle oinstall     4096 Apr 23  2012 UserExitExamples

GGSCI(source) 1> create subdirs

Creatingsubdirectories under current directory /u01/app/oracle/ogg

Parameterfiles               /u01/app/oracle/ogg/dirprm: already exists

Reportfiles                  /u01/app/oracle/ogg/dirrpt: created

Checkpointfiles              /u01/app/oracle/ogg/dirchk: created

Processstatus files          /u01/app/oracle/ogg/dirpcs: created

SQLscript files              /u01/app/oracle/ogg/dirsql: created

Databasedefinitions files    /u01/app/oracle/ogg/dirdef: created

Extractdata files            /u01/app/oracle/ogg/dirdat: created

Temporaryfiles               /u01/app/oracle/ogg/dirtmp: created

Stdoutfiles                  /u01/app/oracle/ogg/dirout: created

 

文件路径

说明

/u01/app/oracle/ogg/dirprm

 存放OGG参数各的配置信息

/u01/app/oracle/ogg/dirrpt

 存放进程报告文件

/u01/app/oracle/ogg/dirchk

 存放检查点文件

/u01/app/oracle/ogg/dirpcs

 存放进程状态文件

/u01/app/oracle/ogg/dirsql

 存放SQL脚本文件

/u01/app/oracle/ogg/dirdef

 存放DEFGEN工具生成的数据定义


2.6建立OGG表空间

 ORACLE建议使用单独的表空间存放OGG数据,表空间大小50M就可以,但是最好设置数据文件的自动扩展。

  SQL>create  tablespace  ogg  datafile'/u01/app/oracle/oradata/orcl/ogg01.dbf'size 50M autoextend on

2.7创建OGG用户

SQL>create user ogg identified by ogg default tablespace ogg;

2.8OGG用户授权

OGG用户需要以下权限,也有人为了省事,直接给OGG用户DBA权限。

SQL> grant CONNECT, RESOURCE to ogg;

SQL> grant SELECT ANY DICTIONARY, SELECT ANY TABLEto ogg;

SQL> grant ALTER ANY TABLE to ogg;

SQL> grant FLASHBACK ANY TABLE to ogg;

SQL> grant EXECUTE on DBMS_FLASHBACK to ogg;

SQL> grant insert any table to ogg;

SQL> grant update any table to ogg;

SQL>grant delete any table to ogg; 

2.9打开源数据库的附加日志和force log

SQL> selectNAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;

SQL> alter database force logging;

SQL> alter database add SUPPLEMENTAL log data;

SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MINfrom v$database;

2.10运行OGG支持DDL脚本

如果要让OGG支持DDL操作,还需要额外运行几个脚本,这些脚本是OGG带的而不是ORACLE带的,在OGG的安装目录都可以找到,如果在OGG的安装目录登录数据库,可以直接@加脚本的名字,源端与目标端都需要运行

如下:

sqlplus / as sysdba

GRANT CREATE TABLE,CREATE SEQUENCE TO OGG;

权限配置以后.要重新执行

SQL>@ddl_setup

 SQL>@role_setup

 SQL> grantGGS_GGSUSER_ROLE to ogg;

 SQL>@ddl_enable

3.OGG配置

3.1OGG原理及数据制造

创建测试数据

源数据库

@demo_ora_create.sql

@demo_ora_insert.sql

目标数据

@demo_ora_create.sql


3.2源端添加表级TRANDATA

  添加表级的trandata可以理解为需要将哪些用户的哪些表和目标库同步,其实也是添加表级的

supplemental log,但是只有上文打开的minimal supplemental log后,这个才生效。

GGSCI (oggsource) 2>  dbloginuserid  ogg,password ogg

GGSCI (dbdream) 3> add  trandata   hr.tcustmer;

GGSCI (dbdream) 4> add  trandata   scott.dept_ogg

成功添加表级TRANDATA后,可以通过INFO命令查看哪些表被添加了TRANDATA.

INFO TRANDATA scott.*

3.4目标和源端配置MGR管理进程

GGSCI (stream) 2> EDITPARAMS MGR 加入以下两行内容

PORT 7809

PURGEOLDEXTRACTS /ogg/dirdat,USECHECKPOINTS

参数说明:

PORT 7809:OGG管理进程监控端口。

PURGEOLDEXTRACTS:清除不需要的trail文件。

/ogg/dirdat:trail文件存放位置。

USECHECKPOINTS:使用检查点队列。

start mgr

GGSCI (oggtarget) 4> info  mgr

文件存放路径$OGG_HOME/dirprm

3.5配置初始化数据进程(此步骤非必须,可以由其他方式完成)

   由于在创建测试表的时候,源端的测试表有数据,而目标端的测试表只有结构,没有数据,所以需要初始化目标端的数据,所谓初始化,就是让目标端的数据和源端的数据在这个时间点是一模一样的,所以初始化工作并不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,

本文主要介绍如何使用OGG进行数据初始化,

下面在源端配置捕获进程EINI_1。

GGSCI (dbdream) 11> ADD EXTRACT EINI_1, SOURCEISTABLE--------------源端加同步进程

GGSCI (dbdream) 12> INFO EXTRACT *, TASKS EXTRACT   

GGSCI (dbdream) 13> EDIT PARAMS EINI_1

EXTRACT EINI_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

setenv (ORACLE_SID=dbdream)

userid  ogg, passwordogg

RMTHOST 192.168.12.203, MGRPORT 7839

RMTTASK REPLICAT, GROUP RINI_1-----目标端名字一定要对应

TABLE SCOTT.EMP_OGG;

TABLE SCOTT.DEPT_OGG;

EXTRACT EINI_1:说明这是EXTRACT进程,名字是EINI_1 SETENV:

环境变量,一定要设置和数据库字符集一样,否则可能会乱码

USERID:数据库OGG用户 PASSWORD:数据库用户OGG的密码

RMTHOST:目标端地址,如果在/etc/hosts文件里已经设置解析,可以写主机名 MGRPORT:

目标端MGR管理进程监听的端口RMTTASK REPLICAT:

目标端REPLICAT应用进程的组和名字

TABLE:源端要初始化数据的表的名字

B、配置目标端REPLICAT进程

---------------------特别留意名字为源端配置的名

add replicatRINI_1,specialrun------目标端添加同步进程

EDIT PARAMS RINI_1

--加入以下内容

REPLICAT RINI_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

ASSUMETARGETDEFS

USERID ogg, PASSWORD ogg

DISCARDFILE  /u01/app/oracle/ogg/dirrpt/RINIaa.dsc, PURGE

MAP scott.*, TARGET scott.*;

REPLICAT RINI_1:说明这是REPLICAT应用进程,名字叫RINI_1

SETENV:语言变量,同捕获进程EINI_1

ASSUMETARGETDEFS:告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数,

USERIDPASSWORD:同捕获进程EINI_1参数介绍

DISCARDFILE:错误信息存放位置及命名规则

MAP:源端捕获的表的名字

TARGET:目标端同步的表的名字,可以不在同一SCHEMA

C、初始化数据-----源端

   配置好目标端的应用进程RINI_1后,就可以启动源端的捕获进程进行捕获数据了,而目标端的应用进程RINI_1不需要手动去启动,也就是说目标端RINI_1进程不需要管。

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

GGSCI (oggsource asogg@dbdream) 17> START EXTRACT   EINI_1

GGSCI (oggsource as ogg@dbdream) 17>VIEW  REPORT  EINI_1

可以看到初始化是正确的。初始化之后,上文提到的初始化进程(EINI_1、RINI_1)自动停止,因为通常情况下初始化数据工作只会做一次。可以通过INFO命令查看进程的状态。

INFO EXTRACT EINI_1-------------源端

INFO REPLICAT RINI_1-------目标端

3.6源端和目标端配置OGG的检查点

此步骤不是必须的,但是为了让OGG网络中断、服务器宕机、掉电等在突发情况也能正确断点续传,ORACLE建议配置OGG的检查点队列。

GGSCI (stream) 2> EDIT PARAMS ./GLOBALS

CHECKPOINTTABLE ogg.ggschkpt

这就告诉OGG检查点存放到OGG用户下的GGSCHKPT表中,但是还需要使用OGG用户登录数据库,创建检查点表,此时需要退出OGG,重新登录,否则可能会遇到下面的错误。

[ogg@oggsource ogg]$ ./ggsci

GGSCI (oggsource) 1> dblogin userid ogg,password ogg

GGSCI (oggsource as ogg@dbdream) 2> ADD CHECKPOINTTABLE

[ogg@dbdream ogg]$ sqlplus ogg/ogg

No checkpoint table specified. Using GLOBALS specification(ogg.ggschkpt)...

Successfully created checkpoint table ogg.ggschkpt.

此时用OGG登录数据库,就可以看到OGG创建的检查点表。

SQL> select * from tab;

3.7源端配置捕获进程

$ edit   param  ext1

EXTRACT ext1

SETENV(ORACLE_HOME="/oracle/app/product/11.2/db")

SETENV (ORACLE_SID="orcl")

SETENV(NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")

USERID ogg password ogg

EXTTRAIL ./dirdat/ext1/sd

gettruncates

DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &

INCLUDE MAPPED OBJTYPE 'INDEX'

table scott.*;

add extract ext1 tranlog, begin now

ADD EXTTRAIL  ./dirdat/ext1/sd  EXTRACT ext1, MEGABYTES 100-----注意是相对路径

start ext1

ADD EXTRACT EORA_2, TRANLOG, BEGIN NOW

ADD EXTTRAIL /u01/app/oracle/ogg/dirdat/zz,EXTRACT EORA_2, MEGABYTES  5

3.7配置源端的PUMP进程

添加PUMP进程PORA_1OGG,并指定本地的TRAIL文件。

edit pram  dp1

EXTRACT dp1

PASSTHRU

DYNAMICRESOLUTION

RMTHOST 192.168.12.24 ,MGRPORT 7809

RMTTRAIL ./dirdat/ext2/sd

DISCARDFILE./dirrpt/dp2.dsc,APPEND,MEGABYTES 100

DISCARDROLLOVER AT 6:00

REPORTROLLOVER AT 6:00

REPORTCOUNT EVERY 1 HOURS,RATE

TABLE scott.*;

ADD EXTRACT dp1, EXTTRAILSOURCE./dirdat/ext1/sd

INFO EXTRACT dp2

ADD RMTTRAIL  ./dirdat/ext1/sd, EXTRACT dp1, MEGABYTES100-----注意相对路径

ADD EXTRACT PORA_1, EXTTRAILSOURCE  /u01/app/oracle/ogg/dirdat/pa

PUMP进程PORA_1指定将本地TRAIL文件传输到目标端后保存成目标端TRAIL文件的名字。

ADD RMTTRAIL  /u01/app/oracle/ogg/dirdat/pa, EXTRACTPORA_1, MEGABYTES 5

START EXTRACT dp1

GGSCI (oggsource as ogg@dbdream) 36>INFO EXTRACT dp1

注意路径存在和环境变量相关内容

3.8目标端配置同步进程RORA_1

edit param rep1

REPLICAT rep1

SETENV (ORACLE_HOME ="/u01/app/oracle/product/11.2.0/db_1" )

SETENV (ORACLE_SID = "orcl")

SETENV (NLS_LANG ="AMERICAN_AMERICA.ZHS16GBK")

USERID ogg,  PASSWORD ogg

--HANDLECOLLISIONS

ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/rep2.dsc ,append,megabytes 10

---SOURCEDEFS./dirdef/def.def

DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &

INCLUDE MAPPED OBJTYPE 'INDEX'

MAP SCOTT.EMP_OGG     ,TARGET  SCOTT.EMP_OGG    ;

MAP SCOTT.DEPT_OGG    ,TARGET  SCOTT.DEPT_OGG    ;

ADD REPLICAT rep1, EXTTRAIL   ./dirdat/ext1/sd

START REPLICAT  rep1

注意参数

ERROR OGG-00423 Could not find definitionfor source.person

In the Replicat param Please tryASSUMETARGETDEFS , if source and target have same table structure..

if both the structures are different ,generate the source definition and use SOURCEDEFS in Replicate Param.

handcollisions被注释了,也就是说当target端缺失delete update数据时,target端无法自动处理。

验证数据

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI