--retry 导入导出错误后断点继续导入导出执行报错

导数工具 V4.3.3 中有这样一个参数,可以在导出导入遇到错误中断后继续执行。

  • –retry 用于从上一次导入、导出失败位置继续任务。

测试场景:表中数据与导入数据主键部分冲突,导入失败,删除表中之前冲突数据,指定继续导入参数但报错了。请问是什么原因?
2025-04-14 16:51:09 [ERROR] Load data file: “/data/user/TABLE/TA.csv” failed. Reason: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152). 2025-04-14 16:51:09 [ERROR] Fatal error occurred while loading data from “/data/user/TABLE/TA.csv” into table “MYDBA2”.“TA”. Reason: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152) 2025-04-14 16:51:09 [ERROR] Error: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152)

另外这个参数是不是只能在失败后再次启动才能使用,不需要第一次执行时指定?如第一次指定会报“.xxx.ckpt" is missing。是不是错误中断了才会生成.xxx.ckpt文件。

把执行的导数语句发一下 报错信息 全部提供一下

CREATE TABLE TA (
ID NUMBER(20),
NAME VARCHAR2(20),
CONSTRAINT PK_TA PRIMARY KEY (ID)
);

INSERT INTO TA
SELECT ROWNUM ID, RANDSTR(10, RANDOM()) NAME
FROM TABLE(GENERATOR(1000)) A, TABLE(GENERATOR(100))B;

COMMIT;

SELECT COUNT(1) FROM TA; – 100000

–导出
obdumper -h 10.1.1.5 -P3306 -uUSER_A -c rco03 -t CT2 -p ‘XXXX’ -D USER_A --no-sys --csv --table ‘TA’ -f /data/user/BABA/dump_data/TA_CSV

All Dump Tasks Finished:

    No.#        |        Type        |             Name             |            Count             |       Status       

     1          |       TABLE        |              TA              |            100000            |      SUCCESS       

–TA表数据部分清除,
保留数据,ID区间 10000-19999 ,55000 - 59999;

select count(1) from ta where id>=10000 and id<=19999; – 10000
select count(1) from ta where id>=55000 and id<=59999; – 5000
select count(1) from ta; – 100000 - 85000 = 15000
–删除了 85000 行,保留 15000

–导入
–第一次导入
obloader -h 10.1.1.5 -P3306 -uUSER_A -c rco03 -t CT2 -p ‘XXXX’ -D USER_A --no-sys --csv --table ‘TA’ -f /data/user/BABA/dump_data/TA_CSV


    No.#        |        Type        |             Name             |            Count             |       Status       

     1          |       TABLE        |              TA              |       100000 -> 84998        |      FAILURE       

–检查数据
select count(1) from ta;
– 当前表数据 99998 ,99998 = 导入 84998 + 保留主键冲突数据 15000
– 有2条不冲突的数据没能导入,可能是数据导入段批次正好卡边了,先不管。

–删除之前预留的 15000 条数据。
delete from ta where id>=10000 and id<=19999;
delete from ta where id>=55000 and id<=59999;
commit;
select count(1) from ta; – 84998
–当前表中数据 84998 为第一次导入的数据。

当前目录下已经有 .load.ckpt 文件。
开始第二次导入,增加–retry 配置。
执行报错:
2025-04-15 11:31:52 [INFO] Start 16 record file reader threads success
2025-04-15 11:31:52 [ERROR] Load data file: “/data/user/data/USER_A/TABLE/TA.csv” failed. Reason: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152).
2025-04-15 11:31:52 [ERROR] Fatal error occurred while loading data from “/data/user/data/USER_A/TABLE/TA.csv” into table “USER_A”.“TA”. Reason: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152)
2025-04-15 11:31:52 [ERROR] Error: java.lang.IllegalArgumentException: Executors.call(Line:511) => RecordFileReader.run(Line:152)
2025-04-15 11:31:52 [INFO] ---------- Finished Tasks: 1 Running Tasks: 0 Progress: 100.00% ----------
2025-04-15 11:31:52 [INFO]

All Load Tasks Finished:

    No.#        |        Type        |             Name             |            Count             |       Status       

     1          |       TABLE        |              TA              |              0               |      FAILURE       

目前是已知问题 后面会修复问题