核心提示: 以下所有命令行操作,请务务必先切换到 dmdba
用户以获取正确的环境变量:
su - dmdba
备份与恢复的基石是归档模式。 在执行任何备份前,必须确保数据库已开启归档。
方法一:数据库运行时(在线查询)
在 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
注意: 开启归档需在 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;
全量热备(在线备份)
Disql
或达梦管理工具。-- 语法:BACKUP DATABASE FULL BACKUPSET '备份集绝对路径';
BACKUP DATABASE FULL BACKUPSET '/dmbackup/DB_DAMENG_FULL_20250923';
说明: 在规范的生产环境中,DBA通常已配置好定时的全量/增量备份作业,无需手动执行。
停库还原与恢复(离线恢复)
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'"
完成恢复,更新数据库魔数
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
前提:
/dmbackup/DB_DAMENG_FULL_20250923
。2025-09-22 23:00:00
的归档日志完整且连续。通知业务停写 → 停止数据库服务
systemctl stop DmServiceDMSERVER
执行还原与恢复(三步曲)
# 第一步:基于备份进行还原 (二选一)
# 选项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"
启动数据库并验证数据
systemctl start DmServiceDMSERVER
小贴士: 可用
grep ARCH_DEST $(find / -name dmarch.ini 2>/dev/null)
查看归档日志实际路径替换上述脚本中的/dmarch
目录。
新机器准备
安装同版本的达梦数据库软件,无需初始化实例。
创建 dmdba
用户,并创建所需目录(如 /dmbackup
, /dmarch
, /dmdata
)。
授权目录: 确保 dmdba
用户对上述目录有完全所有权。
chown -R dmdba:dinstall /dmbackup /dmarch /dmdata
拷贝备份与归档
将原服务器的备份集和所有归档日志,通过网络或介质拷贝到新服务器的对应目录下。
# 示例:从 old_host 拷贝文件
scp -r dmdba@old_host:/dmbackup/DB_DAMENG_FULL_20250923 /dmbackup/
scp -r dmdba@old_host:/dmarch /dmarch
执行还原恢复
# 第一步:还原数据库。因新环境无 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"
注册服务并启动
执行服务注册脚本,生成服务文件。
# 路径可能因安装位置而异
/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
文章
阅读量
获赞