前置说明:如果你已经按照本人的记录《达梦数据库物理备份还原实战:全量+增量+归档恢复》完成了物理备份还原的练习,可以直接从 第三节(创建测试数据) 开始,因为实例和表结构已经就绪。如果是从零开始,请从第一节顺序执行。
逻辑导出会产生 .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,满足要求。
为了避免影响现有业务,新建一个独立实例,端口 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 财务部
ss -tlnp | grep 5239
输出:
LISTEN 0 128 [::]:5239 [::]:* users:(("dmserver",pid=11286,fd=3))
逻辑导出(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
成功导出, 没有出现警告
dexp 支持四种级别的导出,四种级别独立互斥,不能同时存在:
| 级别 | 参数 | 说明 |
|---|---|---|
| 全库 | full=y |
导出整个数据库的所有对象 |
| 按用户 | owner=USER1 |
导出指定用户的所有对象 |
| 按模式 | schemas=TEST |
导出指定模式的所有对象 |
| 按表 | tables=TEST.EMPLOYEE |
导出指定的表 |
首先在数据库中创建目标模式 TEST2。
disql SYSDBA/Dameng123@localhost:5239
在 SQL> 提示符下执行:
CREATE SCHEMA TEST2;
/
注意:在 disql 中,
CREATE SCHEMA属于语句块,输入分号;后还需要输入 斜杠/才能执行。如果提示符变成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 检查端口 |
| 对比项 | 逻辑备份(dexp/dimp) | 物理备份(dmrman) |
|---|---|---|
| 备份内容 | 数据库对象定义(DDL)和数据行(SQL 语句) | 操作系统物理文件(数据文件、控制文件、日志文件) |
| 关注点 | 数据的内容,不关心物理存储位置 | 数据存储在什么位置 |
| 运行方式 | 联机(数据库运行时) | 脱机(数据库需关闭) |
| 恢复粒度 | 可恢复到表、模式、用户级别 | 通常为全库恢复 |
| 恢复速度 | 较慢(需解析 SQL) | 较快(直接覆盖文件) |
| 适用场景 | 数据迁移、特定对象恢复、开发测试环境刷新 | 灾难恢复、全库还原、任意时间点恢复 |
| 对比项 | 逻辑导入导出(dexp/dimp) | DTS 数据迁移工具 |
|---|---|---|
| 界面 | 命令行 | 图形化界面 |
| 适用范围 | 仅限达梦数据库之间 | 支持多种数据源迁移到达梦 |
| 资源占用 | 低,适合资源受限环境 | 较高,需要图形界面和更多内存 |
| 使用场景 | 生产环境无图形界面、网络未放通时最直接高效 | 跨数据库迁移、图形化操作 |
之前尝试用 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
文章
阅读量
获赞
