首批通过分布式安全可靠测评,为关键业务系统打造
产品简介
更新时间:2024-12-19 16:11:00
什么是 OBDUMPER
OBDUMPER 是一款使用 Java 开发的客户端导出工具。可以使用该工具将 OceanBase 数据库中定义的对象和数据导出到文件中。
与 MyDumper 和 SQLDeveloper 等导出工具相比,OBDUMPER 具备以下显著优势:
高性能:在无主键表和分区表等场景下,已提供针对性的性能优化。
多功能:提供数据预处理、多种类型的数据格式和全局一致性非锁定导出数据等功能。
产品功能
OBDUMPER 主要具备以下功能特性:
支持导出数据库对象定义的语句。
支持将表中的数据按照 CSV 或者 SQL 格式导出到文件中。
支持指定分区名,导出指定分区内的表数据。
支持指定全局的过滤条件,仅导出满足条件的数据。
支持配置数据预处理规则,导出前对数据进行转换处理。
支持基于 SCN/TIMESTAMP 闪回查询,导出任意事务点或者时间点的数据。
支持将导出数据上传到 OSS 云存储服务。
支持从 OceanBase 的备副本中导出数据。(区别于备集群)
支持按照 SQL, CSV, CUT 三种数据格式导出自定义查询的结果集。
支持非锁表的情况下,通过读取快照版本来保证导出数据的全局一致性。
支持的 OceanBase 数据库
已支持的 OceanBase 数据库模式与版本,如下表所示:
| OceanBase 模式 | 支持的版本号 |
|---|---|
| Oracle 模式 | 2.2.30、2.2.52、2.2.7x、3.1.x、3.2.x |
| 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 |
注意
OBDUMPER 3.0.0 版本已支持 OceanBase 社区版 3.1.2 及之后版本。
注意事项
导出大量数据时,请在运行的脚本中修改虚拟机的内存参数。
命令行参数指定的对象名、数据文件名、规则文件名要求大小写一致。Oracle 默认大写,MySQL 默认小写。如果需要区分大小写,请将表名放入中括号内([ ])。例如:
--table '[test]'表示 test 表,文件名格式为 test.group.sequence.suffix;--table '[TEST]'表示 TEST 表,文件名格式为 TEST.group.sequence.suffix。导出数据前建议用户触发一次合并,可以提升导出的性能。
导出的数据文件的命名规范是 table.group.sequence.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 2.2.50 之前版本不支持导出函数索引的定义。
OceanBase Oracle 2.2.50 之前版本不支持导出 TYPE 对象的定义。
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选项时,请指定正确的时间格式,否则导出会报错。导出 CUT 格式文件时,如果字段内容中出现指定的字段分隔符,会对字段中的分隔符字符进行转义。例如:字段内容为
abc|def,指定分隔符为 | (--column-splitter "|"),则导出的字段内容会转换为abc\|def。--no-sys选项用于标识私有云环境下无 sys 租户密码的使用场景,相当于导数工具 3.2.0 及之前版本在私有云环境下使用--public-cloud选项的效果。导数工具 3.3.0 及之后版本对公共云环境和私有云环境进行了区分,--public-cloud选项仅用于公共云环境,--no-sys选项仅用于私有云环境。
限制模式
说明
限制模式仅适用于用户无法直接提供--sys-user和--sys-password选项的场景。
限制模式(--no-sys)适用于私有云环境下无 sys 租户密码的场景,限制模式(--public-cloud)适用于公共云环境下无 sys 租户密码的场景。
使用限制模式(
--public-cloud)从公共云部署的 OceanBase 集群导出数据时无需指定-t,-c连接选项;使用限制模式(--no-sys)从私有云部署的 OceanBase 集群导出数据时需要指定-t连接选项,连接 ODP 服务时还需要加上-c选项。如果用户未使用限制模式,OBDUMPER 必须指定--sys-user和--sys-password选项。使用限制模式(
--public-cloud)导出对象定义时,仅可以导出 TABLE 和 VIEW 两种对象类型的定义。其中 TABLE 类型的定义中不包含索引、注释等信息。并且导出数据的性能低于非限制模式下导出数据的性能。
闪回导出
使用 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。可通过固定时间点查询最近一次版本合并的数据。例如:t1 时间点发起合并,最早可查询到 t1 时间点的数据。
如果所查询的表已被删除且放置在回收站,则需要先将该表从回收站中恢复。
闪回查询受限于转储,如果发生转储且
undo_retention变量未设置,则无法查询。设置
undo_retention变量后,可查询 t1(转储时间点)+undo_retention变量设置的时间范围内的数据。