记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理

1. ogg进程abended的几种常见原因:

  1. undo表空间不足导致abended。

  2. 数据不一致,违反唯一约束导致abended。

  3. 源端和目标端表结构不一致导致abended。

  4. 源端表名过长,同步到目标端报错导致abended。

  5. OGG-03517字符集转换问题导致abended。

6.索引失效或者未添加附加日志导致abended。

2. 问题排查

这里介绍同步的表未添加附加日志导致abended,ogg 日志报错OGG-01431、OGG-01003、OGG-01151、OGG-01296。

进入 OGG 命令行, 先尝试登录ogg后重新拉起问题进程

start rp_ac5b

--查看导致进程abended的原因

如果进程重新拉起后还是abended可以通过下面命令查看日志

view report rp_cb39

--报错:

OGG-01431 Aborted grouped transaction on DBOR.OR_PREOREDR_INFO,Mapping error.

OGG-01003 Repositioning to rba 283465958 in seqno 116073

OGG-01151 Error mapping from DBOR.OR_PREOREDR_INFO to DBOR.OR_PREOREDR_INFO.

OGG-01296 Error mapping from DBOR.OR_PREOREDR_INFO to DBOR.OR_PREOREDR_INFO.

2.1. 查询表的索引信息

索引失效可能会导致问题的发生,如果没有主键索引重新创建即可,这个查询,表是有主键索引。

复制代码
-- 如果没有索引添加索引
create index 索引名 on 表名 (LIMITINS_ID,UPDATE_ACCEPT,UPDATE_TYPE) tablespace TBS_DATA parallel 32;
alter index 索引名 noparallel;
alter table 表名  add constraint 索引名  primary key (LIMITINS_ID,UPDATE_ACCEPT,UPDATE_TYPE)  using index tablespace TBS_DATA;

-- 检查表的索引信息
 SET linesize 500
      col INDEX_COL  FOR a30
      col INDEX_TYPE FOR a22
      col INDEX_NAME FOR a32
      col table_name FOR a32
      SELECT B.OWNER||'.'||B.INDEX_NAME INDEX_NAME, 
             A.INDEX_COL,B.INDEX_TYPE||'-'||B.UNIQUENESS INDEX_TYPE,B.PARTITIONED
        FROM (SELECT TABLE_OWNER,TABLE_NAME,INDEX_NAME, SUBSTR(MAX(SYS_CONNECT_BY_PATH(COLUMN_NAME, ',')), 2) INDEX_COL
                FROM (SELECT TABLE_OWNER, TABLE_NAME,INDEX_NAME,  COLUMN_NAME,
                             ROW_NUMBER() OVER(PARTITION BY TABLE_OWNER, TABLE_NAME, INDEX_NAME 
                             ORDER BY TABLE_OWNER, INDEX_NAME, COLUMN_POSITION, COLUMN_NAME) RN
                        FROM DBA_IND_COLUMNS
                       WHERE TABLE_NAME = UPPER('表名')
                         AND TABLE_OWNER = UPPER('属主'))
               START WITH RN = 1
              CONNECT BY PRIOR RN = RN - 1
                     AND PRIOR TABLE_NAME = TABLE_NAME
                     AND PRIOR INDEX_NAME = INDEX_NAME
                     AND PRIOR TABLE_OWNER = TABLE_OWNER
               GROUP BY TABLE_NAME, INDEX_NAME, TABLE_OWNER
               ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME
             ) A,
            (SELECT * FROM DBA_INDEXES WHERE TABLE_NAME = UPPER('表名') AND TABLE_OWNER = UPPER('属主')) B
       WHERE A.TABLE_OWNER = B.TABLE_OWNER
         AND A.TABLE_NAME = B.TABLE_NAME
         AND A.INDEX_NAME =B.INDEX_NAME;  

查询存在主键索引:

2.2. 检查表是否有附加日志

检查表是否有附加日志,在主库中执行。

复制代码
--查询附加日志
set line 222
col owner for a20
col table_name fro a20

select * from dba_log_groups where table_name = 'OR_PREORDER_INFO' and OWNER in ('DBORDERADM');
select * from dba_log_group_columns where table_name = 'OR_PREORDER_INFO' and OWNER in ('DBORDERADM');

发现同步的表在主库中没有附加日志。

复制代码
--添加附加日志
alter table DBORDERADM.OR_PREORDER_INFO and supplemental log data(all,primary key,unique,foreign key) columns;

3. 问题处理

3.1. 重新初始化表

重新初始化就是,将源端的数据通过数据泵的方式导入到目标库,在拉起 ogg 进程。需要注意的是源库的 SCN 号,在导数之前需要将目标端的表。

复制代码
1)目标端停掉数据不一致表对应的复制进程
stop RP_CR39 

2)源端导出表
获取SCN号
set numwidth 20
select current_scn from v$database;

         CURRENT_SCN
--------------------
      17706749349673

col OWNER for a10
col DIRECTORY_NAME for a20
col DIRECTORY_PATH for a60
set linesize 999
select * from dba_directories;

3)源端进行导入
vi EMP_UR.par

userid='/ as sysdba'
dumpfile=EMP_UR%U.dmp
logfile=EMP_UR.log
directory=DP_DIR
parallel=4
COMPRESSION=all
TABLES=(
表名)
flashback_scn=17706749349673
VERSION=12.1.0.2

nohup expdp parfile=EMP_UR.par > EMP_UR.out &


4)目标端进行导入
export ORACLE_SID=XXX
set line 222
col grantee for a20
col owner for a20
col table_name for a30
col grantor for a30
col  priivilege for a20
SELECT * FROM dba_TAB_PRIVS WHERE TABLE_NAME = '%UR_USER%';
查询结果为0,不存在表级权限。


vi IMP_UR.par

userid='/ as sysdba'
dumpfile= EMP_UR%U.dmp
logfile= IMP_UR.log
directory=IMPDIR
parallel=4
remap_tablespace=(TBS_DATA_C:TBS_DATA)


nohup impdp parfile= IMP_UR.par > IMP_UR.out &

5)添加map加SCN的参数  -- vi  ./dirprm/crma/MAP_CRA_DBCU_09.obey 
view params RP_CRA14
vi  ./dirprm/crma/MAP_CRMA_DBCUSTADM_09.obey 
MAP DBCUSTADM.UR_USERGOODSLMT_INFO_HIS, TARGET DBCUSM.UR_USER,  filter(@GETENV('TRANSACTION','csn') > 17706749349673);  --营业A

6)启动复制进程
start RP_CR39 
info all


7)同步正常后,删除scn参数
stop RP_CR39  停止进程
vi /acfs/ogg19C/dirprm/crma/MAP_CRA_DBCUM_09.obey 

MAP DBC.UR_USER, TARGET DBC.UR_USER;
start RP_CR39 

这次分享到这里,后期会分享,生产中ogg进程的其他常见问题的处理方法。

--2025年5月21日

--生产环境报错:

1.ERROR OGG-00519 Fatal error executing DDL replication: error Error code \[1917 ora-01917:user or role 'XXXX' does not exist ],no error handler present.

处理:

添加复制进程的参数:

DDLERROR 1435 IGNORE INCLUDE OPTYPE ALTER OBJTYPE SESSION

如果不存在该用户则直接忽略相关的日志记录操作。

2.ERROR OGG-00519 Fatal error executing DDL replication: error Error code \[1435 ora-01435:user does not exist

],no error handler present.

处理:

添加复制进程的参数:

DDLERROR 1917 IGNORE

相关推荐
云贝贝贝7 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
wxwx_bscxy3227 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向8 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却8 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO10 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记10 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数11 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
坐吃山猪11 小时前
【多线程】Semaphore使用
java·数据库·oracle·多线程
数智启示录11 小时前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
姜太小白12 小时前
【Oracle】记排查sh脚本调用SQL执行卡顿的排查总结
数据库·sql·oracle