首批通过分布式安全可靠测评,为关键业务系统打造
产品介绍
更新时间:2026-07-02 10:46:35
OBLOADER
什么是 OBLOADER
OBLOADER 是一款使用 Java 语言开发的客户端工具,目前该工具仅适用于 OceanBase 数据库。用户可以将存储介质中的数据库对象的定义文件和表数据文件导入到 OceanBase 数据库中。 通常我们推荐 OBLOADER 与 OBDUMPER 搭配使用。如果用户希望借助于 OBLOADER 完成数据迁移工作,它也兼容 mysqldump,Mydumper 等客户端工具导出的 CSV 格式的文件。 OBLOADER 专门优化了数据的导入性能,内置多种数据预处理函数,自动容错保证数据导入的稳定性,以及提供较为丰富的监控信息,以便于用户实时观测到数据文件导入的性能和进度。
产品功能
OBLOADER 主要具备以下功能特性:
支持从本地磁盘,Apache Hadoop, Aliyun OSS 或者 Amazon S3 导入数据库对象定义和表数据。
支持导入 mysqldump 导出的 SQL-Format 格式的文件。
支持导入标准的 CSV, Insert SQL, ORC, Parquet 等格式的数据文件。
支持丰富的数据清洗功能。
支持多种错误处理策略。
支持在导入前逻辑切分原始数据文件,从而充分发挥 CPU 多核性能。
支持对命令行中指定的敏感参数进行加密。包括:数据库的账号密码,云存储的账号密钥。
注意事项
标准的 CSV 格式请参考 RFC 4180 规范,建议导入时严格遵从 RFC 4180 规范。
导入大量数据时,请在运行的脚本中修改 JAVA 虚拟机的内存参数以便于提升性能。
命令行参数指定的对象名、数据文件名、规则文件名要求大小写一致。Oracle 默认大写,MySQL 默认小写。如果需要区分大小写,请将表名放入中括号内([ ])。例如:
--table '[test]'表示 test 表,文件名格式为 test.group.sequence.suffix;--table '[TEST]'表示 TEST 表,文件名格式为 TEST.group.sequence.suffix。其中,group表示子任务号(由程序依子任务切分策略决定),sequence表示文件滚动号(当文件大小超过--block-size,则会发生滚动),suffix表示文件拓展名。导入时,OBLOADER 可以识别的文件名格式为:“表名“ + 文件拓展名。您也可以使用
--file-regular-expression命令行选项,通过正则表达式实现自定义的文件检索规则。数据库对象存在依赖(如表间外键依赖、触发器对序列的依赖等)时,请尽可能按依赖顺序依次导入。如果通过
--all或者--table '*'导入,则无法严格保证导入顺序。OceanBase MySQL 1.4.79 使用
INSERT ... WHERE NOT EXISTS解决主键冲突时存在跨分区插入的错误。OceanBase MySQL 1.4.x 组合分区表 RANGE_COLUMNS + KEY 在虚拟路由视图中的元数据有缺陷。
无主键的表,暂不支持断点续传。
OceanBase 3.2.4 及之后的版本使用 OBLOADER 前,请将系统配置项
open_cursors设置为较大的值,否则导入可能会出现错误。数据导入结束后,请将该系统配置项重置成初始值。例如:ALTER SYSTEM SET open_cursors = 65535;。导入 DDL 时,请区分
--mix与--ddl选项。--ddl选项适用于导入包含仅有一条 DDL 语句的文件,而--mix选项无此限制。OBLOADER 支持的文件格式如下:
- DDL 文件:文件中的内容仅包含 DDL 语句,不包含表数据。
- CSV 文件:符合 RFC 4180 规范的标准 CSV 格式。
- SQL 文件:文件中的内容仅包含
INSERT SQL语句, 数据不换行。 - ORC 文件:符合标准的 Apache ORC 的格式,默认使用 zstd 压缩。
- Parquet 文件:符合标准的 Apache Parquet 的格式,默认使用 zstd 压缩。
- MIX 文件:文件中的内容包含 DDL 语句,DML 语句等任意符合 SQL 标准的语句。
- POS 文件:以固定字节长度定义的格式,暂不支持固定字符长度。
- CUT 文件:数据列使用单字符或多字符进行分隔、且不带定界符。区别于标准的 CSV 格式。
OBDUMPER
什么是 OBDUMPER
OBDUMPER 是一款使用 Java 语言开发的客户端工具,目前该工具仅适用于 OceanBase 数据库。用户可以使用该工具将 OceanBase 数据库中定义的对象和表数据以指定的文件格式导出到存储介质中。 如果用户希望借助于 OBDUMPER 进行逻辑备份,可以直接将该工具集成到数据库运维系统中。(注:不支持增量备份)与 mysqldump 等客户端导出工具相比,OBDUMPER 具备以下显著的优势:
快速的数据导出能力,设计了多种数据查询策略,大幅提升导出的性能。
丰富的数据交换能力,支持将表中数据以多种格式导出到多种存储介质。
强大的数据处理能力,导出前对数据进行压缩,加密,脱敏,预处理等。
产品功能
OBDUMPER 主要具备以下功能特性:
支持导出数据库对象定义和表数据到本地磁盘,Aliyun OSS 和 Amazon S3。
支持将表中的数据按照 CSV, Insert SQL, ORC,Parquet 等格式导出到文件中。
支持指定分区名,仅导出指定的表分区内的数据。
支持指定全局的过滤条件,仅导出满足条件的数据。
支持配置数据预处理规则,导出前对数据进行转换、脱敏等预处理。
支持指定 SCN 或者 TIMESTAMP,仅导出有效事务点或者时间点的历史快照数据。
支持从 OceanBase 的备副本中导出数据。(注:区别于备集群)
支持指定自定义的查询语句,仅导出该查询语句的结果集。
支持通过最新的快照版本以不锁表的方式导出全局一致的数据。
支持对命令行中指定的敏感参数进行加密。包括:数据库的账号密码,云存储的账号密钥。
注意事项
标准的 CSV 格式请参考 RFC 4180 规范,建议导出严格遵从 RFC 4180 规范。
导出大量数据时,请在运行的脚本中修改虚拟机的内存参数。
命令行参数指定的对象名、数据文件名、控制规则文件名要求大小写一致。Oracle 模式默认大写,MySQL 模式默认小写。如果需要区分大小写,请将表名放入中括号内([ ])。例如:
--table '[test]'表示 test 表,文件名格式为 test.group.sequence.suffix;--table '[TEST]'表示 TEST 表,文件名格式为 TEST.group.sequence.suffix。其中,group表示子任务号(由程序依子任务切分策略决定),sequence表示文件滚动号(当文件大小超过--block-size,则会发生滚动),suffix表示文件拓展名。外键中包含多列,导出时无法保证列的顺序。例如:FOREIGN KEY(c1,c2) REFERENCE (c1,c2)。
OceanBase MySQL 1.4.72 不支持导出唯一前缀索引的定义。例如:UNIQUE(c1(10)) 。
OceanBase MySQL 1.4.x 不支持导出生成列的定义。例如:GENERATED ALWAYS AS (expr)。
OceanBase MySQL 2.2.7x 不支持导出垂直分区。例如:partition by column。
OceanBase MySQL 2.2.7x 不支持导出 SYNONYM 对象定义。
OceanBase MySQL 2.2.7x 不支持导出索引的存储列。例如:storing(column_list)。
OceanBase Oracle 模式下不支持导出 interval day(2) to second(0) 类型的数据。
Windows 系统不能使用 !作为分隔符。数据库的对象名不能包含 \ / : * ? " < > | 等特殊符号,否则数据库对象定义和表数据都无法正常导出。
导出表数据中包含生成列时默认会导出生成列的数据,可以使用
--exclude-virtual-columns选项标识不导出生成列的数据。使用
--date-value-format,--time-value-format,--datetime-value-format,--timestamp-value-format,--timestamp-tz-value-format,--timestamp-ltz-value-format选项时,请使用 Java 能够识别的日期与时间格式模版,否则导出会报错。导出 CUT 格式文件时,如果字段内容中出现指定的字段分隔符,会对字段中的分隔符字符进行转义。例如:字段内容为
abc|def,指定分隔符为 | (--column-splitter "|"),则导出的字段内容会转换为abc\|def。--no-sys选项用于标识私有云环境下用户无法提供 sys 租户的密码。导数工具 3.3.0 及之后版本对公共云环境和私有云环境进行了区分,--public-cloud选项仅用于公共云环境,--no-sys选项仅用于私有云环境。OceanBase 3.2.4 及之后版本使用 OBDUMPER 前,请将系统配置项
open_cursors设置为较大的值,否则导出可能会出现错误。数据导出结束后,请将该系统配置项重置成初始值。例如:ALTER SYSTEM SET open_cursors = 65535;OceanBase 4.0.0 及之后版本中表结构发生过任意的变更操作,无法使用 OBDUMPER 导出该表最近一次成功合并的基线数据(即一致性快照数据),用户可以手动发起一次合并以后,再重新导出最近一次成功合并的基线数据。
导出 DDL 时,当指定
-f为非标准目录结构(即非 OBDUMPER 导出生成的目录结构),请使用--mix选项代替--ddl选项。当指定--sql选项时,文件数据格式遵循:一条语句只插入一条记录。如有不符,请指定--mix代替--sql进行导入。OceanBase MySQL 模式中关于日期/时间类型存储零值,使用 OBDUMPER 4.2.0 之前的版本导出数据时,JDBC 将零值日期时间转换为 NULL,如果该列定义为 NOT NULL 约束,导出数据将会报错。OBDUMPER 4.2.0 版本可以导出零值/日期时间,但导出时无法区分原始数据(NULL 或者零值),默认将数据强制转换成零值;其次 DATETIME, TIMESTAMP 两种数据类型导出的零值可能出现数据失真的问题,即某个非零近似值。数据库 sql_mode 变量中包含 NO_ZERO_DATE, NO_ZERO_IN_DATE 约束时,导出零值数据会报错。OceanBase MySQL 涉及零值问题的数据类型:DATE, DATETIME, TIME, YEAR, TIMESTAMP。
结构导出功能差异

闪回导出
使用 FLASHBACK 导出数据时,需要设置合理的 undo_retention 系统变量。
假设 t1 为撤回(Undo)操作的时间点,且 t2 = t1 + 900s,则在 t2 时间点可以查询到 [t1,t2] 区间内的数据。设置 undo_retention 后,当前的会话仅对 t1 之后的时间点的数据有效,对 t1 时间点之前的数据无效。该参数默认单位:秒,默认值:0。设置 undo_retention 变量语句如下:
SET global undo_retention=900;
sys 租户可以通过
v$ob_timestamp_service视图来查询有效的 OceanBase SCN(System Change Number)。可通过固定时间点查询最近一次版本合并的数据。例如:t1 时间点发起合并,最早可查询到 t1 时间点的数据。
如果所查询的表已被删除且放置在回收站,则需要先将该表从回收站中恢复。
闪回查询受限于转储,如果发生转储且
undo_retention变量未设置,则无法查询。设置
undo_retention变量后,可查询 t1(转储时间点)+undo_retention变量设置的时间范围内的数据。
支持的 OceanBase 数据库
已支持的 OceanBase 数据库模式与版本,如下表所示:
| OceanBase 模式 | 支持的版本号 |
|---|---|
| Oracle 模式 | 2.0.x、2.1.x、2.2.20、2.2.30、2.2.50、2.2.70、2.2.71、2.2.72、2.2.76、3.1.x、3.2.x、4.0.0、4.1.0、4.2.0 |
| MySQL 模式 | 1.4.70、1.4.72、1.4.75、1.4.78、1.4.79、2.2.30、2.2.50、2.2.70、2.2.71、2.2.72、2.2.76、3.1.x、3.2.x、4.0.0、4.1.0、4.2.0 |
说明
- 导数工具 3.0.0 版本已支持 OceanBase 社区版 3.1.2 及之后版本。
- 导数工具 4.2.1 及之后的版本不再区分社区版和商业版。