IT技术互动交流平台

GoldenGate配置实例:RHEL 4.7下的Oracle 10g RAC到单实例的单向同步(三)

作者:狂浪 的旮旯天地  发布日期:2011-12-09 16:36:07

数据初始化(initial data load)

在进行同步以前,要先对目标端的数据进行初始化
在线迁移有几种方法,这里采取比较靠谱的两种:通过数据库工具(expdp/impdp)和通过文件导入到replicat。我们将这两种方法分别应用在两组抽取/复制对应的4个数据库用户上。w1ext对应的dycommondatabase20用户和dyulcentermanage使用前者,w2ext对应的dyacdb34和dyulcenterm_bak使用后者。


通过expdp/impdp来迁移初始数据


流程图如下:

 

准备工作


1. 禁用DDL的抽取和复制
在extract和replicat参数中将ddl去掉。实际上,若能保证在expdp导出数据期间不会有ddl操作,可以忽略此项
2. 在replicat中使用HANDLECOLLISIONS参数。每一个目标表都必须由一个主键或唯一键。如果没有,使用KEYCOLS选项来代替,如果不能指定,祈祷不会出现两条完全一样的记录吧...


在源端和目标端打开MANAGER

在源端和目标端执行ggsci命令start mgr,启动manager进程

在源端,打开extract进程
GGSCI (rac1) 35> start ext w1ext

Sending START request to MANAGER ...
EXTRACT W1EXT starting

GGSCI (rac1) 36> start ext w1extdp

Sending START request to MANAGER ...
EXTRACT W1EXTDP starting


GGSCI (rac1) 37> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING
EXTRACT RUNNING W1EXT 00:00:00 00:00:05
EXTRACT RUNNING W1EXTDP 00:00:00 02:00:51
EXTRACT STOPPED W2EXT 00:00:00 01:54:09
EXTRACT STOPPED W2EXTDP 00:00:00 01:50:00


在源端,执行expdp导出数据


首先需要在源数据中创建一个directory:

SQL> create directory expdpdir as '/bak/expdpdata';

Directory created.

执行导出:
[oracle@rac1 ~]$ expdp system/aaa directory=expdpdir dumpfile=w1data_%U.dmp logfile=w1data.log schemas=dycommondatabase20, dyulcentermanage parallel=4


将初始数据导入到目标数据库


先通过ftp将expdp导出的文件拷贝到目标主机上:


目标端:
[oracle@ggdb ~]$ ftp 192.168.47.241
Connected to 192.168.47.241.
……
ftp> cd /bak/expdpdata
250 Directory successfully changed.
ftp> lcd /bak/impdpdata
Local directory now /bak/impdpdata
ftp> bin
200 Switching to Binary mode.
ftp> mget w1*

创建directory:
SQL> create directory impdpdir as '/bak/impdpdata';

Directory created.

需要的表空间也要先创建好

数据导入:
impdp system/aaa directory=impdpdir dumpfile=w1data_%U.dmp logfile=w1data_impdp.log schemas=dycommondatabase20, dyulcentermanage parallel=4


由于数据库版本是10.2.0.4,需要在目标库中禁用我们要同步的用户中的触发器
SQL>

begin
for x in (select owner,trigger_name from dba_triggers
where owner in ('DYCOMMONDATABASE20', 'DYULCENTERMANAGE'))
loop
execute immediate 'alter trigger '||x.owner||'.'||x.trigger_name||' disable';
end loop;
end;

/

在目标端,启动复制进程


impdp导入结束之后,启动复制进程

GGSCI (ggdb) 51> start rep dyrep

Sending START request to MANAGER ...
REPLICAT DYREP starting

通过info replicat dyrep 命令来查看复制的状态

在目标端的数据变化追上initial-load结束的时间点后,关闭handlecollisions参数: 先使用SEND REPLICAT命令使之对运行中的replicat生效,然后修改参数文件,使其在下一次启动时生效。

GGSCI (ggdb) 57> SEND REPLICAT w1rep, NOHANDLECOLLISIONS

Sending NOHANDLECOLLISIONS request to REPLICAT W1REP ...
W1REP No tables found matching GOLDENGATE.* to set NOHANDLECOLLISIONS.

然后修改dyrep参数文件,去掉handlecollisions参数

 

通过文件到replicat方式来迁移初始数据

流程图如下所示

expdp/impdp的优势之一就是导入很快,而通过文件到replicat的方式,需要一条一条地应用到目标库中,因此导入是最慢的

 

准备工作


1. 禁用DDL的抽取和复制
2. 确认目标端表是空的
3. 禁用外键及check约束
4. 在replicat中使用HANDLECOLLISIONS参数
5. 可以删除大表中的索引以加快导入速度,导入结束后再重建索引


在源端和目标端打开MANAGER

在源端和目标端执行ggsci,打开manager
start mgr
这一步在上面已经做过了,就不再重复

 

Tag标签: GoldenGate配置实例  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规