针对ogg的P进程挂起的处理步骤(以内网为例,内网操作步骤一致)
查出问题表:
1、首先登陆ogg服务器
2、用命令 su - oracle却换到oracle用户
3、用命令 cd ogg进入到ogg目录
4、用命令 ./ggsci进入到ogg命令行界面
5、用命令 info all查看ogg进程运行情况
6、用命令 view report xxxx可以查看某个进入的运行信息日志 (如何那个进程挂起了就看那个的) 例如view report r_in
7、从日志信息中查看报错的信息,如下所示:
2016-11-16 14:43:23 WARNING OGG-01004 Aborted grouped transaction on 'NEWGDLV.T_O_CERTIFICATEINFO', Database error 1403 (OCI Error ORA-01403: no data foun
d, SQL <UPDATE "NEWGDLV"."T_O_CERTIFICATEINFO" SET "CFI_PRINTCERTDATE" = :a1,"CFI_PRINTSTATUS" = :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSER
ID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>).
2016-11-16 14:43:23 WARNING OGG-01003 Repositioning to rba 459579136 in seqno 31.
2016-11-16 14:43:23 WARNING OGG-01154 SQL error 1403 mapping NEWGDSFLV.T_O_CERTIFICATEINFO to NEWGDLV.T_O_CERTIFICATEINFO OCI Error ORA-01403: no data fou
nd, SQL <UPDATE "NEWGDLV"."T_O_CERTIFICATEINFO" SET "CFI_PRINTCERTDATE" = :a1,"CFI_PRINTSTATUS" = :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSE
RID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>.
8、这里我们可以看到NEWGDLV.T_O_CERTIFICATEINFO这个表有报错
9、报错原因可能有:
a、该表没有主键
b、该表没有附加日志
10、我们通过数据库可以看到这个表是有主键的。那么原因就是没有附加日志造成的了
在对应进程中排除问题表:
1、排除影响复制复制进程的表,用命令:edit param r_out 结果显示如下图:
然后用命令:edit param r_out 编辑这个参数配置文件按字母i进入编辑状态 在OBEY语句前面加上影响复制进程对应的目标表即NEWGDSFLV.T_O_CERTIFICATEINFO,加上的完整语句如下:
MAPEXCLUDE NEWGDSFLV.T_O_CERTIFICATEINFO
按下esc键然后依次键入:wq保存退出
重启ogg:
1、停止所有ogg进程,用命令stop *
2、启动所有ogg进程,用命令start *
为问题表添加附加日志:
1、在ogg的命令界面执行命令view param e_in显示如下信息:
extract E_IN
SETENV (ORACLE_SID="exdb")
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT
--TRANLOGOPTIONS ASMUSER SYS@ASM, ASMPASSWORD oracle
REPORT AT 01:59
REPORTROLLOVER AT 02:00
CACHEMGR, CACHESIZE 256MB
TRANLOGOPTIONS EXCLUDEUSER GGS
EXTTRAIL /ora_data/dirdat/in
NUMFILES 3000
EOFDELAYCSECS 30
GETTRUNCATES
TRANLOGOPTIONS DBLOGREADER
DYNAMICRESOLUTION
BR BRINTERVAL 2H , BRDIR BR
GETUPDATEBEFORES
NOCOMPRESSDELETES
WARNLONGTRANS 3H, CHECKINTERVAL 3M
OBEY /oracle/ogg/dirprm/e_in.txt
2、登录数据库 dblogin Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT(这行是从上面结果中复制过来的)
Successfully logged into database.
3、查看目标表是否有附加日志 info trandata NEWGDSFLV.T_O_CERTIFICATEINFO
Logging of supplemental redo log data is disabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.
4、结果显示是没有附加日志的,用命令为该表添加附加日志add trandata NEWGDSFLV.T_O_CERTIFICATEINFO。删除附加日志用命令:delete trandata xxx.yy
Logging of supplemental redo data enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.
5、查看附加日志是否添加成功,info trandata NEWGDSFLV.T_O_CERTIFICATEINFO
Logging of supplemental redo log data is enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.
Columns supplementally logged for table NEWGDSFLV.T_O_CERTIFICATEINFO: CFI_ID.
6、显示附加日志添加成功了!
初始化数据:
1、初始化内外网对应问题的数据库数据,该表是以内网为准,所以我们备份内网对应的该表然后清空内网原始的表
停止所有ogg进程:
1、停止所有ogg进程,用命令stop *
恢复被排除的表:
1、恢复被排除的表(删掉或注释之前排除表的那行语句即可)
启动所有ogg进程:
1、启动所有ogg进程,用命令start *
2、外网也以同样的方式处理
导入数据:
1、从备份表导入数据到被清空的原始表,然后去外网查看数据是否有同步
2、通过数据库查看,我们看到数据已经成功同步到外网了
总结:
当ogg出现某一进程因某张表异常挂起之后总体处理步骤如下:
1、查出这张表
2、在对应进程的配置文件中排除问题表
3、重启ogg
4、为问题表添加附加日志或者主键
5、初始化数据
6、停止ogg所有进程
7、恢复被排除的问题表
8、启动ogg所有进程
9、导入数据,检查同步是否生效