一、DM-dexp 逻辑导出工具概述
1.1 DM-dexp 逻辑导出工具简介
DM-dexp 是达梦数据库 (DM) 官方提供的逻辑导出工具,位于 DM 安装目录的 bin 子目录下。它的核心功能是将数据库中的对象 (表、视图、索引、触发器、存储过程等) 的结构定义和数据按照特定格式导出到 DMP 文件中,以便后续通过 DM-dimp 工具导入到其他数据库实例中。DM-dexp 逻辑导出工具支持命令行方式调用,灵活的参数配置使其能够满足从单表到全库的各种导出需求。
1.2 DM-dexp 逻辑导出的核心价值
DM-dexp 逻辑导出工具在达梦数据库运维体系中扮演着重要角色,其核心价值体现在以下几个方面:
- 跨平台数据迁移: 生成的 DMP 文件可在不同操作系统、不同版本的达梦数据库之间迁移。
- 精细化导出控制: 支持全库、用户、模式、表四种粒度的导出,满足不同场景需求。
- 数据备份与恢复: 作为逻辑备份手段,补充物理备份的不足。
- 对象选择性导出: 可通过参数控制是否导出数据行、索引、约束、触发器等。
1.3 DM-dexp 逻辑导出的典型应用场景
在实际的数据库运维和开发中,DM-dexp 逻辑导出常用于以下场景:
二、DM-dexp 逻辑导出工作原理与流程
2.1 DM-dexp 逻辑导出的整体执行流程
DM-dexp 逻辑导出的执行流程可以分为参数解析、数据库连接、模式判定、对象提取、数据读取、文件写入和日志记录等阶段。以下是完整的执行流程图:
#publish-mermaid-1786508335822-0{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#publish-mermaid-1786508335822-0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#publish-mermaid-1786508335822-0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#publish-mermaid-1786508335822-0 .error-icon{fill:#552222;}#publish-mermaid-1786508335822-0 .error-text{fill:#552222;stroke:#552222;}#publish-mermaid-1786508335822-0 .edge-thickness-normal{stroke-width:1px;}#publish-mermaid-1786508335822-0 .edge-thickness-thick{stroke-width:3.5px;}#publish-mermaid-1786508335822-0 .edge-pattern-solid{stroke-dasharray:0;}#publish-mermaid-1786508335822-0 .edge-thickness-invisible{stroke-width:0;fill:none;}#publish-mermaid-1786508335822-0 .edge-pattern-dashed{stroke-dasharray:3;}#publish-mermaid-1786508335822-0 .edge-pattern-dotted{stroke-dasharray:2;}#publish-mermaid-1786508335822-0 .marker{fill:#333333;stroke:#333333;}#publish-mermaid-1786508335822-0 .marker.cross{stroke:#333333;}#publish-mermaid-1786508335822-0 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#publish-mermaid-1786508335822-0 p{margin:0;}#publish-mermaid-1786508335822-0 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#publish-mermaid-1786508335822-0 .cluster-label text{fill:#333;}#publish-mermaid-1786508335822-0 .cluster-label span{color:#333;}#publish-mermaid-1786508335822-0 .cluster-label span p{background-color:transparent;}#publish-mermaid-1786508335822-0 .label text,#publish-mermaid-1786508335822-0 span{fill:#333;color:#333;}#publish-mermaid-1786508335822-0 .node rect,#publish-mermaid-1786508335822-0 .node circle,#publish-mermaid-1786508335822-0 .node ellipse,#publish-mermaid-1786508335822-0 .node polygon,#publish-mermaid-1786508335822-0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#publish-mermaid-1786508335822-0 .rough-node .label text,#publish-mermaid-1786508335822-0 .node .label text,#publish-mermaid-1786508335822-0 .image-shape .label,#publish-mermaid-1786508335822-0 .icon-shape .label{text-anchor:middle;}#publish-mermaid-1786508335822-0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#publish-mermaid-1786508335822-0 .rough-node .label,#publish-mermaid-1786508335822-0 .node .label,#publish-mermaid-1786508335822-0 .image-shape .label,#publish-mermaid-1786508335822-0 .icon-shape .label{text-align:center;}#publish-mermaid-1786508335822-0 .node.clickable{cursor:pointer;}#publish-mermaid-1786508335822-0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#publish-mermaid-1786508335822-0 .arrowheadPath{fill:#333333;}#publish-mermaid-1786508335822-0 .edgePath .path{stroke:#333333;stroke-width:1px;}#publish-mermaid-1786508335822-0 .flowchart-link{stroke:#333333;fill:none;}#publish-mermaid-1786508335822-0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#publish-mermaid-1786508335822-0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#publish-mermaid-1786508335822-0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#publish-mermaid-1786508335822-0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#publish-mermaid-1786508335822-0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#publish-mermaid-1786508335822-0 .cluster text{fill:#333;}#publish-mermaid-1786508335822-0 .cluster span{color:#333;}#publish-mermaid-1786508335822-0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#publish-mermaid-1786508335822-0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#publish-mermaid-1786508335822-0 rect.text{fill:none;stroke-width:0;}#publish-mermaid-1786508335822-0 .icon-shape,#publish-mermaid-1786508335822-0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#publish-mermaid-1786508335822-0 .icon-shape p,#publish-mermaid-1786508335822-0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#publish-mermaid-1786508335822-0 .icon-shape .label rect,#publish-mermaid-1786508335822-0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#publish-mermaid-1786508335822-0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#publish-mermaid-1786508335822-0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#publish-mermaid-1786508335822-0 .node .neo-node{stroke:#9370DB;}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node rect,#publish-mermaid-1786508335822-0 [data-look=\”neo\”].cluster rect,#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].swimlane.cluster rect{filter:none;}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node path{stroke:#9370DB;stroke-width:1px;}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node .neo-line path{stroke:#9370DB;filter:none;}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].node circle .state-start{fill:#000000;}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786508335822-0 [data-look=\”neo\”].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#publish-mermaid-1786508335822-0 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}否是否是FULLOWNERSCHEMASTABLES是否
启动 DM-dexp 工具
解析命令行参数
校验参数合法性
参数是否合法
输出错误信息并退出
连接目标数据库
连接是否成功
报错连接失败并退出
判定导出模式
导出模式判断
提取全库对象列表
提取指定用户对象列表
提取指定模式对象列表
提取指定表对象列表
读取对象元数据定义
读取对象数据行
写入 DMP 文件
是否有更多对象
关闭文件句柄
生成导出日志
导出完成
从流程图中可以看出,DM-dexp 逻辑导出的核心在于根据用户指定的导出模式确定对象提取范围,然后逐个对象地读取元数据和数据行,最终写入到 DMP 文件中。
2.2 DM-dexp 逻辑导出的四种导出模式
DM-dexp 逻辑导出支持四种导出模式,四种模式互斥,每次导出只能选择其中一种:
| 模式 | 参数 | 说明 | 适用场景 |
|——|——|——|———-|
| 全库导出 | FULL=Y | 导出整个数据库的所有对象 | 整库迁移或备份 |
| 用户导出 | OWNER=用户名 | 导出指定用户下的所有对象 | 按用户维度迁移 |
| 模式导出 | SCHEMAS=模式名 | 导出指定模式下的所有对象 | 按模式维度迁移 |
| 表导出 | TABLES=表名 | 导出指定的表及其相关对象 | 单表或多表导出 |
四种模式的优先级为: TABLES > OWNER > SCHEMAS > FULL。如果同时指定了多个模式参数,优先级高的参数生效。
2.3 DM-dexp 逻辑导出关键参数详解
DM-dexp 逻辑导出工具提供了丰富的参数,以下是核心参数的详细说明:
1. 连接类参数
- USERID: 数据库连接字符串,格式为 "用户名/密码@IP:端口" 或 "用户名/密码@服务名"。
- 需要注意的是,USERID 是第一个位置参数,可以不写参数名。
2. 文件类参数
- FILE: 导出文件名,默认为 dm.dmp。
- DIRECTORY: 导出文件存放目录,默认为当前目录。
- LOG: 日志文件名,默认为 dexp.log。
- FILESIZE: 单个 DMP 文件的最大大小,超出后自动分文件。
3. 模式类参数
- FULL: 是否全库导出,Y 或 N。
- OWNER: 用户名列表,多个用逗号分隔。
- SCHEMAS: 模式名列表,多个用逗号分隔。
- TABLES: 表名列表,多个用逗号分隔。
4. 内容控制参数
- ROWS: 是否导出数据行,Y 或 N,默认 Y。
- INDEXES: 是否导出索引,Y 或 N,默认 Y。
- CONSTRAINTS: 是否导出约束,Y 或 N,默认 Y。
- TRIGGERS: 是否导出触发器,Y 或 N,默认 Y。
- VIEWS: 是否导出视图,Y 或 N,默认 Y。
- PROCEDURES: 是否导出存储过程和函数,Y 或 N,默认 Y。
5. 性能与安全参数
- PARALLEL: 导出并行度,提高导出速度。
- TABLE_PARALLEL: 单表导出并行度。
- COMPRESS: 是否压缩导出文件,Y 或 N。
- ENCRYPT: 是否加密导出文件,Y 或 N。
- ENCRYPT_PASSWORD: 加密密码。
三、DM-dexp 逻辑导出实战操作
3.1 环境准备与前置检查
在执行 DM-dexp 逻辑导出之前,需要完成以下准备工作:
1. 确认达梦数据库已安装且服务正常运行
# 检查 DM 服务状态
ps -ef | grep dmserver
# 查看 DM 监听端口
netstat -tlnp | grep 5236
2. 确认 DM-dexp 工具可用
# 进入 DM 安装目录的 bin 目录
cd /opt/dmdbms/bin
# 查看 dexp 版本
./dexp help
3. 确认导出目录存在且有写权限
# 创建导出目录
mkdir -p /data/dexp_backup
# 检查目录权限
ls -ld /data/dexp_backup
4. 确认数据库用户有足够的导出权限
— 授予导出所需权限
GRANT EXP_FULL_DATABASE TO SYSDBA;
— 查看用户权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBA';
3.2 FULL 全库模式导出实战
FULL 全库导出模式用于导出整个数据库的所有对象,适用于整库迁移或完整备份场景。
1. 基本全库导出命令
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=full_export.dmp LOG=full_export.log FULL=Y
2. 带并行和压缩的全库导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=full_export_par.dmp LOG=full_export_par.log FULL=Y PARALLEL=4 TABLE_PARALLEL=2 COMPRESS=Y
3. 仅导出对象结构不导出数据 (ROWS=N)
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=full_schema.dmp LOG=full_schema.log FULL=Y ROWS=N
3.3 OWNER 用户模式导出实战
OWNER 模式按照数据库用户维度进行导出,将指定用户下的所有对象导出。
1. 单用户导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=user_hr.dmp LOG=user_hr.log OWNER=HR
2. 多用户导出 (逗号分隔)
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=user_multi.dmp LOG=user_multi.log OWNER=HR,SALES,FINANCE
3. 指定文件大小自动分割
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=user_hr_split.dmp LOG=user_hr_split.log OWNER=HR FILESIZE=500M
3.4 SCHEMAS 模式导出实战
SCHEMAS 模式按照数据库模式 (SCHEMA) 维度进行导出。在达梦数据库中,用户和模式是分离的概念,一个用户可以拥有多个模式。
1. 单模式导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=schema_hr.dmp LOG=schema_hr.log SCHEMAS=HR
2. 多模式导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=schema_multi.dmp LOG=schema_multi.log SCHEMAS=HR,SALES
3. 排除某些对象类型 (如不导出触发器和视图)
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=schema_hr_no_trig.dmp LOG=schema_hr_no_trig.log SCHEMAS=HR TRIGGERS=N VIEWS=N
3.5 TABLES 表级导出实战
TABLES 模式用于导出指定的表及其相关对象 (索引、约束等),是最细粒度的导出模式。
1. 单表导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=table_emp.dmp LOG=table_emp.log TABLES=HR.EMPLOYEE
2. 多表导出
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=tables_multi.dmp LOG=tables_multi.log TABLES=HR.EMPLOYEE,HR.DEPARTMENT,HR.SALARY
3. 带查询条件的表导出 (QUERY 参数)
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=table_emp_cond.dmp LOG=table_emp_cond.log TABLES=HR.EMPLOYEE QUERY="WHERE SALARY > 10000 AND STATUS = 1"
4. 仅导出表结构
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=table_emp_struct.dmp LOG=table_emp_struct.log TABLES=HR.EMPLOYEE ROWS=N INDEXES=Y CONSTRAINTS=Y
四、DM-dexp 逻辑导出进阶优化与最佳实践
4.1 并行导出与性能优化
在大数据量场景下,DM-dexp 逻辑导出的性能优化至关重要。以下是关键优化策略:
1. 合理设置并行度
- PARALLEL 参数控制整体导出并行度,建议设置为 CPU 核心数的 1 到 2 倍。
- TABLE_PARALLEL 参数控制单表导出的并行度,适用于大表场景。
2. 导出性能优化参数组合
./dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/data/dexp_backup FILE=opt_export.dmp LOG=opt_export.log FULL=Y PARALLEL=8 TABLE_PARALLEL=4 COMPRESS=Y BUFFER=1024
3. 性能优化策略对比
| 优化策略 | 参数 | 适用场景 | 预期效果 |
|———-|——|———-|———-|
| 并行导出 | PARALLEL | 多对象导出 | 显著提升整体速度 |
| 表级并行 | TABLE_PARALLEL | 大表导出 | 加速单表数据读取 |
| 压缩导出 | COMPRESS=Y | 磁盘空间有限 | 减小文件体积 |
| 大缓冲区 | BUFFER | 大数据量 | 减少IO次数 |
4.2 常见问题排查与解决方案
在使用 DM-dexp 逻辑导出过程中,可能会遇到以下常见问题:
1. 问题: 连接数据库失败,报错 "网络通信异常"
- 原因: 数据库服务未启动或端口不正确。
- 解决: 检查 dmserver 进程是否运行,确认端口号。
2. 问题: 导出过程中报错 "权限不足"
- 原因: 当前用户没有导出其他用户对象的权限。
- 解决: 授予 EXP_FULL_DATABASE 权限或使用 SYSDBA 用户。
3. 问题: DMP 文件过大导致磁盘空间不足
- 原因: 未设置 FILESIZE 参数导致单文件过大。
- 解决: 设置 FILESIZE 参数自动分割文件。
4. 问题: 导出速度缓慢
- 原因: 未使用并行导出或系统资源不足。
- 解决: 调整 PARALLEL 和 TABLE_PARALLEL 参数。
5. 问题: 导出时中文乱码
- 原因: 客户端与数据库字符集不一致。
- 解决: 确保环境变量设置正确。
# 检查并设置字符集环境变量
echo $LANG
export LANG=zh_CN.UTF-8
export LD_LIBRARY_PATH=/opt/dmdbms/bin:$LD_LIBRARY_PATH
4.3 DM-dexp 逻辑导出最佳实践总结
基于实际项目经验,DM-dexp 逻辑导出的最佳实践总结如下:
1. 导出前规划
- 明确导出范围,选择合适的导出模式。
- 评估数据量,预留足够的磁盘空间。
- 在业务低峰期执行导出操作。
2. 参数配置建议
- 大数据量导出务必启用并行参数。
- 生产环境导出建议启用压缩。
- 设置合理的 FILESIZE 避免单文件过大。
3. 安全性建议
- 敏感数据导出时启用加密功能。
- DMP 文件妥善保管,定期清理过期文件。
- 导出操作使用专用账号而非 SYSDBA。
4. 完整导出脚本示例
#!/bin/bash
# DM-dexp 逻辑导出完整脚本
# 设置环境变量
export DM_HOME=/opt/dmdbms
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
export LANG=zh_CN.UTF-8
# 配置导出参数
DB_USER=SYSDBA
DB_PASS=SYSDBA
DB_HOST=localhost
DB_PORT=5236
EXPORT_DIR=/data/dexp_backup
EXPORT_DATE=$(date +%Y%m%d_%H%M%S)
# 创建导出目录
mkdir -p $EXPORT_DIR
# 执行全库导出
$DM_HOME/bin/dexp $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT DIRECTORY=$EXPORT_DIR FILE=full_$EXPORT_DATE.dmp LOG=full_$EXPORT_DATE.log FULL=Y PARALLEL=4 TABLE_PARALLEL=2 COMPRESS=Y FILESIZE=1024M
# 检查导出结果
if [ $? -eq 0 ]; then
echo "DM-dexp 逻辑导出成功"
ls -lh $EXPORT_DIR/full_$EXPORT_DATE.dmp
else
echo "DM-dexp 逻辑导出失败,请检查日志"
cat $EXPORT_DIR/full_$EXPORT_DATE.log
fi
DM-dexp 逻辑导出作为达梦数据库数据迁移与备份的核心工具,掌握其使用方法对于数据库运维人员至关重要。通过合理选择导出模式、优化参数配置以及遵循最佳实践,可以高效安全地完成各类数据导出任务。
网硕互联帮助中心



评论前必须登录!
注册