GoldenGate软件是一种基于日志的结构化数据复制软件。GoldenGate 能够实现大量交易数据的实时捕捉、变换和投递,实现源数据库与目标数据库的数据同步,保持亚秒级的数据延迟。
GoldenGate能够支持多种拓扑结构,包括一对一,一对多,多对一,层叠和双向复制等等。
异常处理一般步骤
如果GoldenGate复制出现异常,可以通过以下步骤尝试解决问题:
1. 通过ggsci>view report命令查找ERROR字样,确定错误原因并根据其信息进行排除;
2. 通过ggsci>view ggsevt查看告警日志信息;
3. 检查两端数据库是否正常运行,网络是否连通;
4. 如不能确定错误原因,则可以寻求Oracle技术支持。在寻求技术支持时一般需要提供以下信息:
a) 错误描述
b) 进程报告,位于dirrpt下以大写进程名字开头,以.rpt结尾,如进程名叫extsz,则报告名字叫EXTSZ.rpt;
c) GGS日志ggserr.log,位于GGS主目录下;
d) 丢失数据报告,在复制进程的参数disardfile中定义,一般结尾为.dsc;
e) 当前队列,位于dirdat下。
常见故障排除
故障(1)
错误信息:OGG-00446 Could not find archived log for sequence 53586 thread1 under alternative destinations. SQL
处理方法:
在没有关闭OGG进程的情况下,提前关闭了数据库,导致OGG进程出现异常。如果是发现了这个错误提示,应该马上关闭OGG进程,注意数据库的归档日志情况,保证归档日志不会缺失,然后等待数据库启动成功后,马上启动OGG进程。
故障(2)
错误信息:OGG-01161 Bad column index (4) specified for table QQQ.TIANSHI,max columns = 4.
处理方法:
对照一下生产端与容灾端的这一张表的表结构,如果容灾端的表缺少一列,则在容灾端,登陆数据库,增加这一列,然后启动复制进程。
故障(3)
错误信息:ERROR OGG-00199 Table QQQ.T0417 does not exist in target database.
处理方法:
查看源端抽取进程的参数,DDL复制参数是否配置,针对这张表,重新实施数据初始化。
网络故障
如果MGR进程参数文件里面设置了autorestart参数,GoldenGate可以自动重启,无需人工干预。
当网络发生故障时, GoldenGate负责产生远地队列的Datapump进程会自动停止. 此时, MGR进程会定期根据mgr.prm里面autorestart设置自动启动Datapump进程以试探网络是否恢复。在网络恢复后, 负责产生远程队列的Datapump进程会被重新启动,GoldenGate的检查点机制可以保证进程继续从上次中止复制的日志位置继续复制。
需要注意的是,因为源端的抽取进程(Capture)仍然在不断的抓取日志并写入本地队列文件,但是Datapump进程不能及时把本地队列搬动到远地,所以本地队列文件无法被自动清除而堆积下来。需要保证足够容量的存储空间来存储堆积的队列文件。计算公式如下:
存储容量≥单位时间产生的队列大小×网络故障恢复时间
MGR定期启动抓取和复制进程参数配置参考:
GGSCI > edit param mgr
port 7809
autorestart er *,waitminutes 3,retries 5,RESETMINUTES 60
每3分钟重试一次,5次重试失败以后等待60分钟,然后重新试三次。
RAC环境下单节点失败
在RAC环境下,GoldenGate软件安装在共享目录下。可以通过任一个节点连接到共享目录,启动GoldenGate运行界面。如果其中一个节点失败,导致GoldenGate进程中止,可直接切换到另外一个节点继续运行。建议在Oracle技术支持协助下进行以下操作:
1) 以oracle用户登录源系统(通过另一完好节点);
2) 确认将GoldenGate安装所在文件系统装载到另一节点相同目录;
3) 确认GoldenGate安装目录属于oracle用户及其所在组;
4) 确认oracle用户及其所在组对GoldenGate安装目录拥有读写权限;
5) 进入goldengate安装目录;
6) 执行./ggsci进入命令行界面;
7) 执行start mgr启动mgr;
8) 执行start er *启动所有进程;
检查各进程是否正常启动,即可进入正常复制。
Extract进程常见异常
对于源数据库,抽取进程extxm如果变为abended,则可以通过在ggsci中使用view report命令察看报告,可以通过搜索ERROR快速定位错误。
一般情况下,抽取异常的原因是因为其无法找到对应的归档日志,可以通过到归档日志目录命令行下执行
ls –lt arch_X_XXXXX.arc
察看该日志是否存在,如不存在则可能的原因是:
§ 日志已经被压缩
GoldenGate无法自动解压缩,需要人工解压缩后才能读取。
§ 日志已经被删除
如果日志已经被删除,需要进行恢复才能继续复制,请联系本单位DBA执行恢复归档日志操作。
一般需要定期备份归档日志,并清除旧的归档日志。需要保证归档日志在归档目录中保留足够长时间之后,才能被备份和清除。即:定期备份清除若干小时之前的归档,而不是全部归档。保留时间计算如下:
某归档文件保留时间≥抽取进程处理完该文件中所有日志所需的时间
可以通过命令行或者GoldenGate Director Web界面,运行info exXX showch
命令查看抓取进程exXX处理到哪条日志序列号。在此序列号之前的归档,都可以被安全的清除。
Replicat进程常见异常
对于目标数据库,投递进程repXX如果变为abended,则可以通过在ggsci中使用view report命令察看报告,可以通过搜索ERROR快速定位错误。
复制进程的错误通常为目标数据库错误,比如:
1) 数据库临时停机;
2) 目标表空间存储空间不够;
3) 目标表出现不一致。
可以根据报告查看错误原因,排除后重新启动rep进程即可。
需要注意一点:往往容易忽略UNDO表空间
。如果DML语句中包含了大量的update和delete操作,则目标端undo的生成速度会很快,有可能填满UNDO表空间。因此需要经常检查UNDO表空间的大小。