GBase 8s
运维管理
文章

GBase 8s 运维实战:dbexport/dbimport 整库迁移与备份简述

发表于2026-08-26 14:48:42361次浏览2个评论

在数据库日常运维中,整库备份、跨环境迁移、历史数据归档是DBA的高频操作。GBase 8s 提供的 dbexport 与 dbimport 工具组合,能够高效完成数据库级逻辑导出与导入,支持模式与数据的完整迁移。本文将结合生产实践经验,系统梳理 dbexport 的典型用法、与 dbimport 的配合流程,以及容易被忽视的关键注意事项,帮助你在迁移任务中少走弯路。

一、dbexport 命令概述

dbexport 是 GBase 8s 的逻辑导出工具,用于将指定数据库的模式定义(Schema)和表数据导出到文件系统。默认输出为一个以 .exp 结尾的目录,包含:

  • .sql:数据库模式文件(含建库、建表、索引等DDL)

  • *.unl:各表的数据文件(以管道符 | 分隔)

⚠️ 前置检查: 执行 dbexport 前,请确保当前用户对目标目录有写权限,且磁盘空间充足(建议预留数据库物理大小的 1.2 倍以上)。

二、典型使用示例

2.1 基本导出(导出到当前目录)

dbexport testdb

导出 testdb 数据库,在当前目录生成 testdb.exp 文件夹。

验证提示:

# 检查导出结果
ls -ld testdb.exp
ls -l testdb.exp/

2.2 导出到指定目录

dbexport testdb -o /data

导出 testdb 数据库到 /data 目录,生成 /data/testdb.exp 文件夹。

验证提示:

# 确保目标目录存在且有写权限
mkdir -p /data
chmod 755 /data
dbexport testdb -o /data
ls -l /data/testdb.exp/

2.3 导出包含服务器特定信息

dbexport testdb -ss -o /data

使用 -ss 参数导出所有表的详细属性,包括扩展数据块大小(extent size)、表空间(dbspace)、锁定方式(lock mode)等。适用于需要保持源端存储特性的迁移场景。

2.4 在线导出(不锁定数据库)

dbexport testdb -l

使用 -l 参数,数据库在导出期间不会被互斥锁定,按照 Dirty Read(脏读)隔离级别进行导出。适用于7×24生产环境,避免阻塞在线业务。

⚠️ 注意: 在线导出不锁定数据库,但可能读取到未提交的数据。若对数据一致性要求极高,建议在业务低峰期使用默认模式(加锁导出)。

2.5 导出到磁带

dbexport -t /dev/rmt0 -b 16 -s 24000 -f /tmp/stores_demo.imp stores_demo

将 stores_demo 数据库导出到磁带设备:

  • -t /dev/rmt0:指定磁带设备路径

  • -b 16:块大小为 16 KB

  • -s 24000:磁带容量为 24000 KB

  • -f /tmp/stores_demo.imp:模式文件(.sql)保存到指定路径

⚠️ 验证提示: 磁带设备 /dev/rmt0 需根据实际环境替换,执行前请确认设备已挂载且可写。

2.6 不指定所有者导出

dbexport customer -nw

为 customer 数据库生成模式和数据,导出文件中不指定数据库所有者。适用于导入时由目标环境重新分配属主的场景。

三、与 dbimport 配合使用

dbexport 导出的 .exp 目录通常通过 dbimport 工具导入目标环境。

3.1 基本导入

将 testdb.exp 目录传输到目标服务器后,在相同目录下执行:

dbimport testdb -d datadbs01

将数据库导入到 datadbs01 数据库空间(dbspace)。

验证提示:

# 导入前确认 dbspace 存在
onstat -d | grep datadbs01

# 导入后验证
dbaccess testdb -
> SELECT COUNT(*) FROM systables;

3.2 导入为不同名称的数据库

如需将 testdb 导入为 testdb1:

# 重命名导出目录
mv testdb.exp testdb1.exp

# 重命名目录内的 .sql 文件
mv testdb1.exp/testdb.sql testdb1.exp/testdb1.sql

# 执行导入
dbimport testdb1 -d datadbs01

⚠️ 重要提示: 部分版本中 .sql 文件内部可能包含原数据库名引用。若导入报错,建议使用文本编辑器检查并替换 testdb1.exp/testdb1.sql 文件内的数据库名,确保与目标库名一致。

3.3 导入后设置日志模式

dbimport 导入完成后,数据库默认无事务日志记录。如需启用日志,按以下步骤操作:

# 1. 修改为无缓冲日志模式(unbuffered log)
ondblog unbuf testdb

# 2. 执行零级备份(启用日志后必须备份才能正常使用)
ontape -s -L 0
# 或使用 onbar 备份(若配置了存储管理器)
# onbar -b -F

⚠️ 修正说明: 启用日志后,GBase 8s 要求必须执行一次全量备份(Level 0)才能使数据库进入在线状态。ontape -s -L 0 是最通用的方式;若使用 onbar,需确保存储管理器已正确配置。

四、重要注意事项

4.1 禁用 SELECT 触发器(关键!)

在使用 dbexport 导出数据库之前,必须禁用 SELECT 触发器。原因是 dbexport 在导出期间会执行 SELECT * FROM table 读取数据,若存在 SELECT 触发器,可能在导出过程中意外修改数据库内容,导致数据不一致。

-- 导出前检查并禁用
dbaccess testdb -
> SELECT tabname FROM systriggers WHERE event = 'SELECT';
-- 如有,先执行 ALTER TRIGGER ... DISABLE 或删除触发器

4.2 数据库锁定机制

默认情况下,dbexport 在导出期间会以互斥方式锁定数据库。如果无法获得互斥锁(如其他会话正在访问),dbexport 将显示诊断消息并退出。此时可:

  • 使用 -l 选项进行在线导出(脏读模式)

  • 或在业务低峰期执行导出

4.3 环境变量一致性

导入数据库时,请使用与创建该数据库时相同的环境变量设置,否则可能导致导入失败或产生不可预料的结果。特别是日期相关变量:

# 建议在导入前统一设置
export DBDATE=Y4MD-
export DBCENTURY=C

建议: 在所有场景下都使用四位数年份格式,避免世纪位歧义。

4.4 文件大小限制

dbexport 可创建大于 2 GB 的文件。要支持大文件,请确保操作系统文件大小限制设置得足够高:

# Linux/UNIX 环境下检查并设置
ulimit -f unlimited
# 或
ulimit -a | grep file

4.5 压缩数据处理

dbexport 会自动解压缩压缩的数据。因此,如果数据库包含带有压缩数据的表或分段,在使用 dbimport 导入数据之后,需要重新启用压缩并重新压缩:

-- 导入后重新启用压缩(示例)
ALTER TABLE tabname COMPRESS;

4.6 辅助服务器限制

  • 不能在高可用性集群中的辅助服务器(Secondary Server)上使用 dbimport 或 dbexport。

  • 但如果在 RS 辅助服务器上正确设置了 STOP_APPLY、UPDATABLE_SECONDARY 和 USELASTCOMMITTED 配置参数,dbexport 可以对 RS 辅助服务器执行读操作。

4.7 定界标识支持

dbexport 支持定界标识(Delimited Identifiers),能够自动检测关键字、混合大小写或带有特殊字符的数据库对象,并在它们周围加上双引号,确保模式文件可正确解析。

五、常见问题排查速查表

问题现象可能原因解决方法

dbexport 无法获得互斥锁定

数据库正在被其他进程使用使用 -l 选项在线导出;或等待业务低峰期
导出文件超过 2GB 报错操作系统文件大小限制执行 ulimit -f unlimited

dbimport 失败

模式文件被手动修改或注释错误恢复原始模式文件,避免手动编辑 .sql
导入后数据异常/日期错乱环境变量不一致统一设置 DBDATE、DBCENTURY 等变量
SELECT 触发器修改了导出数据导出前未禁用 SELECT 触发器导出前执行禁用触发器操作
导入后数据库无法正常使用未执行 Level 0 备份启用日志后执行 ontape -s -L 0

六、最佳实践总结

使用 dbexport 与 dbimport 进行整库迁移时,建议遵循以下 checklist:

  1. 导出前:禁用 SELECT 触发器 → 检查磁盘空间 → 确认环境变量

  2. 导出时:根据业务场景选择是否使用 -l(在线导出)和 -ss(保留服务器特性)

  3. 传输后:保持 .exp 目录结构完整,注意 .unl 数据文件权限

  4. 导入时:确认目标 dbspace 存在 → 保持环境变量一致

  5. 导入后:按需启用日志 → 执行 Level 0 备份 → 重新启用表压缩 → 验证数据完整性

掌握 dbexport 及其配套工具 dbimport 的使用,能够有效支撑数据库的备份、迁移和恢复等日常运维工作。如果你在迁移过程中遇到过特殊场景或棘手问题,欢迎在评论区留言交流,一起完善 GBase 8s 的运维知识库!

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 1个月前
导入导出,备份的一种。
用户头像
路路路发表于 1个月前
@GBase用户28017:是的呢,是这个分类的内容