数据备份
注意
备份还原库生产环境不可在原实例还原
备份还原表空间必须在原实例,不然会报错
还原需要关闭数据库服务
备份库
初始化备份库
bin/dminit PATH=/home/dmdba/dmdatabak/ PAGE_SIZE=16 EXTENT_SIZE=16 LOG_SIZE=2048 PORT_NUM=5237 CASE_SENSITIVE=N CHARSET=1 DB_NAME=DAMENGBAK SYSDBA_PWD="Shingi@2023" SYSAUDITOR_PWD="Shingi@2023"- 注册service
root 用户
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVERBAK -dm_ini /home/dmdba/dmdatabak/DAMENGBAK/dm.ini备份数据库
/opt/dmdbms/bin/disql SYSDBA/'"Shingi@2023"'@localhost:5236 -e "BACKUP DATABASE FULL BACKUPSET '/home/dmdba/backup/cs'"还原数据库
/opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdatabak/DAMENGBAK/dm.ini' FROM BACKUPSET '/home/dmdba/backup/DB_DAMENG_FULL_2025_11_11_13_49_52'"- 还原
/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdatabak/DAMENGBAK/dm.ini' WITH ARCHIVEDIR '/home/dmdba/backup'"- 更新数据库db_magic
/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdatabak/DAMENGBAK/dm.ini' UPDATE DB_MAGIC";- 启动备份实例
备份表空间
目前恢复会没有数据
备份
/opt/dmdbms/bin/disql SYSDBA/'"Shingi@2023"'@localhost:5236 -e "BACKUP TABLESPACE MAIN BACKUPSET '/home/dmdba/backup/cs1'"还原表空间
还原后数据没有恢复
恢复时需要指定 UNTIL TIME
select * from v$backupset;
- 校验备份集
/opt/dmdbms/bin/dmrman CTLSTMT="CHECK BACKUPSET '/home/dmdba/backup/cs1'"- 还原
/opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dmdba/backup/cs1' "- 恢复
/opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdata/DAMENG/dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR '/home/dmdba/backup/' "BACKUP TABLESPACE CS backupname cs backupset 'cs1'
select backup_name,backup_path from v$backupset;- 备份脚本
#!/bin/bash
# 达梦数据库自动备份脚本
# 说明:备份文件按时间命名,自动清理14天前的旧备份
# === 基本配置 ===
BACKUP_DIR="/home/dmdba/backup"
TABLESPACE="ZCGL" # 表空间名称
# === 生成带时间戳的备份文件名 ===
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${TABLESPACE}_${TIMESTAMP}"
# === 执行数据库全备 ===
echo "[$(date '+%F %T')] 开始备份表空间${TABLESPACE}..."
/home/dmdba/dmdbms/bin/disql SYSDBA/'"Shingi@2023"'@localhost:5236 -e "BACKUP TABLESPACE ${TABLESPACE} BACKUPSET '${BACKUP_FILE}'"
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "[$(date '+%F %T')] ✅ 备份完成:${BACKUP_FILE}"
else
echo "[$(date '+%F %T')] ❌ 备份失败!错误码:${RETVAL}"
exit 1
fi
# === 自动清理14天前的旧备份 ===
echo "[$(date '+%F %T')] 清理14天前的旧备份..."
find "${BACKUP_DIR}" -type f -name "$TABLESPACE_*" -mtime +14 -exec rm -f {} \;
echo "[$(date '+%F %T')] ✅ 旧备份清理完成"数据库备份需要先将数据库进行归档设置
然后设置备份
归档
SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=归档目标,file_size=64,space_limit=0';
归档目标 : 数据存储目录(.DBF 所在目录) 例:/home/dmdba/dmdata/DAMENG
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database;
select NAME from v$archived_log;
全备
SQL> backup database full backupset '/dm7/backup/full_bak';
/dm7/backup/full_bak : 备份存储目录(需要dmddba:dinstall 权限)
DM8老版恢复
重启服务
数据库处于mount状态,手动open
SQL> restore tablespace zfw_ww_2 from backupset '/home/dmdba/dmdata/DAMENG/bak/DB_DAMENG_FULL_2021_06_09_10_56_19';
SQL> alter database open;
SQL> alter tablespace zfw_ww_2 online;
select NAME from v$archived_log;
alter database mount;
alter database add archivelog 'type=local,dest=/home/dmdba/backup,file_size=64,space_limit=0';
alter database archivelog;
alter database open;
select name,status$,arch_mode from v$database;
select NAME from v$archived_log;