常见错误解决

本节整理了数据迁移工具的常见错误和解决方法.

  • 增量同步排错常用命令

info extract extz,detail 查看提取进程详细信息
info extract extz,showch 查看提取进程读写位置信息

send extract extz,status 获取提取进程详细状态
Current status 有以下状态:
- In recovery[1] 提取正在恢复到其事务日志中的检查点.通常在读取redo失败时为此状态
- In recovery[2] 提取是恢复从其检查点到trail文件结束.通常在写入tail文件异常时为此状态
- Recovery complete 恢复完成,将恢复正常处理.正常的状态

send extract extz,forcestop 强制结束提取进程,如仍然不能结束,可以使用 kill -9 PID 杀死进程
send extract extz,showtrans 查看提取进程正在处理的事务信息,如没有正在处理的事务则输出 No transactions found.

stop extract extz 停止提取进程
delete extract extz 删除提取进程

  • 错误信息

    ERROR   OGG-00770  Failed to connect to MySQL database engine for HOST 192.168.4.11, DATABASE root, USER root, PORT 3309.
    

    原因

    未找到和账号同名的数据库,连接检查失败.

    解决

    创建和账号同名的数据库.

  • 错误信息

    ERROR   OGG-06551  Could not translate host name x86-11 into an Internet address.
    

    原因

    不能解析主机名

    解决

    echo '127.0.0.1  主机名'  >> /etc/hosts 添加主机名解析

  • 错误信息

    FATAL: _extract_data() ORA-01466: unable to read data - table definition has changed (DBD ERROR: error possibly near <*> indicator at char 157 in 'SELECT ...... AS OF SCN 15959730 a')
    

    原因

    表结构发生了变更

    解决
    清除目标库中的checkpointtab_lox和checkpointtab表,然后从头开始执行程序

  • 错误信息

    Error: cannot fork: Cannot allocate memorytotal rows (1.6%) - (492 sec., avg: 11 recs/sec), EDC_REPORTSHEETDS in progress.

    原因
    内存不足

    解决
    减少 JOBS 和 DATA_LIMIT 参数值或增加内存

  • 错误信息

    ogg抽取状态正常,但获取不到新数据。ditdat 目录下的trail文件也没有增长

    执行send EXTRACT extz,status SCN始终是0.0

    GGSCI (x86-13) 2> info extz,showch
    
    Read Checkpoint #1
    Oracle Redo Log
    
    Startup Checkpoint (starting position in the data source):
        Timestamp: 2023-08-06 14:06:18.000000
        SCN: 0.0 (0)
    
    Recovery Checkpoint (position of oldest unprocessed transaction in the data source):
        Timestamp: 2023-08-06 14:06:18.000000
        SCN: 0.0 (0)
    
    Current Checkpoint (position of last record read in the data source):
        Timestamp: 2023-08-06 14:06:18.000000
        SCN: 0.0 (0)
    

    执行send EXTRACT extz,status 状态始终是 Current status: In recovery[1]: At EOF

    GGSCI (x86-13) 1> send extz,status
    
    Sending STATUS request to EXTRACT EXTZ ...
    EXTRACT EXTZ (PID 115)
    Current status: In recovery[1]: At EOF
    
    Current read position:
    Redo thread #: 1
    Sequence #: 0
    RBA: 0
    Timestamp: 2023-08-06 14:06:18.000000
    SCN: 0.0 (0)
    Current write position:
    Sequence #: 1
    RBA: 1462
    Timestamp: 2023-08-06 14:20:54.880333
    Extract Trail: ./dirdat/ea
    

    原因
    SCN: 0.0 (0) 说明SCN获取不正常
    In recovery[1]: At EOF 说明接收redo日志结束
    可能是ogg端和源端系统时间不一致,导致获取不到SCN信息和新的redo日志

    解决
    检查客户端和服务端时间是否一致

  • 错误信息

    ERROR   OGG-00685  begin time Aug 6, 2023 5:46:44 PM prior to oldest log in log history. Last SQL executed <SELECT MAX(sequence#)   FROM (select sequ
    ence#     FROM v$log_history     WHERE first_time < TO_DATE(:begin_time,'YYYY-MM-DD HH24:MI:SS') AND     RESETLOGS_CHANGE# LIKE :resetlogs_change_number AND     thread# =
    :ora_thread    ORDER BY first_change# DESC)>.
    

    原因

    其中某些初始日志位置在初始化时未解析,仅当在创建数据库之后且在启动提取之前未发生第一次日志切换时才会发生这种情况

    解决
    有oracle端执行 ALTER SYSTEM SWITCH LOGFILE; 日志切换
    然后 start extz11 重新启动提取进程

    其他原因及解决方法: 如果 RAC 中的某些节点不活动,OGG 在尝试查找这些非活动节点的重做日志时将遇到此错误。
    这种情况下的解决方案是从 GG 中排除那些不活跃的节点,例如 THREADOPTIONS PROCESSTHREADS SELECT 1
    在extract 抽取文件中添加 THREADOPTIONS PROCESSTHREADS SELECT 1 这一行参数以后

  • 错误信息
    ERROR   OGG-00423  Could not find definition for TEST.t1

    原因

    没找到表的定义

    解决
    在目标端应用进程repz添加 ASSUMETARGETDEFS 告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数指定表定义文件。

  • 错误信息

    ERROR   OGG-05310  Oracle GoldenGate does not support [Unknown]. Supported versions are SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019.
    

    原因

    版本不兼容

    解决
    目前只支持 SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019