方案概述
在使用goldengate进行正式迁移实施时,都有一个环节是对迁移表的数据进行全量比对,保证数据不会有任何丢失。因为这个比对动作是发生在正式实施阶段,如果此时比对有数据丢失,这时再进行数据补救可能会影响到割接的时间,所以这里介绍一个小技巧,可以在平时的动态同步时,对数据进行全量比对,提早发现数据不一致的问题。
实施步骤
1. 首先暂时停止目标端的replicat进程R_TEST1,并查看该进程正读取到trail文件(tt000000000)和RBA(13360)
GGSCI> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING R_TEST1 00:00:00 00:00:07
GGSCI> stop R_TEST1
Sending STOP request to REPLICAT R_TEST1 ...
Request processed.
GGSCI> info R_TEST1
REPLICAT R_TEST1 Last Started 2022-04-13 02:16 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:26:40 ago)
Log Read Checkpoint File /goldengate/191004/dirdat/e_test1/tt000000000
13360
2. 通过trail文件(tt000000000)和RBA(13360)获取源端对应的SCN(1127250)
Logdump>open /goldengate/191004/dirdat/e_test1/tt000000000
Current LogTrail is /goldengate/191004/dirdat/e_test1/tt000000000
Logdump>pos 13360
Reading forward from RBA 13360
Logdump>ghdr on
Logdump>detail data
Logdump>ggstokens detail
Logdump>n
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x0c)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 23 (x0017) IO Time : 2022/04/13 02:40:57.291.649
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 11 AuditPos : 1076752
Continued : N (x00) RecCount : 1 (x01)
2022/04/13 02:40:57.291.649 Insert Len 23 RBA 13360
Name: TEST.TAB1 (TDR Index: 1)
After Image: Partition x0c G s
0000 0600 0000 0200 3230 0100 0900 0000 0500 4943 | ........20........IC
4f4c 24 | OL$
Column 0 (x0000), Len 6 (x0006)
0000 0200 3230 | ....20
Column 1 (x0001), Len 9 (x0009)
0000 0500 4943 4f4c 24 | ....ICOL$
GGS tokens:
TokenID x52 'R' ORAROWID Info x00 Length 20
4141 4156 5670 4141 4541 4141 4143 7541 4273 0001 | AAAVVpAAEAAAACuABs..
TokenID x4c 'L' LOGCSN Info x00 Length 7
3131 3237 3235 30 | 1127250
TokenID x36 '6' TRANID Info x00 Length 11
302e 3232 2e31 332e 3131 36 | 0.22.13.116
3131 3237 3235 30 | 1127250
3. 获取当前目标端的SCN(2042340)
SQL> col current_scn for 9999999999999999999999
SQL> select current_scn from v$database;
CURRENT_SCN
-----------------------
2042340
4. 获取到源端和目标端一致的SCN后,此时可以重新开启目标端的replicat进程R_TEST1的同步,不影响下一步的数据比对。
5. 通过指定SCN进行全量数据比对(可以针对记录数比对、也可以生成HASH值进行比对)
通过前面可以知道源端的scn为1127250,目标端的scn为2042340。
数据量比对:
源端:select count(*) from test1.tab1 as of scn 1127250;
目标端:select count(*) from test1.tab1 as of scn 2042340;