RANDATA
table ttgg.*;
2 、to configure the pump
GGSCI (gg2) 17> add extract p02,exttrailsource /u01/ggate/dirdat/td,begin now
EXTRACT added.
GGSCI (gg2) 19> add rmttrail /u01/ggate/dirdat/dp,extract p02
RMTTRAIL added.
GGSCI (gg2) 27> view params p02
extract p02
userid ggtest,password oracle
rmthost 192.168.50.230,mgrport 7809
rmttrail /u01/ggate/dirdat/dp
table ttgg.*;
3.to configure the replicat group
GGSCI (gg2) 7> add replicat r01,exttrail /u01/ggate/dirdat/pd,begin now
ERROR: No checkpoint table specified for ADD REPLICAT.
GGSCI (gg2) 8> add replicat r01,exttrail /u01/ggate/dirdat/pd,checkpointtable ggtest.checkpoint;
REPLICAT added.
GGSCI (gg2) 28> view params r01
replicat r01
assumetargetdefs
userid ggtest,password oracle
DISCARDFILE /u01/ggate/dirdat/sdisc.dsc,append,megabytes 100
DISCARDFILE不能直接在安装目录/u01/ggate/,进程可能起不来。
DDL INCLUDE MAPPED
DDLERROR DEFAULT IGNORE RETRYOP
map ssgg.*, target ttgg.*;
启动所有进程:
GGSCI (gg2) 3> start mgr
Manager started.
GGSCI (gg2) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT02 00:00:00 00:00:03
EXTRACT RUNNING P02 00:00:00 00:00:07
REPLICAT RUNNING R01 00:00:14 00:00:04
数据同步测试:
Gg1:
SQL> conn ssgg/oracle
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SSGG TABLE
TTGG TABLE
SQL> create table test as select * from ssgg;
Table created.
SQL> select * from test;
ID
----------
1
5
SQL> commit;
Commit complete.
然后查看gg2,看数据是否同步
Gg2:
SQL> conn ttgg/oracle
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SSGG TABLE
TTGG TABLE
SQL> /
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SSGG TABLE
TEST TABLE
TTGG TABLE
SQL> insert into test values(10);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
ID
----------
1
5
10
再返回gg1,查看数据是否同步:
SQL> host hostname
gg1
SQL> select * from test;
ID
----------
1
5
10
至此,Oracle到Oracle的双向数据同步成功(DML+DDL)。
实现双向复制,一般用于双业务中心环境下在实际应用中。双向复制(DDL+DML)面临着许多问题,主要有如下几点:
1. 如果两个库同时更新同一条记录如何处理?调整业务规则
2. 如果网络出现失败如何处理?支持断点续传
3. 如果数据不同步后如何修复?导出源端,导入目标端
总结:
双向复制避免数据冲突是难点,解决这个难点根本还是调整业务:
a) 只在一段开展业务
b) 两端开展不同业务,涉及不同数据集
c) 两端开展相同业务,但依据地域或其他条件对数据予以区分,两边不操作同一条数据
补充:
在oracle中可以通过rowid来定位某条记录,但是目标端的数据库和源端数据库的数据库可能完全不一样,所以无法通过rowid来确定源端数据库的逻辑变化,这时附加日志supplemental log便登上了表演的舞台。数据库在开启附加日志功能后,对于源端的修改操作,oracle会同时追加能够唯一标示记录的列到redo log。这样目标端数据库就可以知道源端发生了哪些具体的变化。
在目标库上创建checkpointtable ,此表中保存的检查点指示 Replicat 进程的当前读写位置。这用于在进程需要重启时或者在服务器出现任何故障或网络停顿时防止数据丢失。如果没有这一机制,将导致数据丢失。另一个好处是,通过使用检查点,多个 Extract 或 Replicat 进程可通过相同的一组线索进行读取。
对于以批处理模式运行的 Extract 和 Replicat 进程,检查点不是必需的,因为这样的进程总是可以重启。然而,在 Extract 和 Replicat 进程连续工作的情况下,检查点是必需的。检查点通常保存在 dirchk 子目录的文件中,但是对于 Replicat,可以选择在数据库的检查点表中保存检查点。