在日常的数据库运维工作中,数据备份、迁移和恢复是不可避免的常规操作。达梦数据库提供了dexp(逻辑导出)和dimp(逻辑导入)两个命令行工具,分别用于实现数据的逻辑备份和逻辑还原。同时,DIsql作为达梦数据库的交互式查询工具,是日常运维和问题排查的得力助手。
本文将从实战角度出发,系统介绍这四个方面的内容:
1.四种级别的逻辑导出与导入(全库、用户、模式、表)
2.dexp/dimp 常用参数详解
3.实战操作案例
4.密码含特殊字符的登录方法
注意:dexp 和 dimp 是达梦数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录的/dmdbms/bin目录下找到它们。逻辑备份和逻辑还原都是在联机方式下完成的,也就是说数据库服务器正常运行过程中就可以进行备份和还原。
dexp 和 dimp 支持四种级别的操作,四种级别独立互斥,一次只能选择一种:
级别 参数 说明
数据库级 FULL=Y 导出或导入整个数据库中的所有对象
用户级 OWNER=用户名 导出或导入一个或多个用户所拥有的所有对象
模式级 SCHEMAS=模式名 导出或导入一个或多个模式下的所有对象
表级 TABLES=表名 导出或导入一个或多个指定的表或表分区
1.1 全库导出导入(FULL)
适用场景:整库迁移、全库备份。
#全库导出
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=full_db.dmp \
LOG=full_export.log \
FULL=Y \
DIRECTORY=/dm/backup
#全库导入
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/full_db.dmp
LOG=full_import.log
FULL=Y \
DIRECTORY=/dm/backup
执行全库导出时,工具会依次导出 SYSPACKAGE、DBLINK、USER、权限等各类对象。
1.2 用户级导出导入(OWNER)
适用场景:迁移特定用户的所有对象(表、视图、存储过程等)。
#导出用户 backtest 的所有对象
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=user_backtest.dmp \
LOG=user_backtest.log \
OWNER=backtest \
DIRECTORY=/dm/backup
#导入用户 backtest 的所有对象
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/user_backtest.dmp \
LOG=user_backtest_import.log \
OWNER=backtest \
DIRECTORY=/dm/backup
1.3 模式级导出导入(SCHEMAS)
适用场景:迁移特定模式下的所有对象。
#导出模式 backtest
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=schema_backtest.dmp \
LOG=schema_export.log \
SCHEMAS=backtest \
DIRECTORY=/dm/backup
#导入模式 backtest
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/schema_backtest.dmp \
LOG=schema_import.log \
SCHEMAS=backtest \
DIRECTORY=/dm/backup
1.4 表级导出导入(TABLES)
适用场景:只迁移一张或几张特定的表。
#导出单张表
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=table_test.dmp \
LOG=table_export.log \
TABLES=SCOTT.TEST \
DIRECTORY=/dm/backup
#导出多张表(用逗号分隔)
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=tables_multiple.dmp \
LOG=tables_export.log \
TABLES=SCOTT.TEST1,SCOTT.TEST2
DIRECTORY=/dm/backup
2.1 必选参数:USERID
USERID用于指定数据库的连接信息,是 dexp 和 dimp 的必选参数。
基本格式:USERID=用户名/密码@IP:端口
#连接本地数据库(默认端口 5236)
USERID=SYSDBA/Dameng123
#连接远程数据库
USERID=SYSDBA/Dameng123@192.168.1.100:5236
2.2 核心参数
参数 说明 示例
FILE 指定导出/导入文件名 FILE=backup.dmp
LOG 指定日志文件名 LOG=backup.log
DIRECTORY 指定文件存放目录 DIRECTORY=/dm/backup
PARALLEL 并发线程数(默认16) PARALLEL=8
2.3 过滤与选择参数
参数 说明
EXCLUDE 导出/导入时忽略指定的对象种类(如 CONSTRAINTS、INDEXES、ROWS、TRIGGERS 等)
INCLUDE 导出/导入时只包含指定的对象种类
QUERY 对导出表的数据进行过滤(如QUERY=“WHERE ID>100”)
FUZZY_MATCH TABLES 选项是否启用模糊匹配
2.4 导入特有参数
参数 说明
TABLE_EXISTS_ACTION 目标表已存在时的处理方式:SKIP(跳过)、APPEND(追加)、TRUNCATE(清空后导入)、REPLACE(删除后重建)
REMAP_SCHEMA 跨模式导入:源模式:目标模式
IGNORE 忽略创建错误,继续执行
COMPILE 导入后是否编译过程/函数(默认 Y)
2.5 dexp 与 dexpdp / dimp 与 dimpdp 的区别
达梦提供了两种形式的工具:
工具 文件位置 说明
dexp/dimp 文件存放在客户端 常规使用方式
dexpdp/dimpdp 文件存放在服务器端 将客户端命令发给服务器执行
建议:通常情况下,直接使用dexp和dimp即可满足大部分需求。
案例一:全库迁移
场景:将 A 服务器的 DM 数据库完整迁移到 B 服务器。
#=== A 服务器(源端):全库导出 ===
su - dmdba
cd /dmdbms/bin
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/full_migrate.dmp \
LOG=/dm/backup/full_migrate.log \
FULL=Y \
DIRECTORY=/dm/backup \
PARALLEL=4
#=== 将备份文件传输到 B 服务器 ===
scp /dm/backup/full_migrate.dmp dmdba@192.168.1.101:/dm/backup/
#=== B 服务器(目标端):全库导入 ===
su - dmdba
cd /dmdbms/bin
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/full_migrate.dmp \
LOG=/dm/backup/full_migrate_import.log \
FULL=Y \
DIRECTORY=/dm/backup \
PARALLEL=4
案例二:跨用户导入
场景:将SOURCE_USER用户的数据导入到TARGET_USER用户下。
#导出源用户
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=source_user.dmp \
LOG=source_user.log \
OWNER=SOURCE_USER \
DIRECTORY=/dm/backup
#跨用户导入(使用 REMAP_SCHEMA)
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/source_user.dmp \
LOG=target_user_import.log \
REMAP_SCHEMA=SOURCE_USER:TARGET_USER \
DIRECTORY=/dm/backup
注意:跨用户导入必须指定REMAP_SCHEMA参数,否则数据会导入到原来的模式中。
案例三:目标表已存在时的处理
#方式一:清空目标表数据后导入(保留表结构)
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/table_data.dmp \
LOG=import.log \
TABLES=SCOTT.TEST \
TABLE_EXISTS_ACTION=TRUNCATE \
DIRECTORY=/dm/backup
#方式二:删除目标表后重建导入(使用源表结构)
./dimp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=/dm/backup/table_data.dmp \
LOG=import.log \
TABLES=SCOTT.TEST \
TABLE_EXISTS_ACTION=REPLACE \
DIRECTORY=/dm/backup
在实际工作中,数据库密码常常包含@、#、、!等特殊字符。直接使用./disql 用户名/密码@IP:端口的格式连接时,这些特殊字符会被命令行或连接解析器误解析,导致登录失败。
4.1 Linux 环境下的转义方法
Linux 环境下,需要使用双引号将密码包含进来,同时外层再使用单引号进行转义。
格式:./disql 用户名/'"密码"'@IP:端口
示例:
#密码为 abcd@efgh
./disql SYSDBA/'"abcd@efgh"'@localhost:5236
#密码为 1qaz@WSX3edcRFV
./disql SYSDBA/’“1qaz@WSX3edc$RFV”’@localhost:5236
4.2 Windows 环境下的转义方法
Windows 环境下,需要使用三个双引号将密码包含起来。
格式:disql 用户名/""“密码”""@IP:端口
示例:
#密码为 Ditan@321!
disql dmtest/""“Ditan@321!”""@127.0.0.1:5236
4.3 交互式登录(推荐)
如果觉得转义规则记不住,最简单的办法是先进入 DIsql 交互界面,再输入用户名和密码:
./disql
然后根据提示输入用户名和密码即可,无需任何转义处理。
4.4 特殊字符转义对照表
密码示例 Linux转义写法 Windows转义写法
abcd@efgh ./disql SYSDBA/’“abcd@efgh”’@IP:端口 disql SYSDBA/""“abcd@efgh”""@IP:端口
Test#123 ./disql SYSDBA/’“Test#123”’@IP:端口 disql SYSDBA/""“Test#123"”"@IP:端口
abc$123 ./disql SYSDBA/’“abc$123”’@IP:端口 disql SYSDBA/""“abc$123"”"@IP:端口
5.1 查看表结构:DESCRIBE
DESC 表名;DESC 模式名.表名;
5.2 输出查询结果到文件:SPOOL
SPOOL /tmp/query_result.sql
SELECT * FROM EMPL1;
SPOOL OFF
注意:只有执行SPOOL OFF之后,才能在输出文件中看到内容。
5.3 查看帮助:HELP
HELP – 查看所有命令
HELP 命令名 – 查看特定命令的用法
5.4 执行操作系统命令:HOST
HOST ls -la – 在 DIsql 中执行 Linux 命令
HOST – 切换到操作系统 shell,输入 EXIT 返回
5.5 定义变量:DEFINE
DEFINE VAR1 = 100;
SELECT * FROM TEST WHERE ID = &VAR1;
6.1 导出导入级别要一致
导出时使用什么级别,导入时最好使用相同的级别。如果导出是表级别(TABLES),导入时也应该是表级别。
6.2 注意大小写敏感
达梦数据库默认大小写敏感。如果数据库是大小写敏感模式,小写的标识符需要用双引号括起,否则会被自动转换为大写。
6.3 大文件导出建议使用 FILESIZE 参数
当导出文件过大时,可以使用FILESIZE参数配合%U通配符自动分割文件:
./dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236 \
FILE=backup%U.dmp \
LOG=backup%U.log \
FULL=Y \
FILESIZE=2G \
DIRECTORY=/dm/backup
6.4 导入前确认目标库状态
导入操作会修改目标数据库,建议在导入前确认目标库的备份状态,必要时先做一次全库备份。
6.5 使用日志文件记录过程
始终使用LOG参数记录操作日志,便于问题排查和操作审计。
dexp 和 dimp 是达梦数据库日常运维中不可或缺的工具。掌握四种导出导入级别(FULL、OWNER、SCHEMAS、TABLES)和常用参数,可以灵活应对数据迁移、备份恢复等各种场景。同时,熟悉 DIsql 的基本命令和特殊字符密码的登录方法,能够大幅提升日常运维效率。
在实际工作中,建议根据具体需求选择合适的导出导入级别,并养成记录操作日志的好习惯。遇到密码含特殊字符时,牢记 Linux 下用’“密码”’、Windows 下用""“密码”""的转义规则,或者直接使用交互式登录即可。
文章
阅读量
获赞
