首批通过分布式安全可靠测评,为关键业务系统打造
导数工具 V4.3.1.1
更新时间:2026-04-13 12:01:01
本次 8 月发版的导数工具 V4.3.1.1 旨在修复无主键无分区表导出不完整且无报错的问题,以及修复若干已知问题。
版本信息
当前版本:V4.3.1.1
前置版本:V4.3.1
发版时间:2024 年 8 月 8 日
支持的 OceanBase 数据库版本
导数工具 V4.3.1.1 支持下表所列版本的 OceanBase 数据库。
| OceanBase 模式 | 支持的版本号 |
|---|---|
| Oracle 模式 | V2.0.x、V2.1.x、V2.2.20、V2.2.30、V2.2.50、V2.2.70、V2.2.71、V2.2.72、V2.2.76、V2.2.77、V3.1.x、V3.2.x、V4.0.0、V4.1.0、V4.2.0、V4.2.1、V4.2.2、V4.2.3、V4.3.0、V4.3.1 |
| MySQL 模式 | V1.4.70、V1.4.72、V1.4.75、V1.4.78、V1.4.79、V2.2.30、V2.2.50、V2.2.70、V2.2.71、V2.2.72、V2.2.76、V2.2.77、V3.1.x、V3.2.x、V4.0.0、V4.1.0、V4.2.0、V4.2.1、V4.2.2、V4.2.3、V4.3.0、V4.3.1 |
修复的问题
修复 OceanBase 数据库 MySQL 租户指定
lower_case_table_names=0库名存在大写字母情况下无法导入导出的问题。修复 OceanBase 数据库 Oracle 租户 V4.0.0.0 之后的版本导出日期时间类型字段分区表数据失败的问题。
修复无主键表导出报错
Current position is after the last row的问题。修复无主键无分区表未完全导出就结束任务的问题。
修复 OceanBase 数据库 Oracle 租户 V3.2.x 导出分区表历史版本数据翻倍的问题。
已知问题
导出的数据库对象定义中可能会包含对象所属的数据库名。
命令行未指定 sys 租户密码时,OceanBase 数据库 V2.2.70 之前的版本均不支持导出表组定义。
命令行未指定 sys 租户密码时,OceanBase 数据库 Oracle 租户 V2.2.50 之前的版本无法导出索引定义。
命令行未指定 sys 租户密码时,OceanBase 数据库 Oracle 租户 V2.2.70 之前的版本无法导出唯一索引的分区信息。
命令行未指定 sys 租户密码时,OceanBase 数据库 Oracle 租户 V2.2.70 及之后至 V4.0.0 之前的版本,无法导出分区表的唯一索引定义。
OceanBase 数据库 MySQL 租户 V2.2.30 之前的版本中均不支持导出 PL 对象定义。
使用 OBLOADER 导入数据时,如果指定文件格式(例如
--sql、--csv等)与实际文件格式不符时存在缺陷。设置 OceanBase 数据库 MySQL 模式下大小写敏感后,数据库对象名暂不支持严格匹配大小写(例如表、视图等)。
JDBC 高可用模式 “sequential” 暂不可用,请使用模式 “loadbalance” 代替。
指定
--remove-newline选项处理数据中的换行符时会引入不符期望的转义符,请尽量避免使用该选项。请尽量避免在多表恢复场景使用旁路导入,其效率可能不佳。
升级注意事项
从导数工具 V4.3.0 之前的版本升级至 V4.3.1 时,请注意:
为了降低导数工具的学习成本,命令行选项进行下述调整:
弃用命令行选项
--storage-uri。该选项的原有功能与-f/--file-path合并。请注意该选项被废弃后,仍然可以使用。但建议您使用下述示例方式进行替代。
使用本地文件系统,可以指定
-f '/home/admin/foo/bar'。使用 Aliyun OSS,可以指定
-f 'oss://mybucket/foo/bar?endpoint=myendpoint&access-key=myak&secret-key=mysk'。
导出数据库对象定义和表数据至非本地文件系统时,导数工具会默认创建
<工具根目录>/tmp作为临时目录,以存放临时文件。如果您需要指定临时目录,请使用命令行选项--tmp-path。命令行选项
--compact-schema被默认设置为true。该选项用于指引程序在 OBServer V4.0.0 及之后版本导出时,通过SHOW CREATE TABLE ...语句来获取 DDL,而非通过系统视图查询并反拼 DDL(默认结构导出策略)。该改动是为了兼容 OBServer 的部分标准视图变更,提升整体性能以及支持新的列存特性。您仍然可以通过指定
--compact-schema=false来使用之前默认的结构导出策略。
当某张表的数据量大小未达到指定的分块大小(由
--block-size指定,默认值为 1GB)时,文件会被命名为<表名>.<扩展名>,之前版本的命名为<表名>.<分块序号>.<扩展名>。以导出 CSV 格式的文件为例:表
t_test数据量为 500MB,--block-size为默认值 1GB,导出将仅产生一个文件t_test.csv。表
t_test数据量为 1.2GB,--block-size为默认值 1GB,导出将产生两个文件,分别是t_test.0.csv和t_test.1.csv。
从导数工具 V4.2.8 之前的版本升级至 V4.3.1 时,请额外注意:
目前导数工具支持以
<user>@<tenant>#<cluster>的三段式格式字符串指定-u/--user的值。同时为了向后兼容,您可以继续使用命令行选项-t/--tenant和-c/--cluster。POS 格式解析行为变更,解析器现在会处理一个完整的行。即,除了控制文件定义的字节长度之外,每一行会多读取一个换行符。您也许需要修改控制文件以适应这一行为。计算
example.dat文件第一行字节数的命令如下:expr $(head -n 1 example.dat | wc -c) - 1
从导数工具 V4.2.7 之前的版本升级至 V4.3.1 时,请额外注意:
弃用命令行选项
--file-name。您已无需合并单表导出的若干子文件。如果您需要将表的数据写入一个文件,通过
--block-size 0即可设置导出表数据不进行文件分块。请注意,虽然程序不会限制文件大小,某些文件系统或对象存储仍会限制单个文件的大小。例如,在 ext2/ext3/ext4 文件系统中,单个文件的大小限制是 2TB。
如果您需要去除程序默认生成的复杂层次目录结构,可以使用命令行选项
--no-nested-dir。
弃用命令行选项
--upload-behavior。关于不同数据源的写入策略,请参见下文的功能说明。由于导数工具 V4.2.7 对文件写入行为进行了较大变更,程序会一定程度得降低性能来确保导出文件数量的可预测性。如果您发现导出性能不佳,程序提供了并发写入的行为开关,这将使程序仍然将每张表的数据分散写入到多个文件(具体参考 V4.2.7 之前版本的行为),但将无法再合并子文件。操作方式如下:
通过任意文本编辑器打开文件:
<工具根目录>/bin/obdumper。查找 Java 启动参数
-Denable.parallel.write=false,将其中的false修改为true。
注意事项
CUT 格式要求数据整行存放。OBDUMPER 命令行指定
--cut选项导出的数据中存在字段分隔符时,如果字段分隔符是单个字符时,数据中出现分隔符、回车或者换行等特殊字符,OBDUMPER 会将数据中的特殊字符进行转义。例如:数据为abc|def,分隔符为|,则导出的数据为abc\|def。命令行指定
--cut选项导入数据时,如果文件中的数据行尾没有字段分隔符(或分隔串),请勿使用--trail-delimiter选项,否则数据无法被正确导入至数据库中。命令行中指定
--logical-database选项时,导出的是随机的一个物理分库分表的定义,不可以直接导入到数据库中。用户需要将导出的物理库表结构手动改成逻辑库表结构,才可以导入到数据库中被业务使用。命令行指定
--partition选项导出分区内的数据时,对于组合分区表需要指定二级分区名,OBDUMPER 无法导出一级分区内的数据。如果指定的分区名不存在,OBDUMPER 会报错提示。命令行指定
--add-extra-message选项导出表定义时,程序会导出每张表所属的表组名。该选项依赖 sys 租户权限。如果 OBDUMPER 运行时缺少 sys 租户的权限,请勿指定该选项。OceanBase 数据库 V3.2.4 及之后的版本使用导数工具前,请将系统配置项
open_cursors设置为较大的值,否则导入/导出可能会出现错误。数据导入/导出结束后,请将该系统配置项重置成初始值。例如:ALTER SYSTEM SET open_cursors = 65535;。OceanBase 数据库 V4.0.0 及之后版本中表结构发生过任意的变更操作,无法使用 OBDUMPER 导出该表最近一次成功合并的基线数据(即一致性快照数据),用户可以手动发起一次合并以后,再重新导出最近一次成功合并的基线数据。
OceanBase 数据库 MySQL 模式中关于日期/时间类型存储零值,使用 OBDUMPER V4.2.0 之前的版本导出数据时,JDBC 将零值日期时间转换为 NULL,如果该列定义为 NOT NULL 约束,导出数据将会报错。OBDUMPER V4.2.0 可以导出零值/日期时间,但导出时无法区分原始数据(NULL 或者零值),默认将数据强制转换成零值;其次 DATETIME, TIMESTAMP 两种数据类型导出的零值可能出现数据失真的问题,即某个非零近似值。数据库 sql_mode 变量中包含 NO_ZERO_DATE, NO_ZERO_IN_DATE 约束时,导入零值数据会报错。OceanBase 数据库 MySQL 租户涉及零值问题的数据类型包括 DATE、DATETIME、TIME、YEAR 和 TIMESTAMP。
结构导出功能差异
租户 提供 sys 租户的密码 未提供 sys 租户的密码 MySQL 表、视图、表组、存储过程、函数 与 提供 sys 租户的密码 的导出行为基本相同,但是还存在以下遗留问题。 - OceanBase 数据库 V2.2.70 之前的版本无法导出表组定义。
- OceanBase 数据库 V2.2.70 之前的版本无法导出唯一索引的分区信息。
- OceanBase 数据库 Oracle 租户 V2.2.30 及之前的版本无法导出索引定义。
- OceanBase 数据库 Oracle 租户 V2.2.70(包含)~ V4.0.0 无法导出分区表的唯一索引定义。
Oracle 表、视图、触发器、同义词、序列、存储过程、函数、包、表组、类型