OceanBase 自研的客户端导入导出工具已正式开放下载: OBLOADER/OBDUMPER 3.0.0
通告:OBLOADER/OBDUMPER 1.x/2.x 已不再维护,请用户参考 《升级指南》 酌情升级。

什么是 OBLOADER/OBDUMPER ?
OBLOADER/OBDUMPER 是一款使用 Java 语言开发的客户端导入工具。OBDUMPER 可以将 OceanBase 表中的数据按照 Delimited Text, Insert SQL 或者 CSV 格式导出到文件中。同时,在一些复杂的业务场景下 OBLOADER 也提供了更多灵活的命令行选项将结构和数据导入到 OceanBase 数据库中。通常情况下,强烈建议 OBLOADER 和 OBDUMPER 两款工具搭配使用。但是 OBLOADER 也支持如 Navicat、Mydumper 和 SQLDeveloper 等工具导出的 SQL 或 CSV 格式的文件。OBLOADER 充分利用了 OceanBase 分布式系统的特性,重点优化了并行导入的性能。

OBDUMPER 功能特性
支持导出 OceanBase 数据库中的Schema定义。例如:–ddl
支持导出 Delimited Text, Insert SQL 和 CSV 数据格式。
支持导出任意的表分区中的数据。例如:–partition ‘p0,p1’
支持导出最近一次的快照数据。例如:–snapshot
支持导出满足条件的数据。例如:–where ‘age>35’
支持导出闪回事务/闪回时间点内的数据。例如:–flashback-scn/–flashback-timestamp
支持导出自定义的查询结果数据。例如:–query-sql ‘select * from a join b on a.id=b.id’
支持导出的数据直接上传至OSS云存储。例如:–oss-endpoint/–secret-key/–asscess-key
支持导出数据前对数据进行预处理。例如:空替换/脱敏等。(用户需要配置控制文件)
支持导出的数据子文件按照表名合并成一个大文件。(默认不合并)例如:–file-name ‘/output/’

OBDUMPER 快速上手

提示:编辑 obdumper/obdumper.bat 脚本,JVM 参数 -Xms4G -Xmx4G 修改为60%的剩余物理内存。

运行在 Linux/Unix/MacOSX 平台

./obdumper -h 192.168.0.0 -P 2883 -u xxx -t tenant_A -c cluster_A -p xxx --sys-password xxx -Dtest --table ‘*’ --csv -f ‘/output/’

(不推荐)运行在 Windows 平台

obdumper -h 192.168.0.0 -P 2883 -u xxx -t tenant_A -c cluster_A -p xxx --sys-password xxx -Dtest --table “*” --csv -f “C:\output\”

OBLOADER 功能特性
支持导入数据库的Schema定义。例如:–ddl
支持导入 Delimited Text, Insert SQL 和 CSV 格式。
支持导入 Fixed Length 数据格式(用户需要配置控制文件)。
支持导入前对数据进行预处理。例如:空替换/数据转换等
支持导入时配置表和文件的映射关系。例如:仅导入文件中部分列
支持导入时替换重复的Schema定义。(默认跳过)例如:–replace-object
支持导入时替换表中冲突的数据。(默认丢弃)例如:–replace-data
支持导入时客户端开启写入限流。例如:–max-tps 10000
支持导入时遇到意外异常可以使用断点恢复功能。例如:–retry
支持导入时服务端过载自动保护功能。例如:快速导入、慢速导入,停止导入
支持导入OSS云存储中的数据。例如:–oss-endpoint/–secret-key/–access-key

OBLOADER 快速上手

提示:编辑 obloader/obloader.bat 脚本,JVM 参数 -Xms4G -Xmx4G 修改为60%的剩余物理内存。

运行在 Linux/Unix/MacOSX 平台:

./obloader -h 192.168.0.0 -P 2883 -u xxx -t tenant_A -c cluster_A -p xxx --sys-password xxxx -Dtest --table ‘*’ --csv -f ‘/output/’

(不推荐)运行在 Windows 平台:

obloader -h 192.168.0.0 -P 2883 -u xxx -t tenant_A -c cluster_A -p xxx --sys-password xxxx -Dtest --table “*” --csv -f “C:\output\”

FAQ

Q1:启动 obloader/obdumper 时报错:Access denied for user ‘root’@‘xxx.xxx.xxx.xxx’
A1:–sys-password 选项指定正确的root@sys用户的密码。

Q2:运行 obloader 过程中报错:Over tenant memory limits
A2:调大租户内存(或者 指定 --thread 降低并发数)。

Q3:运行 obloader 过程中报错:No memory or reach tenant memory limit
A3:调大租户内存(或者 指定 --thread 降低并发数)。

Q4:obdumper 指定 --query-sql ‘大查询语句’ 导出数据过程中报错:Connection reset
A4:obproxy 配置参数 client_tcp_user_timeout, server_tcp_user_timeout 设为0即可。

Q5:如何在调试模式下运行 obloader/obdumper 以便于排查一些问题?
A5:直接运行 bin 目录下的调试脚本。例如:obloader-debug/obdumper-debug

Q6:运行 obloader 导入数据时,报错:No tables are exists in the schema: “xxx”
A6:–table 选项指定的是数据库中已经定义的表名。

Q7:运行 obloader 导入数据时,报错:The xxx files are not found in the path: “xxx”
A7:要求数据文件的名称与表名相同且大小写要一致。mysql默认表名是小写,oracle默认表名是大写。

Q8:如何使用 obloader 导入与表不同名的数据文件?
A8:-f 选项可以直接指定一个数据文件。例如:–table ‘test’ -f ‘/output/hello.csv’

Q9:为表配置控制文件,导入或者导出数据时为何没有生效?
A9:要求控制文件的名称与表名相同且大小写要一致。mysql默认表名是小写,oracle默认表名是大写。

Q10:运行 obdumper 导出数据时,报错:The target directory: “xxx” is not empty
A10:为了防止数据覆盖,导出前 obdumper 会检查输出目录是否为空。–skip-check-dir 选项可以跳过此检查。

Q11:运行 obdumper 导出数据时,为什么空表没有产生(空的)数据文件?
A11:默认空表不会产生对应的空文件。–retain-empty-files 选项可以保留空表所对应的(空的)文件。

Q12:运行 obloader 导入数据时报错:The manifest file: “xxx” is missing
A12:元数据文件是 obdumper 导出数据时产生的。–external-data 选项可以跳过元数据文件的检查。

Q13:运行 obloader/obdumper 脚本时,命令行参数没有被正常解析的原因是什么?
A13:可能是不同的运行平台所加的引号不同或者参数没有加引号,导致解析错误。(见Q14)

Q14:运行 obloader/obdumper 脚本时,什么时候需要对参数加单/双引号?
A14:Windows 平台参数使用双引号,例如:–table "";类Linux 平台参数使用单引号,例如:–table '’。