达梦数据库备份恢复

一、为什么要重视数据库备份?

数据是企业的核心资产。一次误操作、硬件故障或勒索软件攻击,都可能导致数据永久丢失。达梦DM8提供了完善的备份恢复机制,包括物理备份、逻辑备份、增量备份、归档备份等多种方式。

二、达梦备份方式概览

  • 物理备份:使用dmrman工具,备份整个数据库文件,速度快

  • 逻辑备份:使用dexp/dimp工具,备份/恢复指定对象(表、模式等)

  • 归档备份:基于归档日志的增量备份,实现任意时间点恢复

三、开启归档模式

归档模式是实现增量备份和时间点恢复的前提:

# 1. 修改dm.ini配置文件
su - dmdba
vi /dm/data/DAMENG/dm.ini
# 修改以下参数:
ARCH_INI = 1
# 如果没有则添加
# 2. 创建归档配置文件
cat > /dm/data/DAMENG/dmarch.ini  SELECT ARCH_MODE, STATUS FROM v$database;
SQL> SELECT * FROM v$arch_status;

四、物理备份(dmrman)

4.1 全量备份

# 基本全量备份
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL 
        BACKUPSET '/dm/backup/full_$(date +%Y%m%d)'"
# 全量备份并压缩
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL 
        BACKUPSET '/dm/backup/full_$(date +%Y%m%d)' COMPRESSED LEVEL 6"

4.2 增量备份

# 基于上次全量备份做增量
./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' INCREMENT 
        WITH BACKUPDIR '/dm/backup'
        BACKUPSET '/dm/backup/incr_$(date +%Y%m%d_%H%M)'"

4.3 备份脚本(生产推荐)

#!/bin/bash
# dm_backup.sh - 达梦数据库自动备份脚本
BACKUP_DIR=/dm/backup
DATE=$(date +%Y%m%d)
LOG_FILE=/var/log/dm_backup.log
# 保留最近30天全量备份,删除旧的
find ${BACKUP_DIR} -name "full_*" -mtime +30 -exec rm -rf {} \;
# 周日做全量备份,日常做增量
if [ $(date +%u) -eq 7 ]; then
    su - dmdba -c "/opt/dmdbms/bin/dmrman CTLSTMT="
        BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL 
        BACKUPSET '${BACKUP_DIR}/full_${DATE}' 
        COMPRESSED LEVEL 6""
    echo "[$(date)] Full backup done" >> ${LOG_FILE}
else
    su - dmdba -c "/opt/dmdbms/bin/dmrman CTLSTMT="
        BACKUP DATABASE '/dm/data/DAMENG/dm.ini' INCREMENT 
        WITH BACKUPDIR '${BACKUP_DIR}'
        BACKUPSET '${BACKUP_DIR}/incr_${DATE}_\$(date +%H%M)'""
    echo "[$(date)] Incremental backup done" >> ${LOG_FILE}
fi

五、逻辑备份(dexp/dimp)

5.1 导出(dexp)

# 全库导出
./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/fulldb.dmp LOG=fulldb.log FULL=Y DIRECTORY=/dm/backup/dexp
# 按用户导出
./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/app.dmp LOG=app.log OWNER=APP_USER
# 按表导出
./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/tables.dmp TABLES=user_table,order_table
# 导出DDL(不包含数据)
./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/schema.sql ROWS=N

5.2 导入(dimp)

# 全库导入
./dimp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/fulldb.dmp FULL=Y
# 按用户导入
./dimp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/app.dmp FROM_USER=APP_USER TO_USER=APP_USER

六、恢复操作

6.1 全量恢复

# 恢复前的准备工作
systemctl stop DmServiceDMSERVER
# 使用dmrman恢复
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'"
# 重启数据库
systemctl start DmServiceDMSERVER

6.2 时间点恢复(PITR)

这是应对"误删数据"场景最重要的恢复方式:

# 恢复到指定时间点
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'
        UNTIL TIME '2026-03-01 14:30:00'"
# 恢复到指定LSN
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'
        UNTIL LSN 4398046511104"

七、容灾方案

7.1 主备同步(DW模式)

# 主库配置(dm.ini)
ARCH_INI = 1
MAL_INI = 1
# 备库配置
# 使用dmwatcher和dmmontor实现自动切换
# 配置主备同步后,备库执行
./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' 
        FROM BACKUPSET '/dm/backup/full_20260301'"
./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' 
        UPDATE DB_MAGIC"

7.2 异地灾备

使用rsync或scp将备份文件传输到异地服务器:

#!/bin/bash
# 备份同步脚本
rsync -avz --progress /dm/backup/ backup@remote-server:/dm/backup/
# 删除远程7天前的备份
ssh backup@remote-server "find /dm/backup -name 'full_*' -mtime +7 -exec rm -rf {} \;"

八、备份恢复的验证

定期验证备份文件可用性非常重要,否则灾难发生时才发现备份不可用就晚了:

# 每月至少做一次恢复演练
# 在测试环境执行:
./dmserver /dm/data/DAMENG/dm.ini
./dmrman CTLSTMT="CHECK BACKUPSET '/dm/backup/full_20260301'"
./disql SYSDBA/SYSDBA@localhost:5236
SQL> SELECT COUNT(*) FROM important_table;

九、总结

备份策略的核心原则:3-2-1原则——至少3份副本,2种不同介质,1份异地存储。达梦DM8的备份恢复体系非常完善,关键是运维人员要建立定期备份和恢复演练的机制。

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

This website uses cookies to analyze site traffic and improve your experience. By continuing to use this site, you consent to our use of cookies.