KFS同步服务离线提示ORA-00972: 标识符过长
问题描述
巡检过程中发现KES V8R6 到Oracle11g 目标端同步服务离线 state=OFFLINE:ERROR,
[kfs@xzsbk ~]$ fsrepctl services
Processing services command…
NAME VALUE
appliedLastSeqno: -1
appliedLatency : -1.0
role : slave
serviceName : target_oracle_3112
serviceType : unknown
started : true
state : OFFLINE:ERROR
Finished services command…
分析过程
查看详细状态
重点看: pendingErrorSeqno : 385598
pendingError
pendingExceptionMessage
state: OFFLINE:ERROR
[kfs@xzsbk ~]$ fsrepctl -service target_oracle_3112 status
Processing status command…
NAME VALUE
appliedLastEventId : NONE
appliedLastSeqno : -1
appliedLatency : -1.0
autoRecoveryEnabled : true
autoRecoveryTotal : 100
channels : -1
clusterName : target_oracle_3112
currentEventId : NONE
currentTimeMillis : 1753422083939
dataServerHost : xzsbk
extensions :
host : xzsbk
latestEpochNumber : -1
masterConnectUri : kufl://kfs:4112/
masterListenUri : kufl://xzsbk:3112/
maximumStoredSeqNo : -1
minimumStoredSeqNo : -1
offlineRequests : NONE
pendingError : Event application failed: seqno=385598 fragno=0 message=com.kingbase.flysync.replicator.applier.ApplierException: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
pendingErrorCode : NONE
pendingErrorEventId : kb:1804442737704:1804547877560
pendingErrorSeqno : 385598
pendingExceptionMessage: com.kingbase.flysync.replicator.applier.ApplierException: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
pipelineSource : UNKNOWN
relativeLatency : -1.0
resourcePrecedence : 99
rmiPort : 11000
role : slave
seqnoType : java.lang.Long
serviceName : target_oracle_3112
serviceType : unknown
simpleServiceName : target_oracle_3112
siteName : default
sourceId : xzsbk
state : OFFLINE:ERROR
timeInStateSeconds : 65376.814
timezone : GMT+08:00
transitioningTo :
uptimeSeconds : 5626972.117
useSSLConnection : false
version : Kingbase FlySync V002R002C004PS002
Finished status command…
查看日志
重点看 Event application failed: seqno=385598 fragno=0 message= 部分信息,定位到报错的序号
2025-07-24 19:31:47 | | [target_oracle_3112 - pool-2-thread-1-q-to-dbms-0] ERROR pipeline.SingleThreadStageTask Event application failed: seqno=385598 fragno=0 message=com.kingbase.flysync.replicator.applier.ApplierException: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
com.kingbase.flysync.replicator.applier.ApplierException: com.kingbase.flysync.replicator.applier.ApplierException: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
at com.kingbase.flysync.replicator.applier.JdbcApplier.apply(JdbcApplier.java:2847)
at com.kingbase.flysync.replicator.applier.ApplierWrapper.apply(ApplierWrapper.java:99)
at com.kingbase.flysync.replicator.pipeline.SingleThreadStageTask.apply(SingleThreadStageTask.java:963)
at com.kingbase.flysync.replicator.pipeline.SingleThreadStageTask.runTask(SingleThreadStageTask.java:646)
at com.kingbase.flysync.replicator.pipeline.SingleThreadStageTask.run(SingleThreadStageTask.java:206)
at java.lang.Thread.run(Thread.java:750)
Caused by: com.kingbase.flysync.replicator.applier.ApplierException: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
at com.kingbase.flysync.replicator.applier.JdbcApplier.applyStatementData(JdbcApplier.java:982)
at com.kingbase.flysync.replicator.applier.OracleApplier.applyStatementData(OracleApplier.java:1319)
at com.kingbase.flysync.replicator.applier.JdbcApplier.apply(JdbcApplier.java:2604)
... 5 more
Caused by: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
at oracle.jdbc.driver.OracleStatement.executeLargeBatch(OracleStatement.java:4659)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:4527)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:237)
at com.kingbase.flysync.replicator.applier.JdbcApplier.applyStatementData(JdbcApplier.java:908)
... 7 more
查看序号为385598对应的SQL文件
[kfs@xzsbk ~]$ kufl list -seqno 385598
SEQ# = 385598 / FRAG# = 0 (last frag)
- TIME = 2025-07-24 18:48:01.413
- EPOCH# = 324138
- EVENTID = kb:1804442737704:1804547877560
- SOURCEID = kesbzk
- METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=#UNKNOWN;bidi_unsafe=true;service=source_kesv8r6_3112;shard=#UNKNOWN]
- TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
- OPTIONS = []
- OPTIONS = [TG_TAG = CREATE INDEX, TABLE = NULL]
- SQL(0) =
- SCHEMA = SJTBK
- DDL = CREATE UNIQUE INDEX idx_unique_e_lic_ncertificate_xs1_licid
ON e_lic_ncertificate_xs1(licid);
数据库中查索引名称长度:
bzk=# select length(‘idx_unique_e_lic_ncertificate_xs1_licid’);
length
39
(1 row)
解决办法
由于e_lic_ncertificate_xs1 表不在该链路同步列表中,所以准备跳过该SQL对应的序号进行同步
–停止同步服务
fsrepctl -service target_oracle_3112 offline
–状态ONLINE前跳过指定的seqno
fsrepctl -service target_oracle_3112 online -skip-seqno 385598
必须先将同步服务offline不然启动同步服务报以下错误:
[kfs@xzsbk ~]$ fsrepctl -service target_oracle_3112 online -skip-seqno 385598
Operation failed: Online operation failed (Operation irrelevant in current state)