DM8数据库的备份主要分为物理备份和逻辑备份两大类,两者适用的场景和命令不同。
物理备份:直接备份数据库的物理文件(如数据文件、日志文件等)。这种方式速度快,是保障数据安全最直接的手段,常用于全库级别的灾难恢复。
逻辑备份:使用
dexp工具将数据库对象(如表、视图、存储过程等)的结构和数据导出为一个独立的文件。这种方式非常灵活,可以指定备份库、用户、模式或表,常用于数据迁移或特定对象的备份。
物理备份命令
物理备份分为冷备(数据库关闭)和热备(数据库运行中)两种。其中,热备需要提前开启数据库的归档模式。
1. 冷备(数据库关闭)
冷备需要在数据库服务关闭的状态下进行,操作简单,不需要开启归档。
使用 dmrman 命令行工具
进入达梦数据库安装目录的 bin 文件夹,执行 dmrman 命令进入交互界面,然后执行备份命令。
# 进入bin目录 cd /dm8/bin # 执行dmrman ./dmrman # 在RMAN交互界面中执行全量备份 RMAN> backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/backup/full_bak';
参数说明:
/dm8/data/DAMENG/dm.ini:数据库实例配置文件路径,请根据实际路径修改。full:执行全量备份。backupset:指定备份集存放的目录。
2. 热备(数据库运行中)
热备在数据库运行时进行,不影响业务,但必须确保数据库已开启归档模式。
开启归档模式(SQL命令行)
在执行任何备份前,务必完成以下检查,否则备份可能失败或无法恢复。
-- 1. 将数据库切换至 Mount 状态 ALTER DATABASE MOUNT; -- 2. 开启归档模式 ALTER DATABASE ARCHIVELOG; -- 3. 添加本地归档目录(请替换 /dm8/arch 为实际路径,需要提前创建并授予 dmdba 用户读写权限。) ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048'; -- 4. 切回 Open 状态 ALTER DATABASE OPEN; -- 验证是否成功(返回 'Y' 表示成功) SELECT ARCH_MODE FROM V$DATABASE;
DEST指定归档日志存放路径,请确保目录已创建且有写入权限。
使用 SQL 命令备份
归档开启后,可以在 disql 命令行工具中直接执行备份命令。
# 1. 登录 disql cd /dm8/bin ./disql SYSDBA/SYSDBA@localhost:5236 # 2. 执行全量备份(备份集存至 /dm8/backup/full) SQL> BACKUP DATABASE FULL BACKUPSET '/dm8/backup/full' COMPRESSED LEVEL 6; # 说明:COMPRESSED LEVEL 6 为中等压缩,可节省磁盘空间 [citation:9] # 3. 执行增量备份(基于上次全量备份,备份变化的数据) # 增量备份命令会自动找到最近的基准备份 SQL> BACKUP DATABASE INCREMENT BACKUPSET '/dm8/backup/inc_20250326';
逻辑备份命令 (dexp)
逻辑备份使用 dexp 工具,数据库必须处于运行状态。dexp 支持四种级别的备份。
| 备份级别 | 参数 | 说明 | 命令示例 |
|---|---|---|---|
| 全库 | FULL=Y | 导出整个数据库的所有对象 | ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=full.dmp LOG=full.log FULL=Y |
| 按用户 | OWNER=<用户名> | 导出一个或多个用户拥有的所有对象 | ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=owner.dmp LOG=owner.log OWNER=USER01 |
| 按模式 | SCHEMAS=<模式名> | 导出一个或多个模式下的所有对象 | ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=schema.dmp LOG=schema.log SCHEMAS=DMHR |
| 按表 | TABLES=<表名> | 导出一张或多张指定的表 | ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup FILE=table.dmp LOG=table.log TABLES=DMHR.EMPLOYEE |
通用命令格式与参数:
./dexp USERID=<用户名>/<密码>@<IP>:<端口> DIRECTORY=<备份目录> FILE=<导出文件名> LOG=<日志文件名> <备份级别参数> # 全库导出(一般用于迁移,生产环境频率较低) ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup/logic FILE=full_db.dmp LOG=full_db.log FULL=Y # 关键表定时导出(例如每天凌晨导出核心业务表) ./dexp SYSDBA/SYSDBA DIRECTORY=/dm8/backup/logic FILE=order_table.dmp LOG=order_table.log \ TABLES="PROD.ORDER_TABLE,PROD.ORDER_DETAIL"
USERID:连接数据库的认证信息,如果是本地数据库,@IP:端口可以省略。DIRECTORY:指定备份文件存放的目录。FILE:指定导出的文件名。LOG:指定记录导出过程的日志文件。
生产环境备份方案选型
生产环境的首要原则是不影响业务,因此首选联机备份(热备)。针对不同场景,方案选择如下:
| 方案类型 | 适用场景 | 核心要求 | 恢复粒度 | 操作复杂度 |
|---|---|---|---|---|
| 物理热备(推荐) | 全库恢复、表空间恢复 | 必须开启归档日志 | 库级、表空间级 | 中,支持脚本自动化 |
| 逻辑备份(辅助) | 误删数据恢复、数据迁移、部分表恢复 | 数据库正常运行即可 | 库级、用户级、模式级、表级 | 低,dexp/dimp命令简单 |
| 物理冷备(备用) | 数据库迁移、重大变更前的保险 | 需停止数据库服务 | 库级 | 低,但会中断业务 |
生产环境建议:以“每周一次物理全量热备 + 每天一次物理增量热备”为主,辅以“关键业务表每日逻辑导出”的双重保险策略 。
生产环境最佳实践建议
备份集有效性检查:定期使用
dmrman中的CHECK BACKUPSET命令验证备份集是否损坏。异地备份:生产环境的备份集务必通过脚本(如
rsync、scp)同步至另一台服务器或对象存储,防止物理硬件损坏。关键参数配置:
COMPRESSED:备份时开启压缩(级别5-6),显著节省磁盘空间 。PARALLEL:多核服务器可设置并行度(如4或8),加快备份速度 。保留周期:建议全量备份保留30天,归档日志保留7-15天(视磁盘空间而定)。
常见生产环境报错及处理
| 报错信息 | 原因分析 | 解决方案 |
|---|---|---|
数据库未开启归档模式 | 执行热备前未配置归档 | 参考“第二步”开启归档,并重启数据库服务生效 |
DMAP服务未启动 | 物理备份或还原时缺少辅助进程 | 切换到 dmdba 用户,执行 DmAPService start |
无效的备份集目录 | 跨平台或跨版本还原 | 确保操作系统位数和数据库大版本一致(Linux到Linux,x64到x64) |
表空间恢复失败 | 尝试恢复系统表空间(如SYSTEM) | 系统表空间只能通过整库恢复来还原 |
备份恢复是数据库运维的“生命线”,建议在生产环境实施前,先在测试环境完整演练一遍备份和恢复流程。