注册
达梦数据库dexp / dimp 逻辑导入导出
技术分享/ 文章详情 /

达梦数据库dexp / dimp 逻辑导入导出

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

dexp和dimp的使用。如何提高导入导出的效率?
dexpdp、dimpdp和dexp、dimp的区别?
dimp导入的一个参数overwrite overwrite2 之间的区别?

一、概述

dexp(逻辑导出)和 dimp(逻辑导入)是达梦数据库自带的命令行工具,位于安装目录的 dmdbms/bin 下。它们用于在数据库联机状态下进行逻辑备份和还原,支持全库、用户、模式、表四种级别的导出导入。

此外,达梦还提供了 dexpdp / dimpdp(服务端版本),与 dexp / dimp 功能相同,但执行位置和文件生成位置不同。

本文档基于 TESTDB 实例(端口 5239)的实操记录,完整覆盖 dexp/dimp 的使用方法、效率优化、参数区别及常见问题处理。

二、环境信息

  • 实例:TESTDB(端口 5239)
  • 数据目录:/home/dmdba/dmdata/test/TESTDB
  • 备份目录:/home/dmdba/backup
  • 测试用户:SYSDBA
  • 测试模式:TEST(包含表 EMPLOYEE 100004 行,DEPT 10 行,TEST_TS_TABLE 0 行)

三、dexp 逻辑导出实操

3.1 基本语法

dexp USERID=用户名/密码@IP:端口 参数1=值1 参数2=值2 ...

重要USERID 参数必须放在第一位,否则报错 [-2007]:语法分析出错

3.2 按模式导出(SCHEMAS)

导出整个 TEST 模式的所有对象。

dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 SCHEMAS=TEST FILE=/home/dmdba/backup/test_schema.dmp LOG=/home/dmdba/backup/test_schema_exp.log

输出(节选)

dexp V8
正在导出 第1 个SCHEMA :TEST
----- 导出表:TEST.EMPLOYEE -----
表TEST.EMPLOYEE导出结束,共导出 100004 行数据, 大小 2.840 MB
----- 导出表:TEST.DEPT -----
表TEST.DEPT导出结束,共导出 10 行数据
成功导出, 没有出现警告

验证文件

ls -lh /home/dmdba/backup/test_schema.dmp

输出:-rw-r--r-- 1 dmdba dinstall 2.9M Jul 28 16:43 test_schema.dmp

3.3 按表导出(TABLES)

只导出 TEST.EMPLOYEE 表。

dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 TABLES=TEST.EMPLOYEE FILE=/home/dmdba/backup/test_employee.dmp LOG=/home/dmdba/backup/test_employee_exp.log

输出

dexp V8
----- 导出表:TEST.EMPLOYEE -----
表TEST.EMPLOYEE导出结束,共导出 100004 行数据, 大小 2.840 MB
成功导出, 没有出现警告

3.4 按条件导出(QUERY)

导出 ID < 100 的记录。

dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 TABLES=TEST.EMPLOYEE QUERY="where ID<100" FILE=/home/dmdba/backup/test_employee_partial.dmp LOG=/home/dmdba/backup/test_employee_partial_exp.log

输出

dexp V8
----- 导出表:TEST.EMPLOYEE -----
表TEST.EMPLOYEE导出结束,共导出 93 行数据, 大小 2.159 KB
成功导出, 没有出现警告

3.5 只导出表结构(ROWS=N)

只导出表定义,不导出数据。

dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 SCHEMAS=TEST FILE=/home/dmdba/backup/test_schema_struct.dmp ROWS=N LOG=/home/dmdba/backup/test_schema_struct_exp.log

输出

dexp V8
正在导出 第1 个SCHEMA :TEST
共导出 3 个TABLE
模式[TEST]导出结束.....
成功导出, 没有出现警告

导入后验证:表存在但无数据。

3.6 dexp 常用参数汇总

参数 说明 示例
USERID 数据库登录信息(必选,必须第一位) USERID=SYSDBA/Dameng123@127.0.0.1:5239
FILE 导出文件名,缺省为 dexp.dmp FILE=/data/backup/exp.dmp
LOG 日志文件名,缺省为 dexp.log LOG=exp.log
SCHEMAS 按模式导出(模式名列表) SCHEMAS=TEST,HR
TABLES 按表导出(表名列表) TABLES=TEST.EMPLOYEE,HR.DEPT
QUERY 按条件导出 QUERY=TEST.EMPLOYEE:"where ID&lt;100"
ROWS 是否导出数据行,默认 Y ROWS=N(只导结构)
PARALLEL 导出线程数,默认 16 PARALLEL=32
TABLE_PARALLEL 每表子线程数,默认 8 TABLE_PARALLEL=16
EXCLUDE 忽略指定对象类型 EXCLUDE=INDEXES,TRIGGERS

四、dimp 逻辑导入实操

4.1 基本语法

dimp USERID=用户名/密码@IP:端口 参数1=值1 参数2=值2 ...

4.2 导入到新模式(REMAP_SCHEMA)

TEST 模式导入到 TEST2 模式。

步骤1:创建目标模式

disql SYSDBA/Dameng123@localhost:5239 -e "CREATE SCHEMA TEST2;"

步骤2:导入

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 LOG=/home/dmdba/backup/dimp_test2.log

输出(节选)

dimp V8
[1/4]创建表 TEST2.EMPLOYEE ...
[1/4]创建表 TEST2.DEPT ...
[4/4]表 TEST2.DEPT 的数据导入完成,共导入数据:10 行
[4/4]表 TEST2.EMPLOYEE 的数据导入完成,共导入数据:100004 行, 大小 2.840 MB
成功导入, 没有出现警告

验证

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

输出:100004

4.3 表存在时追加数据(TABLE_EXISTS_ACTION=APPEND)

当目标表已存在时,使用 APPEND 追加数据。但如果有主键冲突,需要配合 PRIMARY_CONFLICT 参数。

命令

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=IGNORE

输出关键信息

[表: EMPLOYEE]表TEST2.EMPLOYEE, 跳过主键冲突100004 行,插入0行新数据
成功导入, 没有出现警告

4.4 表存在时清空后导入(TABLE_EXISTS_ACTION=TRUNCATE)

先清空目标表数据,再导入新数据。

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=TRUNCATE

4.5 表存在时删除重建(TABLE_EXISTS_ACTION=REPLACE)

先删除目标表,再重建并导入数据。

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=REPLACE

五、主键冲突处理:IGNORE / OVERWRITE / OVERWRITE2 区别

当目标表存在主键冲突时,PRIMARY_CONFLICT 参数控制处理方式。通过实操验证,三种方式的区别如下:

参数值 行为 底层操作 日志关键信息
IGNORE 跳过冲突行,不导入冲突数据 不处理 跳过主键冲突100004 行,插入0行新数据
OVERWRITE 删除原行,插入新行 DELETE + INSERT 刪除主键冲突100004 行,插入100004行新数据
OVERWRITE2 更新冲突行 UPDATE 更新主键冲突100004 行,插入0行新数据

实操验证

制造冲突

UPDATE TEST2.EMPLOYEE SET NAME='CONFLICT_NAME', AGE=999 WHERE ID=1; COMMIT;

测试 OVERWRITE

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=OVERWRITE

验证SELECT ID, NAME, AGE FROM TEST2.EMPLOYEE WHERE ID=1; → 恢复为 张三, 30

测试 OVERWRITE2(再次制造冲突后):

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=OVERWRITE2

验证:同样恢复为 张三, 30,但日志显示“更新”而非“删除+插入”。

六、dexpdp / dimpdp(服务端工具)

6.1 与 dexp/dimp 的区别

对比项 dexp / dimp dexpdp / dimpdp
执行位置 客户端 服务端
文件生成位置 客户端所在目录 服务器端指定目录
DIRECTORY 参数 不支持 需要数据库目录对象
适用场景 导出到本地 导出到服务器,减少网络传输

6.2 遇到的问题及解决

问题:执行 dexpdp 时直接指定路径报错。

[警告]无效的目录名[/HOME/DMDBA/BACKUP]

原因dexpdp 不支持直接写操作系统路径,需要先在数据库中创建目录对象。

解决

CREATE DIRECTORY BACKUP_DIR AS '/home/dmdba/backup'; GRANT READ, WRITE ON DIRECTORY BACKUP_DIR TO PUBLIC;

6.3 dexpdp 导出

cd /home/dmdba/dmdbms/bin ./dexpdp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=test_dp.dmp SCHEMAS=TEST DIRECTORY=BACKUP_DIR LOG=test_dp_exp.log

输出

dexpdp V8
正在导出 第1 个SCHEMA :TEST
表TEST.EMPLOYEE导出结束,共导出 100004 行数据, 大小 2.840 MB
成功导出, 没有出现警告

验证

ls -lh /home/dmdba/backup/test_dp.dmp

输出:-rw-r--r-- 1 dmdba dinstall 2.9M Jul 28 16:48 test_dp.dmp

6.4 dimpdp 导入

./dimpdp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=test_dp.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 DIRECTORY=BACKUP_DIR LOG=test_dp_imp_clean.log

输出关键信息

dimpdp V8
表 TEST2.EMPLOYEE 的数据导入完成,共导入数据:100004 行
成功导入, 没有出现警告

七、如何提高导入导出效率

7.1 并行参数

参数 默认值 说明 调优建议
PARALLEL 16 总线程数 大数据量时可增至 32 或更高
TABLE_PARALLEL 8 每表子线程数(需 FAST_LOAD=Y 生效) 单表数据量大时可增加

7.2 快速导入模式(FAST_LOAD)

启用 FAST_LOAD=Y 会使用 dmfldr 工具进行高速数据导入。

dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=REPLACE FAST_LOAD=Y TABLE_PARALLEL=16

7.3 效率对比实测

在本环境(约 10 万行数据)中测试三种方式:

导入方式 命令参数 耗时(real)
常规导入 无额外参数 0m0.327s
高并行 PARALLEL=32 TABLE_PARALLEL=16 0m0.929s
快速导入 FAST_LOAD=Y TABLE_PARALLEL=16 0m0.512s

结论

  • 小数据量(≤10 万行)时,常规导入最快,因为并行和快速加载的启动开销大于收益。
  • 大数据量(数百万行以上)时,FAST_LOAD=YPARALLEL 可显著提升效率。
  • 建议根据实际数据量动态调整,优先尝试 FAST_LOAD=Y

八、常见错误及处理方法

错误 原因 解决方法
[-2007]:语法分析出错 USERID 未放在第一位 USERID 作为第一个参数
[警告]无效的目录名 dexpdp 不支持直接写路径 创建数据库目录对象
[警告]违反唯一性约束条件 主键冲突 使用 PRIMARY_CONFLICT=IGNORE/OVERWRITE/OVERWRITE2
[警告]表已存在 目标表存在 使用 TABLE_EXISTS_ACTION=APPEND/TRUNCATE/REPLACE
[警告]文件"dimp.log"已经存在 日志文件已存在 输入 y 覆盖,或使用 LOG 参数指定新文件名
TABLES 级别导入未覆盖目标 TABLES 级别不支持 REMAP_SCHEMA 改用 SCHEMAS 级别 + REMAP_SCHEMA

九、完整命令清单

# ========== 导出(dexp) ========== # 1. 按模式导出 dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 SCHEMAS=TEST FILE=/home/dmdba/backup/test_schema.dmp LOG=exp_schema.log # 2. 按表导出 dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 TABLES=TEST.EMPLOYEE FILE=/home/dmdba/backup/test_employee.dmp # 3. 按条件导出 dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 TABLES=TEST.EMPLOYEE QUERY="where ID<100" FILE=/home/dmdba/backup/test_employee_partial.dmp # 4. 只导结构 dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 SCHEMAS=TEST FILE=/home/dmdba/backup/test_schema_struct.dmp ROWS=N # 5. 高并行导出 dexp USERID=SYSDBA/Dameng123@127.0.0.1:5239 SCHEMAS=TEST FILE=/home/dmdba/backup/test_parallel.dmp PARALLEL=32 TABLE_PARALLEL=16 # ========== 导入(dimp) ========== # 6. 导入到新模式 dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 # 7. 追加导入(忽略主键冲突) dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=IGNORE # 8. 覆盖主键冲突(DELETE+INSERT) dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=OVERWRITE # 9. 更新主键冲突(UPDATE) dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_employee.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=APPEND PRIMARY_CONFLICT=OVERWRITE2 # 10. 清空后导入 dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=TRUNCATE # 11. 删除重建后导入 dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=REPLACE # 12. 快速导入 dimp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=/home/dmdba/backup/test_schema.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 TABLE_EXISTS_ACTION=REPLACE FAST_LOAD=Y TABLE_PARALLEL=16 # ========== 服务端工具(dexpdp/dimpdp) ========== # 13. 创建目录对象(先执行) CREATE DIRECTORY BACKUP_DIR AS '/home/dmdba/backup'; GRANT READ, WRITE ON DIRECTORY BACKUP_DIR TO PUBLIC; # 14. dexpdp 导出 dexpdp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=test_dp.dmp SCHEMAS=TEST DIRECTORY=BACKUP_DIR LOG=dexpdp.log # 15. dimpdp 导入 dimpdp USERID=SYSDBA/Dameng123@127.0.0.1:5239 FILE=test_dp.dmp SCHEMAS=TEST REMAP_SCHEMA=TEST:TEST2 DIRECTORY=BACKUP_DIR LOG=dimpdp.log
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服