注册
达梦数据库物理备份还原速查手册(极简实操版)
技术分享/ 文章详情 /

达梦数据库物理备份还原速查手册(极简实操版)

JC 2025/09/26 286 0 0

核心提示: 以下所有命令行操作,请务务必先切换到 dmdba 用户以获取正确的环境变量:

su - dmdba

第零步:前置检查与准备 (Prerequisite)

备份与恢复的基石是归档模式。 在执行任何备份前,必须确保数据库已开启归档。

1 确认归档状态

方法一:数据库运行时(在线查询)
在 Disql 或任何 SQL 工具中执行:

SELECT NAME, ARCHIVELOG_MODE FROM V$DATABASE; -- 如果 ARCHIVELOG_MODE 列显示 "Y",则表示归档已开启。

方法二:数据库停止时(离线检查)
查看实例的 dm.ini 配置文件,通常位于数据库实例目录中:

# 示例路径:/dmdata/DAMENG/dm.ini grep ARCH_INI /dmdata/DAMENG/dm.ini -- 如果结果为 ARCH_INI = 1,则表示归档已开启。

小贴士: 如果不确定 dm.ini 文件的位置,可使用以下命令查找:
find / -name dm.ini 2>/dev/null

2 (若未开启)一次性开启归档

注意: 开启归档需在 MOUNT 状态下操作,此过程会短暂中断服务。

-- 在 Disql 或管理工具中,按顺序执行以下SQL: -- 1. 将数据库切换到 MOUNT 状态 ALTER DATABASE MOUNT; -- 2. 开启归档模式 ALTER DATABASE ARCHIVELOG; -- 3. 添加本地归档配置 ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=204800'; -- DEST: 归档存放目录,请确保 dmdba 用户对该目录有写权限。 -- FILE_SIZE: 单个归档文件大小(MB),建议1024-2048。 -- SPACE_LIMIT: 归档总空间限制(MB),0为不限制。 -- 4. 打开数据库,恢复正常服务 ALTER DATABASE OPEN;

一、 核心步骤命令速览

  1. 全量热备(在线备份)

    • 前提: 数据库运行中,且已开启归档。
    • 工具: Disql 或达梦管理工具。
    -- 语法:BACKUP DATABASE FULL BACKUPSET '备份集绝对路径'; BACKUP DATABASE FULL BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923';

    说明: 在规范的生产环境中,DBA通常已配置好定时的全量/增量备份作业,无需手动执行。

  2. 停库还原与恢复(离线恢复)

    • 前提: 数据库必须处于关闭状态。
    • 工具: dmrman 命令行工具。
    # 步骤1: 使用备份集还原数据文件 dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923'" # 步骤2: 应用归档日志进行恢复(根据目标选择一种) # 场景A: 恢复到指定时间点 (Point-in-Time Recovery) dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmarch' UNTIL TIME '2025-09-22 23:00:00'" # 场景B: 恢复到最新状态 (应用所有归档) dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmarch'" # 场景C: 仅恢复到备份完成的那个时间点 (不使用外部归档) dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923'"
  3. 完成恢复,更新数据库魔数

    • 目的: 使数据库能够被正常启动,这是恢复流程的最后一步
    dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"

二、 常见场景实战

场景 1:误删数据,整库回退到指定时间点

前提:

  • 有可用的全量或增量备份,如 /dmbackup/DB_DAMENG_FULL_20250923
  • 从备份结束到目标时间点 2025-09-22 23:00:00 的归档日志完整且连续。
  1. 通知业务停写 → 停止数据库服务

    systemctl stop DmServiceDMSERVER
  2. 执行还原与恢复(三步曲)

    # 第一步:基于备份进行还原 (二选一) # 选项A: 基于全量备份还原 dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923'" # 选项B: 基于增量备份还原 (假设增量备份在/dmbackup/inc_bak, 全备在/dmbackup/full_bak) # dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbackup/inc_bak' WITH BACKUPDIR '/dmbackup/full_bak'" # 第二步:基于归档恢复到指定时间点 dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmarch' UNTIL TIME '2025-09-22 23:00:00'" # 第三步:更新魔数,准备上线 dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
  3. 启动数据库并验证数据

    systemctl start DmServiceDMSERVER

    小贴士: 可用 grep ARCH_DEST $(find / -name dmarch.ini 2>/dev/null) 查看归档日志实际路径替换上述脚本中的/dmarch目录。

场景 2:异机恢复(原服务器灾难性损坏)

  1. 新机器准备

    • 安装同版本的达梦数据库软件,无需初始化实例

    • 创建 dmdba 用户,并创建所需目录(如 /dmbackup, /dmarch, /dmdata)。

    • 授权目录: 确保 dmdba 用户对上述目录有完全所有权。

      chown -R dmdba:dinstall /dmbackup /dmarch /dmdata
  2. 拷贝备份与归档
    将原服务器的备份集和所有归档日志,通过网络或介质拷贝到新服务器的对应目录下。

    # 示例:从 old_host 拷贝文件 scp -r dmdba@old_host:/dmbackup/DB_DAMENG_FULL_20250923 /dmbackup/ scp -r dmdba@old_host:/dmarch /dmarch
  3. 执行还原恢复

    # 第一步:还原数据库。因新环境无 dm.ini,使用 TO 参数在指定位置创建新实例结构 dmrman CTLSTMT="RESTORE DATABASE TO '/dmdata/DAMENG' FROM BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923'" # 第二步:恢复数据库到最新状态 dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmarch'" # 第三步:更新魔数 dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
  4. 注册服务并启动

    • 执行服务注册脚本,生成服务文件。

      # 路径可能因安装位置而异 /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dmdata/DAMENG/dm.ini

    小贴士: 可用 find / -name dm_service_installer.sh 2>/dev/null 查找脚本准确路径。

    • 启动实例。

      systemctl start DmServiceDMSERVER

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服