基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Oracle Store 在 isUpdatePK 堆栈处报错
更新时间:2026-08-11 09:11
本文为您介绍 Oracle Store 在 isUpdatePK 堆栈处报 NPE 错误的问题原因和解决方法。
适用版本
适用于 OceanBase 迁移服务(OceanBase Migration Service,OMS)全部版本。
问题描述
Oracle Store 在 isUpdatePK 堆栈处报 NPE 错误,然后退出,导致 Oracle Store 位点卡住。
问题原因
在 isUpdatePK 堆栈处报 NPE 错误,是因为拉取到的 Oracle 日志中没有 PK/UK,而 PK/UK 的日志是必要的。
可能存在以下三种情况:
Oracle 上 PK/UK 的补偿日志未打开。
执行下述命令,检查是否已打开补偿日志。如果查询结果中存在
NO,表示未按要求打开所需的补偿日志。select supplemental_log_data_pk, supplemental_log_data_ui from v$database;从物理备库拉取日志,仅开启了物理备库的补偿日志,未开启主库的补偿日志。
在主库执行下述命令,检查是否已打开补偿日志。如果查询结果中存在
NO,表示未按要求打开所需的补偿日志。select supplemental_log_data_pk, supplemental_log_data_ui from v$database;Oracle 上开启 PK/UK 补偿日志后,未切归档便新建了链路。Oracle Store 定位起始拉取文件时,会根据指定的时间戳回退 0~2 个归档文件。开启 PK/UK 补偿日志后,未切归档便创建项目,拉取的日志中就可能包含了在开启 PK/UK补偿日志前的日志。
解决方法
针对情况 1 和情况 2 的解决办法
执行下述语句,打开补偿日志。
alter database add supplemental log data(primary key, unique) columns;打开后,切换 3 次归档日志。如果是 RAC,多个实例交替切换。
alter system switch logfile;
开启补偿日志后,需要切换 3 次归档日志的原因:Oracle Store 定位起始拉取文件时,会根据指定的时间戳回退 0~2 个归档文件。开启补偿后,为了不拉取开启补偿日志前的日志,您需要切换 3 次归档。否则 Store 将异常退出。
如果是 RAC,需要多个实例交替切换的原因:RAC 的情况下,如果一个实例切换多次后,再切换另外的实例,而非交替切换,则定位起始拉取文件时,后切换的实例将可能定位至开启补偿日志前的日志。
针对情况 3 的解决办法
在 Oracle 主库上切换 3 次归档日志。如果是 RAC,多个实例交替切换,然后再新建链路。
alter system switch logfile;