OGG目的端的checkpoint table被drop的修复方法

本文详细介绍了当GoldenGate Replicat因checkpointtable goldengate.ckptfull被意外删除后,如何通过重建表、获取并修改检查点信息、重新启动Replicat进程来解决启动失败的问题。包括重建表、获取检查点信息、修改检查点、启动进程等关键步骤。

 

OGG目的端的checkpoint table被drop的修复方法
参考自:OGG Replicat Failed Due To Check_point Table beingTruncated (文档 ID 1319832.1)


1.首先,start repfull报错:

GGSCI (localhost.localdomain) 8> view report repfull


***********************************************************************
                 Oracle GoldenGate Delivery for Oracle
 Version 11.2.1.0.20 18227972 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_140304.2209_FBO
   Linux, x64, 64bit (optimized), Oracle 10g on Mar  5 2014 02:20:23
 
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.


                    Starting at 2015-06-11 08:49:51
***********************************************************************

Operating System Version:
Linux
Version #1 SMP Fri Jan 27 17:17:51 EST 2012, Release 2.6.18-308.el5
Node: localhost.localdomain
Machine: x86_64
                         soft limit   hard limit
Address Space Size   :    unlimited    unlimited
Heap Size            :    unlimited    unlimited
File Size            :    unlimited    unlimited
CPU Time             :    unlimited    unlimited

Process id: 7590

Description: 

***********************************************************************
**            Running with the following parameters                  **
***********************************************************************

2015-06-11 08:49:51  INFO    OGG-03035  Operating system character set identified as UTF-8. Locale: en_US, LC_ALL:.

2015-06-11 08:49:51  INFO    OGG-02696  NON-ANSI SQL parameter syntax is used for parameter parsing.
replicat repfull
setenv ( NLS_LANG =  "AMERICAN_AMERICA.ZHS16GBK" )

2015-06-11 08:49:51  INFO    OGG-02095  Successfully set environment variable NLS_LANG=AMERICAN_AMERICA.ZHS16GBK.
assumetargetdefs
userid goldengate, password ************
DBOPTIONS DEFERREFCONST
gettruncates
ALLOWNOOPUPDATES
ddl include mapped
discardfile ./dirrpt/repfull.dsc, append, megabytes 5000
map scott.*, target scott.*;
map lc00019999.*, target lc00019999.*;

2015-06-11 08:49:51  INFO    OGG-00506  Both GETTRUNCATES and DDL replication are enabled.

2015-06-11 08:49:51  INFO    OGG-01815  Virtual Memory Facilities for: COM
    anon alloc: mmap(MAP_ANON)  anon free: munmap
    file alloc: mmap(MAP_SHARED)  file free: munmap
    target directories:
    /u02/ggs/dirtmp.

CACHEMGR virtual memory values (may have been adjusted)
CACHESIZE:                                2G
CACHEPAGEOUTSIZE (normal):                8M
PROCESS VM AVAIL FROM OS (min):           4G
CACHESIZEMAX (strict force to disk):   3.41G

Database Version:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

Database Language and Character Set:
NLS_LANG         = "AMERICAN_AMERICA.ZHS16GBK" 
NLS_LANGUAGE     = "AMERICAN" 
NLS_TERRITORY    = "AMERICA" 
NLS_CHARACTERSET = "ZHS16GBK" 

Source Context :
  SourceModule            : [er.common]
  SourceID                : [/scratch/aime1/adestore/views/aime1_adc4150267/oggcore/OpenSys/src/app/er/common.cpp]
  SourceFunction          : [extract_start_point]
  SourceLine              : [2142]
  ThreadBacktrace         : [11] elements
                          : [/u02/ggs/libgglog.so(CMessageContext::AddThreadContext()+0x1e) [0x2ad4a9a6561e]]
                          : [/u02/ggs/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x2ec) [0x2ad4a9a5e15c]]
                          : [/u02/ggs/libgglog.so(_MSG_ERR_CHECKPOINT_GENERIC(CSourceContext*, char const*, CMessageFactory::MessageDisposition)+0x31) [0x2ad4a9a4f66b]
]
                          : [/u02/ggs/replicat(extract_start_point(time_elt_def*, time_elt_def*)+0x165) [0x520775]]
                          : [/u02/ggs/replicat(replicat_main(int, char**)+0x59f) [0x550f5f]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x4f) [0x5ef7ff]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x104) [0x5efa54]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0x8b) [0x5efb5b]]
                          : [/u02/ggs/replicat(main+0x2c) [0x5502ac]]
                          : [/lib64/libc.so.6(__libc_start_main+0xf4) [0x3a2a01d994]]
                          : [/u02/ggs/replicat(__gxx_personality_v0+0x31a) [0x4c266a]]

2015-06-11 08:49:52  ERROR   OGG-00446  Checkpoint table goldengate.ckptfull does not exist.  Please create the table or recreate the REPFULL group using the correct t
able.

2015-06-11 08:49:52  ERROR   OGG-01668  PROCESS ABENDING.


2.于是,就建立上goldengate.ckptfull 这个表:

 

GGSCI (localhost.localdomain) 9>  dblogin  userid goldengate, password xxx
Successfully logged into database.

GGSCI (localhost.localdomain) 10> ADD CHECKPOINTTABLE goldengate.ckptfull

Successfully created checkpoint table goldengate.ckptfull.


3.此时,start repfull报错:

Source Context :
  SourceModule            : [er.common]
  SourceID                : [/scratch/aime1/adestore/views/aime1_adc4150267/oggcore/OpenSys/src/app/er/common.cpp]
  SourceFunction          : [extract_start_point]
  SourceLine              : [2142]
  ThreadBacktrace         : [11] elements
                          : [/u02/ggs/libgglog.so(CMessageContext::AddThreadContext()+0x1e) [0x2b18e359d61e]]
                          : [/u02/ggs/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x2ec) [0x2b18e359615c]]
                          : [/u02/ggs/libgglog.so(_MSG_ERR_CHECKPOINT_GENERIC(CSourceContext*, char const*, CMessageFactory::MessageDisposition)+0x31) [0x2b18e358766b]
]
                          : [/u02/ggs/replicat(extract_start_point(time_elt_def*, time_elt_def*)+0x165) [0x520775]]
                          : [/u02/ggs/replicat(replicat_main(int, char**)+0x59f) [0x550f5f]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x4f) [0x5ef7ff]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x104) [0x5efa54]]
                          : [/u02/ggs/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0x8b) [0x5efb5b]]
                          : [/u02/ggs/replicat(main+0x2c) [0x5502ac]]
                          : [/lib64/libc.so.6(__libc_start_main+0xf4) [0x3a2a01d994]]
                          : [/u02/ggs/replicat(__gxx_personality_v0+0x31a) [0x4c266a]]

2015-06-11 09:03:03  ERROR   OGG-00446  No data selecting position from checkpoint table goldengate.ckptfull for group 'REPFULL', key 1036574807 (0x3dc8e057), SQL <SEL
ECT a.current_dir, a.seqno, a.rba, a.audit_ts, a.log_csn, a.log_cmplt_csn, a.log_cmplt_xids, b.log_cmplt_xids FROM goldengate.ckptfull a LEFT JOIN goldengate.ckptfull_
lox b ON a.group_name = b.group_name AND a.group_key = b.group_key AND a.log_cmplt_csn = b.log_cmplt_csn WHERE a.group_name = 'REPFULL' AND a.group_key  = 1036574807>.

2015-06-11 09:03:03  ERROR   OGG-01668  PROCESS ABENDING.

4.得到repfull的读检查点信息:

GGSCI (localhost.localdomain) 16> info repfull

REPLICAT   REPFULL   Last Started 2015-06-11 08:30   Status ABENDED
Checkpoint Lag       00:00:00 (updated 00:33:01 ago)
Log Read Checkpoint  File /u02/ggs/dirdat/td000001 ---->1
                     First Record  RBA 1192        ---->1192


 

5.修改检查点(其实不叫修改,就是重复一下而已)

GGSCI (localhost.localdomain) 17> alter replicat repfull, extseqno 1, extrba 1192
REPLICAT altered.


GGSCI (localhost.localdomain) 18> info repfull

REPLICAT   REPFULL   Initialized   2015-06-11 09:05   Status STOPPED
Checkpoint Lag       00:00:00 (updated 00:00:04 ago)
Log Read Checkpoint  File /u02/ggs/dirdat/td000001
                     First Record  RBA 1192


6.启动repfull进程,

GGSCI (localhost.localdomain) 19> start repfull

Sending START request to MANAGER ...
REPLICAT REPFULL starting

注意,此时goldengate.ckptfull表里边才被插入一条记录。

 

7.检查状态:

GGSCI (localhost.localdomain) 41> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    RUNNING     REPFULL     00:00:00      00:00:01    


 

<think>嗯,用户的问题是关于Oracle GoldenGate目标端执行info replica xxx detail命令时不显示Current Checkpoint信息,该如何查看。首先需要理解用户的使用场景和身份。用户应该是负责维护GoldenGate复制的DBA或运维人员,在排查复制状态或故障时遇到了这个问题。用户可能已经尝试了基本命令但没得到需要的信息,现在需要更深入的排查方法。 从用户描述来看,核心痛点在于目标端复制进程的检查点信息缺失。根据引用[2]中的示例,正常情况下INFO命令应该显示类似"Checkpoint Lag 00:00:00"这样的信息。但用户遇到的情况可能是完全没有Current Checkpoint字段,或者显示为0/无效值。这通常意味着复制进程无法正常获取或记录检查点位置。 考虑到GoldenGate的架构,需要分几个层面来分析。首先想到的是基础配置问题:检查点表是否启用。引用[1]提到过对象命名规范的重要性,如果检查点表配置有误(比如表名大小写问题、权限不足),就会导致检查点信息无法写入。建议用户用VIEW CHECKPOINTTABLE命令验证。 另一个常见原因是复制进程状态异常。引用[3]展示了注册进程失败的案例,其中提到"logical decoding cannot be used while in recovery"——这说明数据库本身的恢复模式会影响GoldenGate。如果目标数据库处于只读/恢复状态,复制进程自然无法更新检查点。需要确认数据库的open_mode。 进程日志也是关键突破口。引用[4]显示GoldenGate会记录"Logging of supplemental redo data enabled"这类操作信息。如果检查点更新失败,日志里通常会有ODBC错误或权限拒绝的报错。特别是当看到"RBA not found"这类信息时,很可能存在日志文件缺失或路径错误。 最后想到的是版本兼容性问题。比如GoldenGate版本与数据库版本不匹配时,某些元数据字段可能无法正确解析。这种情况需要查看官方文档的兼容性矩阵,必要时升级补丁。 用户可能需要具体的操作步骤,所以回复应该包含可执行的命令序列:从检查进程状态开始,到验证检查点表、查看数据库模式、分析日志文件,最后建议尝试重启进程。安全起见还要提醒备份参数文件——毕竟在GoldenGate里错误的重启可能导致数据不一致。 补充问题设计也很重要。用户可能延伸想知道如何预防此类问题(比如定期监控检查点表空间),或者需要区分网络中断与元数据损坏的不同表现。特别是当检查点丢失伴随数据延迟时,故障定位方向会完全不同。</think>在Oracle GoldenGate (OGG)目标端执行`INFO REPLICAT <group> DETAIL`时未显示**Current Checkpoint**信息,通常表明复制进程无法正常读取或记录检查点位置。以下是排查步骤和解决方案: --- ### **排查步骤** 1. **检查进程状态** ```bash GGSCI> INFO REPLICAT <group> ``` - 确认状态为 **RUNNING**。若为 **ABENDED** 或 **STOPPED**,需先解决故障并重启进程[^2]。 2. **验证检查点表(Checkpoint Table)** - 检查点表用于持久化复制进度。若未配置或配置错误,将导致检查点信息丢失: ```bash GGSCI> VIEW PARAMS <group> ``` - 确认参数文件包含检查点表配置: ```sql REPLICAT <group> TARGETDB <dsn>, USERIDALIAS <alias> CHECKPOINTTABLE <schema>.<table_name> -- 例如:ggadmin.ggs_checkpoint ``` - **修复方法**: - 若未配置,按规范创建检查点表并添加到参数文件: ```bash GGSCI> DBLOGIN USERIDALIAS <alias> GGSCI> ADD CHECKPOINTTABLE <schema>.<table_name> ``` 3. **检查目标数据库状态** - **问题场景**:目标库为备库(如Data Guard物理备库),处于只读模式。 - **现象**:复制进程无法更新检查点表(引用[3]的`logical decoding cannot be used while in recovery`类似错误)。 - **解决方案**: - 确保目标库为**可读写模式**(`OPEN READ WRITE`)。 - 若必须使用备库,需配置为**逻辑备库**并启用补充日志。 4. **分析进程日志(Report File)** ```bash GGSCI> VIEW REPORT <group> ``` - 搜索以下关键字: - `ERROR OGG-01296`(检查点表访问失败) - `ERROR OGG-02028`(检查点数据损坏) - `No valid checkpoint found` - **修复方法**: - 根据错误提示修复权限、表空间或网络问题。 - 严重损坏时需**重建检查点**(需谨慎操作)。 5. **检查Trail文件完整性** - 若Trail文件损坏或丢失,检查点信息可能无效。 - 使用`LOGDUMP`工具验证当前Trail文件: ```bash LOGDUMP> OPEN ./dirdat/<trail_prefix> LOGDUMP> NEXT ``` - **修复方法**: - 从源头重新传输Trail文件(需协调源端抽取进程)。 --- ### **强制显示检查点信息** 若上述步骤无效,尝试**重启进程**并指定`SHOWCH`参数: ```bash GGSCI> STOP REPLICAT <group> GGSCI> START REPLICAT <group>, SHOWCH GGSCI> INFO REPLICAT <group>, DETAIL ``` > ⚠️ 注意:`SHOWCH`参数强制输出检查点,但可能暴露底层错误。 --- ### **关键配置建议** 1. **检查点表维护** - 定期监控表空间使用率,避免空间不足导致更新失败。 2. **参数文件规范** - 确保`CHECKPOINTTABLE`对象名符合数据库命名规则(引用[1])。 3. **日志保留策略** - 配置`PURGEOLDEXTRACTS`自动清理旧Trail文件,防止文件堆积。 --- ### **示例:修复检查点表故障** ```bash # 1. 停止进程 GGSCI> STOP REPLICAT RCONF # 2. 修复检查点表(如权限问题) GGSCI> DBLOGIN USERIDALIAS TGT_ALIAS GGSCI> GRANT SELECT, INSERT, UPDATE ON ggadmin.ggs_checkpoint TO ggadmin; # 3. 重启进程 GGSCI> START REPLICAT RCONF # 4. 验证检查点 GGSCI> INFO REPLICAT RCONF, DETAIL ``` > 输出应包含: > `Current Checkpoint: RBA 12345, Timestamp 2023-10-01 12:00:00` --- ### **相关问题** 1. **如何避免GoldenGate复制进程因检查点表故障中断?** - 定期监控表空间、权限及网络连接,配置自动告警机制。 2. **目标端数据库为只读备库时,GoldenGate如何正确记录检查点?** - 必须使用逻辑备库模式,并启用`ALTER DATABASE ADD SUPPLEMENTAL LOG DATA`。 3. **GoldenGate检查点信息突然归零可能的原因?** - Trail文件被意外覆盖、检查点表损坏或进程参数被重置。 4. **如何从损坏的检查点中恢复复制进程而不丢失数据?** - 需通过`LOGDUMP`定位最后一个有效事务RBA,手动重置检查点(需严格测试)。 > 引用说明: > [^1]: 对象命名规范影响检查点表访问; > [^2]: 进程状态决定检查点是否更新; > [^3]: 只读数据库导致检查点写入失败; > [^4]: 补充日志是检查点记录的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值