
在数据库日常运维中整库备份、跨环境迁移、历史数据归档是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 DBDATEY4MD- export DBCENTURYC建议在所有场景下都使用四位数年份格式避免世纪位歧义。4.4 文件大小限制dbexport可创建大于 2 GB 的文件。要支持大文件请确保操作系统文件大小限制设置得足够高# Linux/UNIX 环境下检查并设置 ulimit -f unlimited # 或 ulimit -a | grep file4.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 unlimiteddbimport失败模式文件被手动修改或注释错误恢复原始模式文件避免手动编辑.sql导入后数据异常/日期错乱环境变量不一致统一设置DBDATE、DBCENTURY等变量SELECT 触发器修改了导出数据导出前未禁用 SELECT 触发器导出前执行禁用触发器操作导入后数据库无法正常使用未执行 Level 0 备份启用日志后执行ontape -s -L 0六、最佳实践总结使用dbexport与dbimport进行整库迁移时建议遵循以下 checklist导出前禁用 SELECT 触发器 → 检查磁盘空间 → 确认环境变量导出时根据业务场景选择是否使用-l在线导出和-ss保留服务器特性传输后保持.exp目录结构完整注意.unl数据文件权限导入时确认目标 dbspace 存在 → 保持环境变量一致导入后按需启用日志 → 执行 Level 0 备份 → 重新启用表压缩 → 验证数据完整性掌握dbexport及其配套工具dbimport的使用能够有效支撑数据库的备份、迁移和恢复等日常运维工作。如果你在迁移过程中遇到过特殊场景或棘手问题欢迎在评论区留言交流一起完善 GBase 8s 的运维知识库