首批通过分布式安全可靠测评,为关键业务系统打造
常见问题
更新时间:2026-04-13 14:00:52
Q:如何解决使用 OBLOADER 导入时遇到 OOM 错误?
A:首先修改 bin/obloader 脚本中的 JAVA 虚拟机内存参数。其次排除 OpenJDK GC Bug。
Q:如何在调试模式下运行 OBLOADER 排查问题?
A:直接运行 bin/obloader-debug 进行导入。
Q:如何使用 OBLOADER 导入与表不同名的数据文件?
A:命令行中的 -f 选项指定为数据文件的绝对路径。例如:--table 'test' -f '/output/hello.csv'。
Q:为表配置了控制文件,导入的数据为什么没有生效?
A:要求控制文件的名称与表名相同且大小写一致。MySQL 默认表名为小写,Oracle 默认表名为大写。
Q:运行 OBLOADER 脚本时,命令行选项未被正常解析的原因是什么?
A:可能是命令行参数值中存在特殊符号。例如:Linux 平台上运行导数工具,密码中存在大于号(注:> 是重定向符),导致运行的日志都会出现丢失。因此在不同的运行平台使用正确的引号进行处理(参见下个问题)。
Q:运行 OBLOADER 脚本时,何时需要对参数加单引号或者双引号?
A:建议用户在一些字符串的参数值左右加上相应的引号。
- Windows 平台参数使用双引号。例如:
--table "*"。 - 类 Linux 平台参数使用单引号。例如:
--table '*'。
Q:外部文件格式不符合要求导致导入失败,应该如何解决?
A:导入外部文件时对格式有以下要求:
外部文件如果为 SQL 文件,要求 SQL 文件中不能有注释和 SET 开关语句等,并且文件中只能有 INSERT 语句,每条语句不可以换行。除此以外,文件中存在 DDL 或者 DML 语句,建议使用 MySQL source 命令导入。
外部文件如果为 CSV 文件,CSV 文件需符合标准定义。要求有转义符、定界符、列分隔符和行分隔符。数据中存在定界符需要指定转义符。
Q:如何自定义导入作业日志文件名? A:可以在{ob-loader-dumper}/conf/log4j2.xml中自定义日志文件名。如下图所示,在Routing标签下修改如下名称:InfoRoutingAppender下的ob-loader-dumper.info(info 级别日志)。WarnRoutingAppender下的ob-loader-dumper.warn(warn 级别日志)。ErrorRoutingAppender下的ob-loader-dumper.error(error 级别日志)。
说明
将
ob-loader-dumper.info、ob-loader-dumper.warn、ob-loader-dumper.error修改为相同名称时,所有日志信息会生成到同一文件中。
Q: 在控制台中输出日志时无响应,该如何解决?
A: 可能是控制台输出被暂停或中止,导致日志输出被阻塞。解决方法:
打开日志的配置文件
{ob-loader-dumper}/conf/log4j2.xml,查找如下配置:<Logger name="com.oceanbase.tools.loaddump" additivity="false" level="INFO"> <AppenderRef ref="ConsoleAppender"/> <AppenderRef ref="InfoRoutingAppender"/> <AppenderRef ref="WarnRoutingAppender"/> <AppenderRef ref="ErrorRoutingAppender"/> </Logger>删除
<AppenderRef ref="ConsoleAppender"/>,并尝试重新运行程序。
Q:OBLOADER 启动报错:Access denied for user 'root'@'xxx.xxx.xxx.xxx'。
A:导数工具默认依赖 root@sys 用户和密码。如果集群中已为 root@sys 用户设置的密码,请在命令行中指定 --sys-password 选项的参数值为 root@sys 用户设置的密码。
Q:OBLOADER 运行报错:Over tenant memory limits 或者 No memory or reach tenant memory limit。
A:调大全局 SQL 工作区的内存比例或者减少 --thread 并发数。
set global ob_sql_work_area_percentage=30; -- Default 5
Q:导入 CSV 文件且数据内存在换行时,OBLOADER 运行报错:Bad Record。
A:可能是 OBLOADER 默认使用了 UNSAFE 模式切分子文件。需要修改执行脚本中的 JVM 环境变量。打开 {ob-loader-dumper}/bin/ 目录下的 obloader 文件,查找关键词 PROG_OPTS 并将 -Dfile.split=UNSAFE 修改为 -Dfile.split=SAFE。
Q:OBLOADER 运行报错:No tables are exists in the schema: "xxx"。
A:--table 't1,t2' 选项指定的表名一定是数据库中已经定义的表名,且大小写需要保持一致。OceanBase MySQL 模式下默认表名为小写,OceanBase Oracle 模式下默认表名为大写。如果 Oracle 中定义的表名为小写,表名左右需要使用中括号。例如:--table '[t1]' 表示小写的表名。
Q:OBLOADER 运行报错:The xxx files are not found in the path: "xxx"。
A:要求 -f 指定的目录中的数据文件的名称与表名相同且大小写一致。OceanBase MySQL 模式下默认表名为小写,OceanBase Oracle 模式下默认表名为大写。例如:--table 't1'目录中的数据文件须为 t1.csv 或者 t1.sql,不能是 T1.csv 或者其它的文件名。
Q:OBLOADER 运行报错:The manifest file: "xxx" is missing。
A:元数据文件 MANIFEST.bin 是 OBDUMPER 导出时产生的。使用其它工具导出时没有元数据文件。用户指定 --external-data 选项可跳过检查元数据文件。
Q:OBLOADER 导入 Delimited Text 格式时报错:Index:0,Size:0。
A:出现这种错误的原因是数据中存在回车符/换行符,请先使用脚本删除数据中的回车符/换行符后再导入数据。
Q:OceanBase MySQL 模式下,连接 ODP (Sharding) 逻辑库导入 KEY 分区表数据时,OceanBase Database Proxy (ODP) 显示内存不足且 OBLOADER 运行报错:socket was closed by server。
A:设置 proxy_mem_limited 参数的权限,确认是否有外部依赖,ODP 默认内存限制为 2GB。连接 ODP (Sharding) 逻辑库且通过 OBLOADER 导入数据时需要使用 root@proxysys 账号权限,修改逻辑库内存限制语句如下:
ALTER proxyconfig SET proxy_mem_limited = xxg
Q:OBLOADER 运行报错:Not supported feature or function。
A:低版本的 OBServer 不支持某些特性。使用 OBServer 2.2 及之前的版本时,请将 {ob-loader-dumper}/conf/session.config.json 文件中的 JDBC 参数 useServerPrepStmt 设置为 false,并删除 init_sql.mysql 标签下 set session sql_mode = xxx 语句。