社区版:oms4.2.2,ocenabase4.2.1.4
问题·1:我使用api进行oms迁移,调用创建项目返回"success": true,成功,但是我在控制面看所有的迁移项目没有我这个项目这是什么原因?
问题2:我调用启动项目api返回success": true以后调用查看项目进度接口显示"status": “FAILED”,这个失败详情和原因如何查看?
问题3:我调用项目预检查命令显示 “success”: false,
“errorDetail”: null,
“code”: “INNER_ERROR”,
“message”: “服务器内部错误。” 这个是什么问题呢?
创建项目的详细配置文件如下。
cp.txt (2.1 KB)
刘彻
2024 年4 月 28 日 14:51
#3
/home/admin/logs/ghana/Ghana下面的日志打包上传一下
具体调用哪个api?
有没有在页面上手动创建链路试试?是否可以正常迁移
我从你附件中,查看到transferMapping对象里面的库名没有对上
参考https://www.oceanbase.com/docs/community-oms-cn-1000000000536896文档
创建项目调用的api是 POST /api/v2?Action=CreateProject
开启项目调用的api的POST /api/v2?Action=StartProject
在页面进行迁移没有问题的,你主要需要那个日志,日志量比较大
这个库名应该是另外一个库名,但这个只是白名单的,应该不会影响这个任务的显示吧,就是在控制面应该可以看到的,同时我把数据库换回了test3也是同样的错误
第一个问题,关键创建成功,但是页面上看不到,api中返回的data就是项目id,在OMS的rm库中project表中是否存在,如果存在,在页面上看不到的话,有可能是下面原因导致的:你api请求中带的账号和你OMS页面管控登录的不是同一个账号;在OMS的管控逻辑中,非系统管理员只会展示自己所建的项目
我把校验的用户密码修改成oms管理员用户密码确实可以看到了,但是我在创建完项目以后启动项目后增量同步时报错 如下,具体表现我在源数据库进行插入操作或者ddl操作,在目标端没有任何的增量数据同步和ddl操作。
错误码:
CONNECTOR-SIAL00000001
等级:
ERROR
错误信息:
源端表字段在目标端表中不存在,handleColumnsOnlyInSource: email in [test.test3.user] not found in target table [test3.null]
错误原因:
未开启增量 DDL 同步,排查是否源端存在增加列的操作。 2. 已开启增量 DDL 同步,可能是 DDL 转化中未成功。
解决方案:
未开启增量 DDL 同步,在目标端创建缺失的列。 2. 已开启增量 DDL 同步,排查 ddl_msg.log,搜索对应的列,找到对应的加列语句,联系技术支持人员。 ,
我的创建项目文件内容如下
t3.txt (2.0 KB)
我是指你api鉴权用的用户和你Oms登录界面的不是同一个用户
我把校验的用户密码修改成oms管理员用户密码确实可以看到了,但是我在创建完项目以后启动项目后增量同步时报错 如下,具体表现我在源数据库进行插入操作或者ddl操作,在目标端没有任何的增量数据同步和ddl操作。
错误码:
CONNECTOR-SIAL00000001
等级:
ERROR
错误信息:
源端表字段在目标端表中不存在,handleColumnsOnlyInSource: email in [test.test3.user] not found in target table [test3.null]
错误原因:
未开启增量 DDL 同步,排查是否源端存在增加列的操作。 2. 已开启增量 DDL 同步,可能是 DDL 转化中未成功。
解决方案:
未开启增量 DDL 同步,在目标端创建缺失的列。 2. 已开启增量 DDL 同步,排查 ddl_msg.log,搜索对应的列,找到对应的加列语句,联系技术支持人员。 ,
我的创建项目文件内容如下
t3.txt (2.0 KB)
如果您的来源数据源是obmysql的话,需要检查下组件配置是否正确,步骤:打开OMS页面-进入api创建的项目-右上角点击查看组件监控-点击组件类型为Incr-Sync(增量同步组件)的更新按钮-查看配置:coordinator里面的allowRecordTypes里面是否包含DDL,如果没有则有可能建项目时传参问题
配置部分如下,应该不是,“condition”:{2 items
“blackCondition”:string"[{“all”:false,“sub”:[{“func”:“fn”,“name”:“drc_txn*”},{“func”:“fn”,“name”:“DRC_TXN*”},{“func”:“fn”,“name”:“delay_delete_"},{“func”:“fn”,“name”:"DELAY_DELETE_ ”}],“func”:“fn”,“name”:“test.test3”,“map”:“test3”}]"
“whiteCondition”:string"[{“all”:false,“sub”:[{“func”:“fn”,“name”:"*",“map”:“null”}],“func”:“fn”,“name”:“test.test3”,“map”:“test3”}]"
“coordinator”:{11 items
“allowRecordTypes”:string"DELETE,INSERT,UPDATE,DDL"
“enableActiveReportTask”:boolfalse
“enableDmlDdlTypeStatistics”:booltrue
“enableMetricReportTask”:boolfalse
“enableOmsConnectorV2Report”:booltrue
“isCaseSensitive”:boolfalse
“sinkType”:string"OB_MYSQL"
“sourceType”:string"OB_MYSQL"
“taskIdentity”:string"np_5ouocnb24c4g"
“timezone”:string"+08:00"
ddl日志和错误日志如下。看错误日志主要是com.oceanbase.oms.connector.exception.SchemaCacheException: handleColumnsOnlyInSource: email in [test.test3.user] not found in target table [test3.null] 问题,但是本来就是我的表在源端有,目标端没有, 这个应该不是问题啊,我想知道我的api请求的body如何配置能够增量同步和ddl同步呢
ddl.log (3.5 KB)
error.log (4.3 KB)
从上面配置信息来看,是开启了DDL操作的,但是从报错来看是说目标端中的表并没有这个email字段,现在需要你确认下,目标端中是否存在这个user表,以及表结构中包含email字段,将源端和目标的test3库中表结构尝试改为一样之后,然后重启项目,看是否有报错产生,如果没有报错产生,尝试着在源端执行DDL或者DML操作,在目标端确认是否有跟源端一样改变
我重新起了一个项目测试,/api/v2?Action=CreateProject接口body文件如下
createobject.txt (2.1 KB)
我观察了一下就是我的目的端的生成同步的表的名字叫做null表,然后在源端插入新表目的端没有变化,日志也没有错误,把这个源端和null表一样内容的表进行操作会反映到目标端null中,感觉应该是我的body配置文件的问题,我这个应该怎么修改呢,我只想要增量同步和结构迁移和ddl同步,我的配置的body文件如何修改呢
我找到你的原因了,
这个mappedName是指定对应表的表名,在通配符中不应该配置,下面是修正的