注册
达梦数据库逻辑导入导出实战:从零开始完成 dexp/dimp 迁移
技术分享/ 文章详情 /

达梦数据库逻辑导入导出实战:从零开始完成 dexp/dimp 迁移

何处惹尘埃 2026/07/31 197 0 0

前置说明:如果你已经按照本人的记录《达梦数据库物理备份还原实战:全量+增量+归档恢复》完成了物理备份还原的练习,可以直接从 第三节(创建测试数据) 开始,因为实例和表结构已经就绪。如果是从零开始,请从第一节顺序执行。

一、环境准备

1.1 检查磁盘空间

逻辑导出会产生 .dmp 文件,需要确保有足够的磁盘空间。

df -h /

输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        47G   41G  3.7G  92% /

根分区使用率 92%,可用 3.7G。需要清理一些空间。

清理临时文件和缓存

sudo rm -rf /tmp/* sudo yum clean all

清理后再次检查:

df -h /

可用空间增加到 5.2G,满足要求。

1.2 创建测试实例

为了避免影响现有业务,新建一个独立实例,端口 5239

su - dmdba mkdir -p /home/dmdba/dmdata/test cd /home/dmdba/dmdata/test dminit path=/home/dmdba/dmdata/test db_name=TESTDB instance_name=TESTDB port_num=5239 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Audit123

输出(节选)

create dm database success. 2026-07-28 11:18:18

启动实例

nohup /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdata/test/TESTDB/dm.ini > /home/dmdba/dmdata/test/dm.log 2>&1 &

检查端口监听

ss -tlnp | grep 5239

输出:

LISTEN     0      128       [::]:5239                  [::]:*                   users:(("dmserver",pid=8845,fd=3))

二、创建测试数据

连接实例,创建 TEST 模式和 EMPLOYEE 表,插入测试数据。

disql SYSDBA/Dameng123@localhost:5239

SQL> 提示符下执行:

CREATE SCHEMA TEST; CREATE TABLE TEST.EMPLOYEE (ID INT PRIMARY KEY, NAME VARCHAR(50), AGE INT, DEPT VARCHAR(50)); INSERT INTO TEST.EMPLOYEE VALUES (1, '张三', 30, '研发部'); INSERT INTO TEST.EMPLOYEE VALUES (2, '李四', 25, '市场部'); INSERT INTO TEST.EMPLOYEE VALUES (3, '王五', 35, '财务部'); COMMIT; SELECT * FROM TEST.EMPLOYEE;

输出

ID          NAME   AGE         DEPT
----------- ------ ----------- ---------
1           张三    30          研发部
2           李四    25          市场部
3           王五    35          财务部

三、逻辑导出(dexp)

3.1 确认实例运行

ss -tlnp | grep 5239

输出:

LISTEN     0      128       [::]:5239                  [::]:*                   users:(("dmserver",pid=11286,fd=3))

3.2 执行导出

逻辑导出(dexp)和逻辑导入(dimp)是达梦数据库的两个命令行工具,分别用来实现对达梦数据库的逻辑备份和逻辑还原。逻辑备份和还原都是在联机方式下完成,即数据库正常运行过程中进行的备份和还原。

dexp SYSDBA/Dameng123@localhost:5239 file=/tmp/backup/test.dmp schemas=TEST log=/tmp/backup/test_exp.log

输出

dexp V8
version: 03134284604-20260707-335949-20228

正在导出 第1 个SCHEMA :TEST

开始导出模式[TEST].....

----- [2026-07-28 11:41:17]导出表:TEST.EMPLOYEE -----

表TEST.EMPLOYEE导出结束,共导出 4 行数据, 大小 0.082 KB

共导出 1 个TABLE

模式[TEST]导出结束.....

成功导出 第1 个SCHEMA :TEST

开始导出统计信息.....

共导出 1 个SCHEMA

整个导出过程共花费    0.487 s

成功导出, 没有出现警告

3.3 dexp 支持的导出级别

dexp 支持四种级别的导出,四种级别独立互斥,不能同时存在:

级别 参数 说明
全库 full=y 导出整个数据库的所有对象
按用户 owner=USER1 导出指定用户的所有对象
按模式 schemas=TEST 导出指定模式的所有对象
按表 tables=TEST.EMPLOYEE 导出指定的表

四、逻辑导入(dimp)

4.1 创建目标模式

首先在数据库中创建目标模式 TEST2

disql SYSDBA/Dameng123@localhost:5239

SQL> 提示符下执行:

CREATE SCHEMA TEST2; /

注意:在 disql 中,CREATE SCHEMA 属于语句块,输入分号 ; 后还需要输入 斜杠 / 才能执行。如果提示符变成 2,输入 / 即可提交执行。

4.2 执行导入

dimp SYSDBA/Dameng123@localhost:5239 file=/tmp/backup/test.dmp FROMUSER=TEST TOUSER=TEST2 log=/tmp/backup/test_imp.log

遇到的第一个问题

[警告]无法识别参数FROMUSER
[警告]导入失败

原因:当前版本的 dimp 不支持 FROMUSER/TOUSER 参数。不同版本的达梦数据库对 dimp 的参数支持可能有所不同。

解决方案:改用 remap_schema 参数实现模式重命名导入。

dimp SYSDBA/Dameng123@localhost:5239 file=/tmp/backup/test.dmp schemas=TEST remap_schema=TEST:TEST2 log=/tmp/backup/test_imp.log

输出(节选)

dimp V8

[0/2]开始导入模式[TEST]......

[1/2]导入表:TEST.EMPLOYEE
表 TEST.EMPLOYEE 的数据导入完成,共导入数据:4 行, 大小 0.082 KB

模式[TEST]导入完成......

整个导入过程共花费    0.098 s

成功导入, 没有出现警告

五、验证导入结果

disql SYSDBA/Dameng123@localhost:5239 -e "SELECT * FROM TEST2.EMPLOYEE;"

输出

ID          NAME   AGE         DEPT
----------- ------ ----------- ---------
1           张三    30          研发部
2           李四    25          市场部
3           王五    35          财务部
4           赵六    28          人事部

数据完整,逻辑导入导出成功!

六、遇到的问题与解决方法汇总

问题 现象 原因 解决方法
磁盘空间不足 No space left on device 根分区使用率 92% 清理 /tmp 和 yum 缓存
CREATE SCHEMA 不执行 提示符变成 2 语句块需要 / 结束 输入 / 后回车提交
FROMUSER/TOUSER 不支持 [警告]无法识别参数FROMUSER dimp 版本不支持该参数 改用 remap_schema=源:目标
ps -ef 查不到进程 无输出 端口号不在进程命令行中 ss -tlnp \| grep 5239 检查端口

七、逻辑导入导出 vs 其他方式

7.1 逻辑导入导出 vs 物理备份

对比项 逻辑备份(dexp/dimp) 物理备份(dmrman)
备份内容 数据库对象定义(DDL)和数据行(SQL 语句) 操作系统物理文件(数据文件、控制文件、日志文件)
关注点 数据的内容,不关心物理存储位置 数据存储在什么位置
运行方式 联机(数据库运行时) 脱机(数据库需关闭)
恢复粒度 可恢复到表、模式、用户级别 通常为全库恢复
恢复速度 较慢(需解析 SQL) 较快(直接覆盖文件)
适用场景 数据迁移、特定对象恢复、开发测试环境刷新 灾难恢复、全库还原、任意时间点恢复

7.2 逻辑导入导出 vs DTS

对比项 逻辑导入导出(dexp/dimp) DTS 数据迁移工具
界面 命令行 图形化界面
适用范围 仅限达梦数据库之间 支持多种数据源迁移到达梦
资源占用 低,适合资源受限环境 较高,需要图形界面和更多内存
使用场景 生产环境无图形界面、网络未放通时最直接高效 跨数据库迁移、图形化操作

7.3 为什么之前建议用 dexp/dimp

之前尝试用 DEM 的 DTS 迁移模块时,遇到了代理配置和图形界面启动的问题。在生产环境中,由于网络未放通、没有图形化界面等原因,DTS 往往不能直接使用。而 dexp/dimp 作为命令行工具,不依赖图形界面,资源占用低,在达梦库到达梦库的数据迁移中是最直接也是最高效的方式。这正是当时推荐使用 dexp/dimp 的原因。

八、清理测试环境(可选)

如果不再需要测试实例:

ps -ef | grep dmserver | grep 5239 | awk '{print $2}' | xargs kill -9 rm -rf /home/dmdba/dmdata/test rm -rf /tmp/backup
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服