配色: 字号:
oracle+goldengate安装以及单向复制配置doc
2012-11-29 | 阅:  转:  |  分享 
  
Oraclegoldengate安装以及单向复制配置

--------------------不支持ddl操作

一、??????GoldenGate简介

OracleGoldenGate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。OracleGoldenGate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。同时,OracleGoldenGate可以实现一对一、广播(一对多)、聚合(多对一)、双向、点对点、级联等多种灵活的拓扑结构。

二、技术结构

和传统的逻辑复制一样,OracleGoldenGatewww.tangxiaobei.com实现原理是通过抽取源端的redolog或者archivelog,然后通过TCP/IP投递到目标端,最后解析还原放放电影应用到目标端,使目标端实现同源端数同步。以下是OracleGoldenGate的技术架构





Manager进程

????Manager进程是GoldenGate的控制进程,运行在源端和目标端上。它主要作用有以下几个方面:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储空间,发布阀值报告等。



Extract进程



Extract运行在数据库源端,负责从源端数据表或者日志中捕获数据。



Pump进程



pump进程运行在数据库源端。其作用是如果源端使用了本地的trail文件,那么pump进程就会把trail以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。pump进程本质是extract进程的一种特殊形式,如果不使用trails文件,那么就是extract进程在抽取完数据以后,直接投递到目标端。



4.Trail文件



????为了更有效、更安全的把数据库事务信息从源端投递到目标端。GoldenGate引进trail文件的概念。前面提到extract抽取完数据以后Goldengate会将抽取的事务信息转化为一种GoldenGate专有格式的文件。然后pump负责把源端的trail文件投递到目标端,所以源、目标两端都会存在这种文件。trail文件存在的目的旨在防止单点故障,将事务信息持久化,并且使用checkpoint机制来记录其读写位置,如果故障发生,则数据可以根据checkpoint记录的位置来重传。



5.Replicat进程



????Replicat进程,通常我们也把它叫做应用进程。运行在目标端,是数据传递的最后一站,负责读取目标端trail文件中的内容,并将其解析为DML或DDL语句,然后应用到目标数据库中。



6.GGSCI



????GGSCI是GoldenGateSoftwareCommandInterface的缩写,它提供了十分丰富的命令来对Goldengate进行各种操作,如创建、修改、监控GoldenGate进程等等





















三、应用的拓展结构、支持平台和数据库















四、在linux上安装GoldenGate?以及初始化数据(用来做数据迁移)

操作系统:redhatas5.1



源端ip: 192.168.1.200 node1

目标端ip: 192.168.1.201node2

1、软件安装(源端和目标端相同的操作)

到官网https://www.oracle.com/注册账号下载最新的软件。

安装平台:redhatlinuxx8632bit

goldengate:ogg112101_fbo_ggs_Linux_x86_ora10g_32bit.zip

oracle版本:10.2.0.1

(建议使用oracle用户安装goldengate)



解压软件

???????$unzip?ogg112101_fbo_ggs_Linux_x86_ora10g_32bit.zip

???????$mkdir/home/ogg

???????$mvfbo_ggs_Linux_x86_ora10g_32bit.tar/home/ogg/

? $tarzxffbo_ggs_Linux_x86_ora10g_32bit.tar



设置环境变量(在原有的数据库环境变量添加)



??????$vim.bash_profile



??????exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

??????exportGGATE=/home/ogg



$source.bash_profile



2、初始化源端数据库

1)?开启归档模式

GoldenGate是基于oracle日志变化的捕获,所以为了完整的捕获到oracle数据库的变化,有必要将归档模式开启。



SQL> altersystemsetlog_archive_dest_1=''location=/home/oracle/arch''scope=both;

??SQL> shutdownimmediate

??SQL> startupmount

??SQL> alterdatabasearchivelog

??SQL> alterdatabaseopen

??SQL> archiveloglist



2)??开启附加日志

??????我们知道,在oracle中我们可以通过rowid来定位某条记录,但是目标端的数据库和源端数据库的数据库可能完全不一样,所以无法通过rowid来确定源端数据库的逻辑变化,这时附件日志supplementallog便登上了表演的舞台。数据库在开启附加日志功能后,对于源端的修改操作,oracle会同时追加能够唯一标示记录的列到redolog。这样目标端数据库就可以知道源端发生了哪些具体的变化。



???SQL> alterdatabaseaddsupplementallogdata;

SQL> altersystemswitchlogfile;

???SQL> selectsupplemental_log_data_minfromv$database;



3)?开启强制日志模式

?SQL>alterdatabaseforcelogging;

4)?为goldengate创建用户并授权

SQL> createtablespacetbs_gguserdatafile''/home/oracle/oradata/ora10/gguser.dbf''size1000Mautoextendon;

SQL> createuseroggidentifiedbyoggdefaulttablespacetbs_ggusertemporarytablespaceTEMPquotaunlimitedontbs_gguser;

?SQL> grantconnect,resourcetoogg;

?SQL> grantcreatesession,altersessiontoogg;

?SQL> grantselectanydictionary,selectanytabletoogg;

?SQL> grantalteranytabletoogg;

?SQL> grantflashbackanytabletoogg;

?SQL> grantexecuteondbms_flashbacktoogg;



3.初始化目标端数据库

为goldengate创建用户并授权

SQL> createtablespacetbs_gguserdatafile''/home/oracle/oradata/ora10/gguser.dbf''size1000Mautoextendon;



SQL> createuseroggidentifiedbyoggdefaulttablespacetbs_ggusertemporarytablespaceTEMPquotaunlimitedontbs_gguser;



??SQL> grantconnect,resourcetoogg;

??SQL> grantcreatesession,altersessiontoogg;

??SQL> grantselectanydictionary,selectanytabletoogg;

??SQL> grantalteranytabletoogg;

??SQL> grantflashbackanytabletoogg;

??SQL> grantexecuteondbms_flashbacktoogg;

??SQL> grantinsertanytabletoogg;

??SQL> grantdeleteanytabletoogg;

??SQL> grantupdateanytabletoogg;

4、初始化数据

1)在源端添加要初始化数据的用户和表(在oracle用户下执行)



cd/home/ogg



./ggsci

ggsci> create subdirs//源端和目标端都执行,创建一些目录

ggsci> DBLOGINUSERIDogg,PASSWORDogg

ggsci>ADDTRANDATAscott.

ggsci>INFOTRANDATAscott.

2) 在源端和目标端配置MGR



ggsci> EDITPARAMSMGR

PORT7809

PURGEOLDEXTRACTS./dirdat,USECHECKPOINTS



ggsci> STARTMGR



ggsci> INFO MGR

3) 在源端配置extract进程

ggsci> ADDEXTRACTEINI_1,SOURCEISTABLE//直接从表读取信息

ggsci> EDIT PARAMSEINI_1



EXTRACTEINI_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERIDogg, PASSWORDogg

RMTHOST192.168.1.201,MGRPORT7809

RMTTASK REPLICAT, GROUP RINI_1

TABLE scott.;

4) 在目标端配置replicat进程

ggsci> ADD REPLICATRINI_1,SPECIALRUN//只执行一次

ggsci> EDITPARAMSRINI_1



REPLICATRINI_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

ASSUMETARGETDEFS

USERIDogg, PASSWORDogg

DISCARDFILE./dirrpt/RINIaa.dsc,PURGE

MAPscott.,TARGETscott.;

5) 启动源端的extract进程

在启动源端的extract进程之前,先把目标端的数据表信息清除掉





ggsci> STARTEXTRACTEINI_1



6) 测试数据是否同步过来

在源端和目标端看下相关表的记录是否一致







可以发现数据已经复制到目标端了

五、同步数据库数据

1、在源端配置extrac进程



ggsci> EDITPARAMSEORA_1

EXTRACT EORA_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg,PASSWORDogg

EXTTRAIL ./dirdat/aa

TABLE scott.;



ggsci> ADD EXTRACT EORA_1,TRANLOG,BEGINNOW

ggsci> ADD EXTTRAIL ./dirdat/aa,EXTRACTEORA_1,MEGABYTES 5

ggsci> START EXTRACT EORA_1

ggsci> INFO EXTRACT EORA_1

2、在源端配置pump进程

ggsci> EDIT PARAMS PORA_1

EXTRACT PORA_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

PASSTHRU

RMTHOST192.168.1.11,MGRPORT7809

RMTTRAIL./dirdat/pa

TABLE scott.;



ggsci> ADD EXTRACTPORA_1,EXTTRAILSOURCE./dirdat/aa

ggsci> ADD RMTTRAIL./dirdat/pa,EXTRACTPORA_1,MEGABYTES5

ggsci> STARTEXTRACTPORA_1

ggsci>INFOEXTRACTPORA_1

3、在目标端配置replicat进程

ggsci> EDITPARAMS./GLOBALS

CHECKPOINTTABLE ogg.ggschkpt



ggsci>exit

ggsci>DBLOGINUSERIDogg,PASSWORDogg

ggsci> ADDCHECKPOINTTABLE



ggsci>ADDREPLICATRORA_1,EXTTRAIL./dirdat/pa

ggsci> EDIT PARAMSRORA_1

REPLICAT RORA_1

SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERIDogg,PASSWORDogg

HANDLECOLLISIONS

ASSUMETARGETDEFS

DISCARDFILE./dirrpt/RORA_aa.DSC,PURGE

MAP scott.,TARGETscott.;



ggsci> STARTREPLICATRORA_1

4、测试数据是否可以正常同步

在源端insert、update、delete数据,看目标端是否和源端一致,一致表示复制

正常.



在源端插入一条数据并且提交





在目标端看下插入的数据是否同步过来了







从上面的情况可以看出来同步正常的





由于此文档配置不支持ddl操作,在此我也做了下ddl的同步的测试,方法就是在源端和目标端都创建一个同名的表,然后在源端插入数据看目标端是否同步













从以上的图片可以看到数据可以正常的同步的



至于goldengate支持ddl操作的配置,网上有很多文章,大家可以参考下,就是多执行几个oracle自带的sql脚本,extract和replicate配置文件需要添加一些参数.

献花(0)
+1
(本文系玉麒麟it首藏)