ogg 从 oracle 将数据同步到 TiDB,报错:Database error 1105 ([SQL error 1105]INSERT INTO tidb.tt (xxxx,xxx,xxx,xxx)

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.5
  • 【问题描述】:使用ogg同步出现SQL error 1105错误
    错误日志如下:

05-12T11:11:51.646+0800 WARNING OGG-01004 Oracle GoldenGate Delivery for MySQL, repsc.prm: Aborted grouped transaction on tidb.tt, Database error 1105 ([SQL error 1105]INSERT INTO tidb.tt (xxxx,xxx,xxx,xxx). 2020-05-12T11:11:51.646+0800 WARNING OGG-01003 Oracle GoldenGate Delivery for MySQL, repsc.prm: Repositioning to rba 48399267 in seqno 356. 2020-05-12T11:11:55.941+0800 WARNING OGG-01154 Oracle GoldenGate Delivery for MySQL, repsc.prm: SQL error 1105 mapping tidb.tt to tidb.tt [SQL error 1105]INSERT INTO tidb.tt` (xxxxxxx,xx,x,x,x,x.
2020-05-12T11:11:55.942+0800 ERROR OGG-01296 Oracle GoldenGate Delivery for MySQL, repsc.prm: Error mapping from tidb.tt to tidb.tt.
2020-05-12T11:11:55.943+0800 ERROR OGG-01668 Oracle GoldenGate Delivery for MySQL, repsc.prm: PROCESS ABENDING.

这个错误是否和 max-txn-time-use参数有关?请教如何解决,谢谢!

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 能否反馈下 tidb.log 日志,看下在ogg报错时,tidb.log是否有报错
  2. tidb.tt表有多大? 是在复制表吗?

1:能否反馈下 tidb.log 日志,看下在ogg报错时,tidb.log是否有报错,错误如下:

[err="statement count 5001 exceeds the transaction limitation, autocommit = false
github.com/pingcap/tidb/session.checkStmtLimit
\tgithub.com/pingcap/tidb@/session/tidb.go:199
github.com/pingcap/tidb/session.finishStmt
\tgithub.com/pingcap/tidb@/session/tidb.go:188
github.com/pingcap/tidb/session.runStmt
\tgithub.com/pingcap/tidb@/session/tidb.go:257
github.com/pingcap/tidb/session.(*session).ExecutePreparedStmt
\tgithub.com/pingcap/tidb@/session/session.go:1241
github.com/pingcap/tidb/server.(*TiDBStatement).Execute
\tgithub.com/pingcap/tidb@/server/driver_tidb.go:75
github.com/pingcap/tidb/server.(*clientConn).handleStmtExecute
\tgithub.com/pingcap/tidb@/server/conn_stmt.go:182
github.com/pingcap/tidb/server.(*clientConn).dispatch
\tgithub.com/pingcap/tidb@/server/conn.go:926
github.com/pingcap/tidb/server.(*clientConn).Run
\tgithub.com/pingcap/tidb@/server/conn.go:666
github.com/pingcap/tidb/server.(*Server).onConn
\tgithub.com/pingcap/tidb@/server/server.go:440
runtime.goexit
\truntime/asm_amd64.s:1357
INSERT INTO tidb.tt 某一条数据

2:tidb.tt表有多大? 是在复制表吗?
800w+,目前是增量从oracle同步数据。

  1. 这里的报错是由于
  • 单个事务包含的 SQL 语句不超过 5000 条(默认)

报错:ERROR 1105 (HY000): statement count 5001 exceeds the transaction limitation, autocommit = false

  1. 是由参数 stmt-count-limit 决定, 通常建议减小事务,控制在5000 条以内。 如果改大,可能会引起其他限制,比如单个事务总的大小超过 100M.

https://pingcap.com/docs-cn/v3.0/reference/configuration/tidb-server/configuration-file/#stmt-count-limit

嗯,如果修改这个参数,是不是可以在不停机的情况下执行ansible-playbook rolling_update.yml --tags=tidb 进行滚动升级。

是的,这里当 tidb-server 重启时, tidb-server 对应的连接会断开

好的,已解决,谢谢!

:love_you_gesture:,有问题欢迎开新帖继续提问,为此次答复选取一个 解决方案 吧。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。