Oracle Golden Gate数据库同步技术

2013-07-15

Oracle GoldenGate是一款实时访问、基于日志变化捕捉数据,并且在异构平台之间进行数据传输的产品。利用这个技术,GoldenGate能够实现低延迟、高性能、低影响进行连续的数据集成。

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

1、支持的Database
Oracle ,MS Sql Server,IBM DB2,SYBASE,MySql等
2、支持的操作系统平台
Windows 2000, 2003, XP,Linux,Sun Solaris,HP NonStop,HP-UX
3、内存要求
GoldenGate对操作系统内存的需求主要取决于Extract和Replicat进程数,一般建议>2G。
4、DISK空间需求
由于要数据库必须设置为归档模式,所以要求至少保存7天以上的日志,建议剩余空间在10G~100G之间。
5、对于RAC环境
GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩余的node启动而无须修改任何配置参数。否则如果运行在单个node上的话,需要将剩余node中的归档日志通过一定的技术共享出来并加载到GoldenGate运行节点。

对于RAC环境,GoldenGate要求所有node必须保持时钟同步,同时必须保持所有RAC node和运行extract进程的node节点保持时钟同步。因为GoldenGate会比较本地的系统时间和commit的时间戳。所以不能忽略这个设置。否则可能导致数据复制的紊乱。

6、Oracle GoldenGate can be deployed quickly and easily in five steps:
1). Prepare the Environment
2). Initial Load
3). Change Capture
4). Change Delivery
5). Verify the results

7、GoldenGate几个重要进程介绍:
1)、Manager管理进程在两端开启,监控和重启其他进程;分配数据存储和报告错误及事件;
2)、Extract进程从日志中抓取并传输到target端事务数据;
3)、Server Collector进程在target(接受)端接受数据并写入trail文件;
4)、Replicat进程读取trail文件,并应用到traget数据库;
5)、trail文件时gg自己抓捕信息的文件,是一个OS文件,存放在./dirdat/下,以X00000命名,N顺序1,2,3…此文件用完可配置参数自动删除。

8、Goldengate安装及命令
su - oracle
mkdir /u02/oracle/ogg11
cd /u02/oracle/ogg11
tar xf /opt/fbo_ggs_Linux_x64_ora10g_64bit.tar
./ggsci
GGSCI> CREATE SUBDIRS 创建目录
GGSCI> HELP 查看帮助
GGSCI> SHOW 显示环境

9、设置环境变量
stty erase ^h(stty erase 如何使Backspace键做删除操作,而不是显示^H )
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_BASE/ogg11
alias ogg='cd $ORACLE_BASE/ogg11;rlwrap ggsci'

10、在oracle源数据库开启归档模式
SQL> shutdown immediate;(启动归档前先要停止数据库)
SQL> startup mount;(数据库以mount方式启动)
SQL> alter database archivelog;(启动数据库归档)
SQL> alter system set log_archive_dest_1="/arch"(改变归档日志路径,windows系统使用盘符)
SQL> alter database open;(打开数据库)
SQL> alter system archive log start;
SQL> alter system switch logfile 执行切换命令
SQL> select * from v$log;检查日志
SQL> archive log list;(查看归档是否已经打开)
SQL> alter system set log_archive_format='%s_%t_%r.arc' scope=spfile

11、在oracle源数据库打开最小附加日志
SQL > select a.SUPPLEMENTAL_LOG_DATA_MIN FROM v$database a;
NO
SQL > alter database add supplemental log data;打开最小附加日志
SQL > alter system archive log current;
SQL > select log_mode,supplemental_log_data_min,force_logging from v$database;
YES

12、在源和目的数据库创建GoldenGate管理用户ggadmin:
#source
create tablespace GOLDENGATE_TS datafile '/u02/oracle/oradata/test/gg_ts_01.dbf' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
create user ggadmin identified by "ggadmin" default tablespace GOLDENGATE_TS;
grant connect,resource,dba to ggadmin;

#target
create tablespace GOLDENGATE_TS datafile '/u02/oracle/oradata/test/gg_ts_01.dbf' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
create user ggadmin identified by "ggadmin" default tablespace GOLDENGATE_TS;
grant connect,resource,dba to ggadmin;

sqlplus / as sysdba
SQL>@marker_setup.sql; --提示过程中输入用户:ggadmin
SQL>@ddl_setup.sql; --提示过程中输入用户:ggadmin;INITIALSETUP
RECYCLEBIN must be turned off.set _RECYCLEBIN in parameter file to FALSE
select flashback_on from v$database;
show parameter recyclebin
alter session set recyclebin=off;

SQL>@role_setup.sql; --提示过程中输入用户:ggadmin
SQL>grant GGS_GGSUSER_ROLE to ggadmin;
SQL>@ddl_enable.sql;

######################
GGSCI > dblogin userid ggadmin, password ggadmin
SQL> set lines 1000 pages 1000
SQL> col username for a10
SQL> select sid ,username,program from v$SESSION where username is not null;
######################
执行ggsci命令报错OGG-00014(清空./GLOBALS)
> GLOBALS
GGSCHEMA ggadmin
13、准备源数据,创建空表或导入初始化数据。
drop public database link CORE_DB102;
create public database link core_db102 connect to core identified by 123456 using 'DB102';
select * from tab@CORE_DB102;

create table t1 (id int primary key,name varchar2(16));
select name ,open_mode,force_logging,supplemental_log_data_min from v$database;
创建空表:
create table t1 as select * from t1@core_db102 where 1=2;
14、source & target都需要准备参数
./ggcgi
ggcgi> edit parameter ./GLOBALS
GGSCHEMA ggadmin
:wq!
ggcgi> edit params mgr
PORT 7809
:wq!
ggsci> start mgr
ggsci> info mgr

用vi一样sh vi dirprm/mgr.prm

15、源准备
ggcgi> edit params ex1
EXTRACT ex1
USERID ggadmin,PASSWORD ggadmin
EXTTRAIL /u02/oracle/ogg11/dirdata/ex
TABLE user01.*;

ggcgi> edit params dp1
EXTRACT dp1
USERID ggadmin,PASSWORD ggadmin
RMTHOST 192.168.137.64,MGRPORT 7809
RMTTRAIL /u02/oracle/ogg11/dirdata/rt
TABLE user01.*;
##source#####################
ggsci(source)> dblogin userid ggadmin,password ggadmin
ggsci(source)> ADD TRANDATA core.t1
ggsci(source)> add TRANDATA user01.t1;
################################################################
ggsci(source)> add EXTRACT ex1,TRANLOG,BEGIN now
ggsci(source)> info all
ggsci(source)> add exttrail /u02/oracle/ogg11/dirdat/ex,EXTRACT ex1
ggsci(source)> sh ls -lrt dirdat
ggsci(source)> ADD EXTRACT dp1 EXTTRAILSOURCE /u02/oracle/ogg11/dirdat/ex
ggsci(source)> ADD RMTTRAIL /u02/oracle/ogg11/dirdat/rt,EXTRACT dp1
ggsci(source)> info all
ggsci(source)> start mgr
ggsci(source)> start *

16、target主机准备
ggcgi> edit params rt1
REPLICAT rt1
USERID ggadmin,PASSWORD ggadmin
ASSUMETARGETDEFS
DISCARDFILE /u01/discards.dsc,PURGE
MAP user01.*,TARGET user01.*;

GGSCI > dblogin userid ggadmin, password ggadmin

$CHKPOINT table$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

conn /as sysdba
select sid,username,program from v$SESSION where username iso not null;

ggsci(target)> dblogin userid ggadmin,password ggadmin
ggsci(target)> add checkpointtable ggadmin.checkpointtable
select object_name,object_type from user_objects;
(ggsci target)
edit params ./GLOBALS
GGSCHEMA ggadmin
CHECKPOINTTABLE ggadmin.checkpointtable

17、修改source数据,insert or delete等,观察target数据是否同步

分类:数据库 | 标签: |

相关日志

评论被关闭!