GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库实时同步(real-time data synchronize)、双活(active-active high availability)。GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制。
1.防止数据循环
双向复制中,最主要的问题是需要防止数据的循环应用。在GoldenGate中,需要从两方面进行预防:
(1)防止Extract进程抓取Replicat进程的SQL操作。
在默认配置下,GoldenGate的Extract进程会忽略捕获由Replicat执行的SQL操作(Teradata除外,需要进行额外配置),所以这部分一般不需要额外设置。
(2)使Extract进程识别本地Replicat执行的DML事务,并进行忽略。
这步在Oracle(10g and later)中的配置为在Extract进程加入参数:
TRANLOGOPTIONS EXCLUDEUSER
e.g: TRANLOGOPTIONS EXCLUDEUSER ogg
不同的数据库这里需要配置的参数不同。如果是Oracle 9i或之前的版本,需要配置tracetable。
2.防止数据冲突
由于是双向复制,那么当两端都对同一数据进行操作时,就会发生冲突。比如同时对某行数据进行修改,修改的操作将会被覆盖(视LAG以及事务的先后);又比如两端插入或删除相同键值的数据。
对于这类数据冲突,最好是在业务应用层解决。比如,可以划分两端数据库应用的业务范围,一部分数据只在一端修改维护,另一端则修改维护其他数据;在两端定义不同的键值生成策略;关注同步表上的触发器和on delete cascade约束。也可以借助GoldenGate的映射和过滤功能,对于两端同步的数据进行区分。
总之,在配置双向复制环境时,需要综合考虑当时业务情况,一般都需要在应用层进行适当的修改,以防止数据冲突带来的数据丢失和不一致。
服务器名 |
IP |
ORACLE |
系统 |
ORACLE_SID |
Master |
192.168.30.27 |
Oracle 11g |
Centos 6.3 64 bit |
Oggtest |
Backup |
192.168.30.28 |
Oracle 11g |
Centos 6.3 64 bit |
testw |
下载ogg并解压就完成了安装J
服务端:
[oracle@Test-DB01 ora11g]$ mkdir -p /opt/ora11g/ogg
[oracle@Test-DB01 ora11g]$ cd /opt/ora11g/ogg
[oracle@Test-DB01 ora11g]$ tar –xvf fbo_ggs_Linux_x64_ora10g_64bit.tar
[oracle@Test-DB01 ora11g]$ chown -R oracle:oinstall /opt/ora11g/ogg
客户端(目录不一样):
[oracle@Test-DB01 ora11g]$ mkdir -p /opt/oracle/ogg
[oracle@Test-DB01 ora11g]$ cd /opt/ oracle /ogg
[oracle@Test-DB01 ora11g]$ tar –xvf fbo_ggs_Linux_x64_ora10g_64bit.tar
[oracle@Test-DB01 ora11g]$ chown -R oracle:oinstall /opt/ oracle /ogg
l 主备服务器上都要配置:
[oracle@Test-DB01 ora11g]$ vi /home/oracle/.bash_profile
增加如下两行:
export GGATE=$ORACLE_BASE/ogg
export LD_LIBRARY_PATH_64=$ORACLE_HOME/lib
生效环境变量
[oracle@Test-DB01 ora11g]$ source /home/oracle/.bash_profile
l 主备服务器上都要配置(在单向环境下从无需配置)
1) 查看归档日志模式:
sqlplus / as sysdba
select log_mode,supplemental_log_data_min,force_logging from v$database;
2) 更改归档模式(在生产环境下一般都开启了归档模式,不执行)
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter system set log_archive_dest_1='location=/opt/ora11g/flash_recovery_area/ORCL/archivelog' scope=both;
3) 配置日志模式(打开强制规档与补充日志模式)
alter database add supplemental log data;
alter database force logging;
4) 查看配置结果:
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;
5) 切换归档日志:
SQL> alter system switch logfile;
l 主备服务器上都要配置(在单向环境下从无需配置)
su – oracle
sqlplus /nolog
conn / as sysdba;
create user ogg identified by ogg default tablespace users temporary tablespace TEMP;
grant connect,resource to ogg;
grant create session,alter session to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on dbms_flashback to ogg;
su – oracle
cd /opt/ora11g/ogg
./ggsci
–如果找不到.so文件,注意检查$LD_LIBRARY_PATH(和系统自带的不同)环境变量
GGSCI (test) 1> create subdirs
数据泵的方式进行倒数据
export ORACLE_SID=orcl
expdp system/oracle directory=data_pump_dir SCHEMAS=SVD,CTR,PAL,YLWL,PST,MSG,CTS,SND,SAL,PORTAL,BIL,ITD,OPRT,MESSAGER,STAT dumpfile=expdp_orcl02.dmp logfile=expdp_orcl02.log
scp -P 99 /opt/ora11g/admin/orcl/dpdump/expdp_orcl02.dmp [email protected]:/opt/ora11g/admin/orcl/dpdump/expdp_orcl02.dmp
=====================================================================
export ORACLE_SID=orcl
impdp system/oracle directory=data_pump_dir dumpfile=expdp_orcl02.dmp PARALLEL=12 logfile=impdp_orcl02.log
Mgr 主进程:负责端口监听,以及进程守护
Extract 抽取进程:负责抽取指定的语句,并写入到本地的文件里
Pump 发送进程:负责把本地的文件发送到远端服务器
检查表 :复制进程需要的表
Replicat 复制进程: 复制进程,把主过来的文件复制到本地数据库
l 主备服务器上都要配置(此配置为DDL配置,如DML无需配置)
SQL> grant dba to ogg;
SQL> @marker_setup 说明: 均指定用户ogg
SQL> @ddl_setup 说明: 11.1.1.2需要手动输入 ogg (INITIALSETUP,yes)
SQL> @role_setup
SQL> grant GGS_GGSUSER_ROLE to ogg;
SQL> @ddl_enable
SQL> @marker_status.sql
SQL> @?/rdbms/admin/dbmspool.sql
SQL> @ddl_pin.sql ogg
注1: 执行dbmspool包将在数据库中创建DBMS_SHARED_POOL包,之后ddl_pin包需要用到
注2: 执行ddl_pin.sql通过dbms_shared_pool.keep存储过程将DDLReplication相关对象keep在共享池中,以保证这些对象不要RELOAD,提升性能。
进入控制台进行配置
/opt/ora11g/ogg/ggsci
edit params mgr
port 7809 /* mgr所用端口号*/
dynamicportlist 7800-8000 /* mgr可用的端口范围*/
autostart extract * /* 自动启动抽取进程 */
autorestart extract *, waitminutes 2, resetminutes 5 /* 自动重启抽取进程 */
lagreporthours 1 /* 每隔1小时检查延迟报告*/
laginfominutes 3 /* 每隔3分钟检查延迟,如果超过延迟阈值,将写入错误日志*/
lagcriticalminutes 5 /*延迟阈值5分钟*/
purgeoldextracts /opt/ora11g/ogg/dirdat/rt*, usecheckpoints, minkeepdays 3
/* 队列传递结束后,依然保留本地队列3天*/
配置完成后启动mgr进程
start mgr
配置抓取进程eora
edit params eora
extract eora
dynamicresolution
setenv (ORACLE_SID=testw)
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg,password ogg
exttrail /opt/ora11g/ogg/dirdat/et
tranlogoptions excludeuser ogg
ddl include all
ddloptions addtrandata, report
table hr.*;
添加抽取进程
add extract eora, tranlog,begin now
添加本地trail文件
add exttrail /opt/ora11g/ogg/dirdat/et,extract eora
启动服务
start extract eora
edit params pump_so
extract pump_so
dynamicresolution
passthru
rmthost 192.168.30.41,mgrport 7809,compress
rmttrail /opt/oracle/ogg/dirdat/pt
table hr.*;
添加pump进程
add extract pump_so,exttrailsource /opt/ora11g/ogg/dirdat/et
添加远程trail文件
add rmttrail /opt/oracle/ogg/dirdat/pt,extract pump_so
说明: 指定远程trail文件
启动pump进程
start extract pump_so
编辑全局配置文件
edit params ./GLOBALS
CHECKPOINTTABLE ogg.checkpoint
exit
export ORACLE_SID=test
./ggsci
GGSCI (slave) 1> dblogin userid ogg,password ogg
Successfully logged into database.
GGSCI (slave) 2> add checkpointtable ogg.checkpoint
Successfully created checkpoint table OGG.CHECKPOINT.
edit params repl
replicat repl
setenv (ORACLE_SID=testw)
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ogg,password ogg
assumetargetdefs
reperror default,discard
discardfile /opt/oracle/ogg/dirrpt/repl.dsc,append,megabytes 50
dynamicresolution
DBOPTIONS SUPPRESSTRIGGERS
DBOPTIONS DEFERREFCONST
map hr.*, target hr.*;
2) 添加复制进程
add replicat repl,exttrail /opt/oracle/ogg/dirdat/pt, CHECKPOINTTABLE ogg.checkpoint
3) 启动进程
start repl
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29578568/viewspace-2138128/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29578568/viewspace-2138128/