1.数据库thread与sid不对应
问题描述:
GGS ERROR 500 抽取进程extu1起不来,提示找不到thread2的归档(没有保留哪天具体的报错信息) |
问题分析:
rac数据库曾经删除又重建一个节点,故thread2对应的实例已经没有了,更没有它的归档了(之前是将该实例删除前的归档日志来骗过gg,但是后来这种方式不管用了)
问题处理:
在extu1的参数文件中跳过数据库thread2的同步:
1).找出数据库thread2对应gg的thread号
select distinct(thread#) from V$log;
info extract extu1,showch
2).跳过该thread : THREADOPTIONS PROCESSTHREADS EXCEPT 3
2.表结构或数据不一致
问题描述:
2011-07-08 20:42:12 GGS ERROR 218 Error mapping from user.TMQAPR to user.TMQAPR. |
问题分析:
出现该问题一般都是由于同步的源和目标表结构不一致,包括表字段和索引。
除表结构外,数据的不一致也可能导致mapping 错误,如原库要delete或update时,gg库找不到该条数据等,具体原因见report中的错误号:
2011-07-18 09:29:46 GGS WARNING 218 SQL error 1403 mapping ITM.SALES_CARD to ITM.SALES_CARD. 2011-07-18 09:29:46 GGS ERROR 218 Error mapping from ITM.SALES_CARD to ITM.SALES_CARD.. |
$ oerr ora 1403
01403, 00000, "no data found"
// *Cause:
// *Action:
问题处理:
1).如果是表字段不一致,需要修改表字段,异构数据库还需要重新生成表结构定义文件,再重启进程。
2). 如果是索引不一致,需要重建索引,异构数据库还需要重新生成表结构定义文件,再重启进程。(之前没有关注索引是否一样,以后关注一下索引)
3). 遇到这种情况,不能先去对比两端的表结构(可能修改表结构的sql在后面执行),而应该先去查明原因。若是数据问题,可以跳过该表的同步,然后重新同步该表。
3.discard file写满了
问题描述:
REPU1 report中报错,discard 超出了限制大小(具体的报错信息没记下,如果找到了,再补充). |
问题分析:
因为某些原因,导致gg一直写discard,超过参数文件中限定的大小,就会报错。解决了不断discard的问题,就能解决discard文件写满的问题。
问题处理:
1).修改repu1的参数文件,增大discard文件限制:discardfile /goldengate/dirrpt/repu1.dsc,append,megabytes 2000m(可选) 。
2).查看disc