本文档详细介绍DM数据库联机备份与脱机备份的实战操作,包括备份原理、备份策略规划、联机备份操作、脱机备份操作、备份验证等内容,风哥教程参考DM官方文档《DM8备份与还原》手册,适合DBA人员进行日常备份管理。
Part01-基础概念与理论知识
1.1 DM数据库备份的基本概念
DM数据库备份是指将数据库的数据文件、控制文件、日志文件等重要文件复制到备份介质中,以便在数据库发生故障时能够恢复数据。备份是数据库运维中最基础也是最重要的工作之一。
DM数据库备份的特点:
- 支持联机备份和脱机备份两种方式
- 支持全量备份、增量备份和差异备份
- 支持数据库级、表空间级、表级、归档级备份
- 备份文件以.bak为后缀
- 支持压缩备份和加密备份
1.2 DM数据库联机备份原理
DM数据库联机备份(Online Backup)是指在数据库正常运行状态下进行的备份操作,也称为热备份。联机备份不需要停止数据库服务,不会影响业务系统的正常运行。
联机备份的工作原理:
- SCN机制:备份开始时记录当前系统变更号(SCN)
- 数据块一致性:通过读取数据块时加锁保证一致性
- 归档日志配合:需要开启归档模式,备份期间产生的变更记录在归档日志中
- 增量追踪:记录备份后修改的数据块,用于增量备份
风哥提示:联机备份是生产环境中最常用的备份方式,必须在归档模式下进行。建议在业务低峰期执行全库备份,减少对系统性能的影响。
1.3 DM数据库脱机备份原理
DM数据库脱机备份(Offline Backup)是指在数据库关闭状态下进行的备份操作,也称为冷备份。脱机备份需要停止数据库服务,直接复制数据文件进行备份。
脱机备份的特点:
- 数据一致性:数据库关闭时数据文件处于一致状态
- 无需归档:不需要开启归档模式
- 简单可靠:直接复制文件,操作简单
- 业务中断:需要停止数据库,影响业务运行
Part02-生产环境规划与建议
2.1 DM数据库备份策略规划
生产环境DM数据库备份策略规划要点:
# DM数据库备份策略规划
#
# 备份类型选择
– 全库备份:每周执行1-2次
– 增量备份:每天执行
– 归档备份:每天执行或实时备份
#
# 备份时间规划
– 全库备份:周日 02:00-04:00
– 增量备份:每天凌晨 01:00
– 归档备份:每小时执行
#
# 备份保留策略
– 全库备份:保留4周 风哥提示:
– 增量备份:保留2周
– 归档日志:保留7天
#
# 备份类型选择
– 全库备份:每周执行1-2次
– 增量备份:每天执行
– 归档备份:每天执行或实时备份
#
# 备份时间规划
– 全库备份:周日 02:00-04:00
– 增量备份:每天凌晨 01:00
– 归档备份:每小时执行
#
# 备份保留策略
– 全库备份:保留4周 风哥提示:
– 增量备份:保留2周
– 归档日志:保留7天
2.2 DM数据库备份存储规划
DM数据库备份存储规划建议:
- 本地存储:备份到本地磁盘,快速恢复
- 远程存储:备份到远程服务器或NAS,防止本地灾难
- 异地存储:备份到异地数据中心,满足灾备要求
- 存储容量:预留3-6个月的备份存储空间
# 备份存储路径规划
/dm/backup/full/ # 全库备份目录
/dm/backup/incremental/ # 增量备份目录
/dm/backup/archivelog/ # 归档备份目录
/dm/backup/script/ # 备份脚本目录
/dm/backup/log/ # 备份日志目录
# 存储容量估算(以500GB数据库为例)
– 全库备份:500GB * 2(压缩后约250GB)
– 增量备份:每天约10-50GB
– 归档日志:每天约5-20GB
– 月度需求:约1TB存储空间
/dm/backup/full/ # 全库备份目录
/dm/backup/incremental/ # 增量备份目录
/dm/backup/archivelog/ # 归档备份目录
/dm/backup/script/ # 备份脚本目录
/dm/backup/log/ # 备份日志目录
# 存储容量估算(以500GB数据库为例)
– 全库备份:500GB * 2(压缩后约250GB)
– 增量备份:每天约10-50GB
– 归档日志:每天约5-20GB
– 月度需求:约1TB存储空间
2.3 DM数据库备份调度规划
生产环境DM数据库备份调度规划:
备份调度建议:
- 周日 02:00 执行全库备份
- 周一至周六 01:00 执行增量备份
- 每小时执行归档日志备份
- 每月1日执行全库备份并长期保留
学习交流加群风哥微信: itpux-com
Part03-生产环境项目实施方案
3.1 DM数据库联机备份操作
3.1.1 检查归档模式
# 使用disql登录数据库
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 检查归档模式
SQL> select arch_mode from v$database;
行号 ARCH_MODE
———- ———
1 Y
# 检查归档配置
SQL> select arch_name, arch_type, arch_dest from v$dm_arch_ini;
行号 ARCH_NAME ARCH_TYPE ARCH_DEST
———- ———- ——— —————-
1 ARCHIVE_LOCAL1 LOCAL /dm/arch
# 如果未开启归档,需要开启归档模式
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database open;
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 检查归档模式
SQL> select arch_mode from v$database;
行号 ARCH_MODE
———- ———
1 Y
# 检查归档配置
SQL> select arch_name, arch_type, arch_dest from v$dm_arch_ini;
行号 ARCH_NAME ARCH_TYPE ARCH_DEST
———- ———- ——— —————-
1 ARCHIVE_LOCAL1 LOCAL /dm/arch
# 如果未开启归档,需要开启归档模式
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database open;
3.1.2 执行联机全库备份
# 使用disql执行全库备份
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 执行全库备份到指定路径
SQL> backup database full to ‘/dm/backup/full/backup_full_20250409.bak’;
操作已执行
已用时间: 00:05:32.234
# 查看备份信息
SQL> select backup_name, backup_path, backup_time, object_name
from v$backupset
where backup_name like ‘%FULL%’
order by backup_time desc;
行号 BACKUP_NAME BACKUP_PATH BACKUP_TIME OBJECT_NAME 学习交流加群风哥QQ113257174
———- ———————— ———————————- ——————– ———–
1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 FGEDUDB
# 查看备份集详细信息
SQL> select * from v$backupset where backup_name=’DB_FULL_20250409_020015′;
行号 BACKUP_ID BACKUP_NAME BACKUP_PATH BACKUP_TIME BACKUP_TYPE
———- ——— ———————— ———————————- ——————– ———–
1 1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 1
行号 OBJECT_NAME OBJECT_TYPE ENCRYPT_TYPE COMPRESS_TYPE LEVEL PARENT_BACKUP_ID
———- ———– ———– ———— ————- —– —————-
1 FGEDUDB 1 0 0 0 -1
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 执行全库备份到指定路径
SQL> backup database full to ‘/dm/backup/full/backup_full_20250409.bak’;
操作已执行
已用时间: 00:05:32.234
# 查看备份信息
SQL> select backup_name, backup_path, backup_time, object_name
from v$backupset
where backup_name like ‘%FULL%’
order by backup_time desc;
行号 BACKUP_NAME BACKUP_PATH BACKUP_TIME OBJECT_NAME 学习交流加群风哥QQ113257174
———- ———————— ———————————- ——————– ———–
1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 FGEDUDB
# 查看备份集详细信息
SQL> select * from v$backupset where backup_name=’DB_FULL_20250409_020015′;
行号 BACKUP_ID BACKUP_NAME BACKUP_PATH BACKUP_TIME BACKUP_TYPE
———- ——— ———————— ———————————- ——————– ———–
1 1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 1
行号 OBJECT_NAME OBJECT_TYPE ENCRYPT_TYPE COMPRESS_TYPE LEVEL PARENT_BACKUP_ID
———- ———– ———– ———— ————- —– —————-
1 FGEDUDB 1 0 0 0 -1
3.1.3 执行联机表空间备份
# 查看表空间信息
SQL> select tablespace_name, status from dba_tablespaces;
行号 TABLESPACE_NAME STATUS
———- ————— ——-
1 SYSTEM ONLINE
2 ROLL ONLINE
3 TEMP ONLINE
4 MAIN ONLINE
5 FGEDUTBS ONLINE
# 备份指定表空间
SQL> backup tablespace fgedutbs to ‘/dm/backup/full/tbs_fgedutbs_20250409.bak’;
操作已执行
已用时间: 00:01:15.456
# 查看表空间备份信息
SQL> select backup_name, object_name, backup_time
from v$backupset
where object_name=’FGEDUTBS’;
行号 BACKUP_NAME OBJECT_NAME BACKUP_TIME
———- —————————- ———– ——————–
1 TBS_FGEDUTBS_20250409_021530 FGEDUTBS 2025-04-09 02:15:30
SQL> select tablespace_name, status from dba_tablespaces;
行号 TABLESPACE_NAME STATUS
———- ————— ——-
1 SYSTEM ONLINE
2 ROLL ONLINE
3 TEMP ONLINE
4 MAIN ONLINE
5 FGEDUTBS ONLINE
# 备份指定表空间
SQL> backup tablespace fgedutbs to ‘/dm/backup/full/tbs_fgedutbs_20250409.bak’;
操作已执行
已用时间: 00:01:15.456
# 查看表空间备份信息
SQL> select backup_name, object_name, backup_time
from v$backupset
where object_name=’FGEDUTBS’;
行号 BACKUP_NAME OBJECT_NAME BACKUP_TIME
———- —————————- ———– ——————–
1 TBS_FGEDUTBS_20250409_021530 FGEDUTBS 2025-04-09 02:15:30
3.2 DM数据库脱机备份操作
3.2.1 使用DMRMAN进行脱机备份
# 停止数据库服务
$ systemctl stop DmServicefgedudb
# 或者使用disql关闭数据库 更多视频教程www.fgedu.net.cn
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
SQL> shutdown immediate;
# 启动DMRMAN工具
$ dmrman
dmrman V8
# 执行脱机全库备份
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to ‘/dm/backup/offline/backup_offline_20250409.bak’;
backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to ‘/dm/backup/offline/backup_offline_20250409.bak’;
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]’s cur_lsn[45678], file_lsn[45678]
backup successfully!
time used: 00:03:25.123
# 查看备份集信息
RMAN> check backupset ‘/dm/backup/offline/backup_offline_20250409.bak’;
check backupset ‘/dm/backup/offline/backup_offline_20250409.bak’;
file dm.key not found, use default license!
backupset directory: /dm/backup/offline/backup_offline_20250409.bak
backupset name: DB_OFFLINE_20250409_030000
backup type: full
backup time: 2025-04-09 03:00:00
backup successfully!
$ systemctl stop DmServicefgedudb
# 或者使用disql关闭数据库 更多视频教程www.fgedu.net.cn
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
SQL> shutdown immediate;
# 启动DMRMAN工具
$ dmrman
dmrman V8
# 执行脱机全库备份
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to ‘/dm/backup/offline/backup_offline_20250409.bak’;
backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to ‘/dm/backup/offline/backup_offline_20250409.bak’;
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]’s cur_lsn[45678], file_lsn[45678]
backup successfully!
time used: 00:03:25.123
# 查看备份集信息
RMAN> check backupset ‘/dm/backup/offline/backup_offline_20250409.bak’;
check backupset ‘/dm/backup/offline/backup_offline_20250409.bak’;
file dm.key not found, use default license!
backupset directory: /dm/backup/offline/backup_offline_20250409.bak
backupset name: DB_OFFLINE_20250409_030000
backup type: full
backup time: 2025-04-09 03:00:00
backup successfully!
3.2.2 使用操作系统命令进行脱机备份
# 停止数据库
$ systemctl stop DmServicefgedudb
# 创建备份目录
$ mkdir -p /dm/backup/offline/os_backup_20250409
# 复制数据文件
$ cp -r /dm/fgdata/fgedudb/* /dm/backup/offline/os_backup_20250409/
# 验证备份文件
$ ls -lh /dm/backup/offline/os_backup_20250409/
total 512M
drwxr-xr-x 2 dmdba dinstall 4.0K Apr 9 03:30 .
drwxr-xr-x 3 dmdba dinstall 4.0K Apr 9 03:00 ..
-rw-r–r– 1 dmdba dinstall 128M Apr 9 03:15 SYSTEM.DBF
-rw-r–r– 1 dmdba dinstall 256M Apr 9 03:15 MAIN.DBF
-rw-r–r– 1 dmdba dinstall 64M Apr 9 03:15 ROLL.DBF
-rw-r–r– 1 dmdba dinstall 64M Apr 9 03:15 TEMP.DBF 更多学习教程公众号风哥教程itpux_com
-rw-r–r– 1 dmdba dinstall 32K Apr 9 03:15 dm.ctl
-rw-r–r– 1 dmdba dinstall 2.0K Apr 9 03:15 dm.ini
# 启动数据库
$ systemctl start DmServicefgedudb
$ systemctl stop DmServicefgedudb
# 创建备份目录
$ mkdir -p /dm/backup/offline/os_backup_20250409
# 复制数据文件
$ cp -r /dm/fgdata/fgedudb/* /dm/backup/offline/os_backup_20250409/
# 验证备份文件
$ ls -lh /dm/backup/offline/os_backup_20250409/
total 512M
drwxr-xr-x 2 dmdba dinstall 4.0K Apr 9 03:30 .
drwxr-xr-x 3 dmdba dinstall 4.0K Apr 9 03:00 ..
-rw-r–r– 1 dmdba dinstall 128M Apr 9 03:15 SYSTEM.DBF
-rw-r–r– 1 dmdba dinstall 256M Apr 9 03:15 MAIN.DBF
-rw-r–r– 1 dmdba dinstall 64M Apr 9 03:15 ROLL.DBF
-rw-r–r– 1 dmdba dinstall 64M Apr 9 03:15 TEMP.DBF 更多学习教程公众号风哥教程itpux_com
-rw-r–r– 1 dmdba dinstall 32K Apr 9 03:15 dm.ctl
-rw-r–r– 1 dmdba dinstall 2.0K Apr 9 03:15 dm.ini
# 启动数据库
$ systemctl start DmServicefgedudb
3.3 DM数据库备份验证操作
3.3.1 验证备份集完整性
# 使用disql验证备份集
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 验证备份集
SQL> check backupset ‘/dm/backup/full/backup_full_20250409.bak’;
操作已执行
已用时间: 00:00:15.234
# 查看备份集详细信息
SQL> select backup_name, backup_path, backup_time, backup_type,
encrypt_type, compress_type, level
from v$backupset
where backup_path=’/dm/backup/full/backup_full_20250409.bak’;
行号 BACKUP_NAME BACKUP_PATH BACKUP_TIME BACKUP_TYPE ENCRYPT_TYPE COMPRESS_TYPE LEVEL
———- ———————— ———————————- ——————– ———– ———— ————- —–
1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 1 0 0 0
# 查看备份文件列表
SQL> select file_name, file_size from v$backupset_file
where backup_id=1;
行号 FILE_NAME FILE_SIZE
———- ———— ———–
1 SYSTEM.DBF 134217728
2 ROLL.DBF 67108864
3 MAIN.DBF 268435456 from DB视频:www.itpux.com
4 TEMP.DBF 67108864
5 dm.ctl 32768
$ disql SYSDBA/SYSDBA@192.168.1.10:5236
# 验证备份集
SQL> check backupset ‘/dm/backup/full/backup_full_20250409.bak’;
操作已执行
已用时间: 00:00:15.234
# 查看备份集详细信息
SQL> select backup_name, backup_path, backup_time, backup_type,
encrypt_type, compress_type, level
from v$backupset
where backup_path=’/dm/backup/full/backup_full_20250409.bak’;
行号 BACKUP_NAME BACKUP_PATH BACKUP_TIME BACKUP_TYPE ENCRYPT_TYPE COMPRESS_TYPE LEVEL
———- ———————— ———————————- ——————– ———– ———— ————- —–
1 DB_FULL_20250409_020015 /dm/backup/full/backup_full_20250409.bak 2025-04-09 02:00:15 1 0 0 0
# 查看备份文件列表
SQL> select file_name, file_size from v$backupset_file
where backup_id=1;
行号 FILE_NAME FILE_SIZE
———- ———— ———–
1 SYSTEM.DBF 134217728
2 ROLL.DBF 67108864
3 MAIN.DBF 268435456 from DB视频:www.itpux.com
4 TEMP.DBF 67108864
5 dm.ctl 32768
风哥提示:备份验证是备份管理中不可或缺的环节,建议每次备份后都进行验证,确保备份集可用。定期检查备份文件的可恢复性。
Part04-生产案例与实战讲解
4.1 DM数据库全库备份实战案例
以下是一个完整的生产环境全库备份案例:
#!/bin/bash
# full_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 设置环境变量
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
# 配置参数
DB_HOST=192.168.1.10
DB_PORT=5236
DB_USER=SYSDBA
DB_PASS=SYSDBA
BACKUP_DIR=/dm/backup/full
LOG_DIR=/dm/backup/log
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME=DB_FULL_${DATE}
# 创建备份目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录开始时间
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 开始全库备份…” >> $LOG_DIR/full_backup_${DATE}.log
# 执行全库备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_backup_${DATE}.log 2>&1
backup database full to ‘$BACKUP_DIR/${BACKUP_NAME}.bak’ compressed;
EOF
# 检查备份结果
if [ $? -eq 0 ]; then
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 全库备份成功” >> $LOG_DIR/full_backup_${DATE}.log
# 验证备份集
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_backup_${DATE}.log 2>&1
check backupset ‘$BACKUP_DIR/${BACKUP_NAME}.bak’;
EOF
# 清理过期备份(保留30天)
find $BACKUP_DIR -name “DB_FULL_*.bak” -mtime +30 -delete
find $LOG_DIR -name “full_backup_*.log” -mtime +30 -delete
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 备份任务完成” >> $LOG_DIR/full_backup_${DATE}.log
else
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 全库备份失败” >> $LOG_DIR/full_backup_${DATE}.log
fi
# full_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 设置环境变量
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
# 配置参数
DB_HOST=192.168.1.10
DB_PORT=5236
DB_USER=SYSDBA
DB_PASS=SYSDBA
BACKUP_DIR=/dm/backup/full
LOG_DIR=/dm/backup/log
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME=DB_FULL_${DATE}
# 创建备份目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录开始时间
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 开始全库备份…” >> $LOG_DIR/full_backup_${DATE}.log
# 执行全库备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_backup_${DATE}.log 2>&1
backup database full to ‘$BACKUP_DIR/${BACKUP_NAME}.bak’ compressed;
EOF
# 检查备份结果
if [ $? -eq 0 ]; then
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 全库备份成功” >> $LOG_DIR/full_backup_${DATE}.log
# 验证备份集
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_backup_${DATE}.log 2>&1
check backupset ‘$BACKUP_DIR/${BACKUP_NAME}.bak’;
EOF
# 清理过期备份(保留30天)
find $BACKUP_DIR -name “DB_FULL_*.bak” -mtime +30 -delete
find $LOG_DIR -name “full_backup_*.log” -mtime +30 -delete
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 备份任务完成” >> $LOG_DIR/full_backup_${DATE}.log
else
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] 全库备份失败” >> $LOG_DIR/full_backup_${DATE}.log
fi
4.2 DM数据库表空间备份实战
# 业务表空间备份脚本
#!/bin/bash
# tablespace_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
DB_USER=SYSDBA
DB_PASS=SYSDBA
DB_HOST=192.168.1.10
DB_PORT=5236
BACKUP_DIR=/dm/backup/tablespace
DATE=$(date +%Y%m%d)
# 备份业务表空间
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF backup tablespace fgedutbs to '$BACKUP_DIR/tbs_fgedutbs_${DATE}.bak' compressed; backup tablespace fgedu_idx to '$BACKUP_DIR/tbs_fgedu_idx_${DATE}.bak' compressed; EOF # 输出结果 [2025-04-09 02:30:00] 开始备份表空间FGEDUTBS 操作已执行 已用时间: 00:02:15.123 [2025-04-09 02:32:15] 开始备份表空间FGEDU_IDX 操作已执行 已用时间: 00:01:45.678 [2025-04-09 02:34:01] 表空间备份完成
#!/bin/bash
# tablespace_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
DB_USER=SYSDBA
DB_PASS=SYSDBA
DB_HOST=192.168.1.10
DB_PORT=5236
BACKUP_DIR=/dm/backup/tablespace
DATE=$(date +%Y%m%d)
# 备份业务表空间
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF backup tablespace fgedutbs to '$BACKUP_DIR/tbs_fgedutbs_${DATE}.bak' compressed; backup tablespace fgedu_idx to '$BACKUP_DIR/tbs_fgedu_idx_${DATE}.bak' compressed; EOF # 输出结果 [2025-04-09 02:30:00] 开始备份表空间FGEDUTBS 操作已执行 已用时间: 00:02:15.123 [2025-04-09 02:32:15] 开始备份表空间FGEDU_IDX 操作已执行 已用时间: 00:01:45.678 [2025-04-09 02:34:01] 表空间备份完成
4.3 DM数据库备份自动化脚本
#!/bin/bash
# dm_backup_scheduler.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
# 备份配置
BACKUP_BASE=/dm/backup
FULL_BACKUP_DIR=$BACKUP_BASE/full
INCR_BACKUP_DIR=$BACKUP_BASE/incremental
ARCH_BACKUP_DIR=$BACKUP_BASE/archivelog
LOG_DIR=$BACKUP_BASE/log
DB_HOST=192.168.1.10
DB_PORT=5236
DB_USER=SYSDBA
DB_PASS=SYSDBA
# 创建目录
mkdir -p $FULL_BACKUP_DIR $INCR_BACKUP_DIR $ARCH_BACKUP_DIR $LOG_DIR
# 日志函数
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_DIR/backup_scheduler.log
}
# 判断是否为全量备份日(周日)
is_full_backup_day() {
weekday=$(date +%w)
if [ “$weekday” = “0” ]; then
return 0
else
return 1
fi
}
# 执行备份
if is_full_backup_day; then
log “开始执行全量备份…”
DATE=$(date +%Y%m%d_%H%M%S)
# 全量备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_${DATE}.log 2>&1
backup database full to ‘$FULL_BACKUP_DIR/DB_FULL_${DATE}.bak’ compressed;
EOF
log “全量备份完成”
else
log “开始执行增量备份…”
DATE=$(date +%Y%m%d_%H%M%S)
# 增量备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/incr_${DATE}.log 2>&1
backup database incremental to ‘$INCR_BACKUP_DIR/DB_INCR_${DATE}.bak’;
EOF
log “增量备份完成”
fi
# 归档日志备份
log “开始备份归档日志…”
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/archive_${DATE}.log 2>&1
backup archivelog all to ‘$ARCH_BACKUP_DIR/ARCH_${DATE}.bak’ delete input;
EOF
log “归档日志备份完成”
# dm_backup_scheduler.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
# 备份配置
BACKUP_BASE=/dm/backup
FULL_BACKUP_DIR=$BACKUP_BASE/full
INCR_BACKUP_DIR=$BACKUP_BASE/incremental
ARCH_BACKUP_DIR=$BACKUP_BASE/archivelog
LOG_DIR=$BACKUP_BASE/log
DB_HOST=192.168.1.10
DB_PORT=5236
DB_USER=SYSDBA
DB_PASS=SYSDBA
# 创建目录
mkdir -p $FULL_BACKUP_DIR $INCR_BACKUP_DIR $ARCH_BACKUP_DIR $LOG_DIR
# 日志函数
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_DIR/backup_scheduler.log
}
# 判断是否为全量备份日(周日)
is_full_backup_day() {
weekday=$(date +%w)
if [ “$weekday” = “0” ]; then
return 0
else
return 1
fi
}
# 执行备份
if is_full_backup_day; then
log “开始执行全量备份…”
DATE=$(date +%Y%m%d_%H%M%S)
# 全量备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/full_${DATE}.log 2>&1
backup database full to ‘$FULL_BACKUP_DIR/DB_FULL_${DATE}.bak’ compressed;
EOF
log “全量备份完成”
else
log “开始执行增量备份…”
DATE=$(date +%Y%m%d_%H%M%S)
# 增量备份
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/incr_${DATE}.log 2>&1
backup database incremental to ‘$INCR_BACKUP_DIR/DB_INCR_${DATE}.bak’;
EOF
log “增量备份完成”
fi
# 归档日志备份
log “开始备份归档日志…”
disql $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT << EOF >> $LOG_DIR/archive_${DATE}.log 2>&1
backup archivelog all to ‘$ARCH_BACKUP_DIR/ARCH_${DATE}.bak’ delete input;
EOF
log “归档日志备份完成”
Part05-风哥经验总结与分享
5.1 DM数据库备份最佳实践
基于多年DM数据库运维经验,总结以下备份最佳实践:
- 备份策略:生产环境建议采用”全量+增量+归档”的备份策略
- 备份时间:全量备份安排在业务低峰期,避免影响系统性能
- 备份验证:每次备份后必须验证备份集完整性
- 备份保留:根据业务需求和合规要求制定备份保留策略
- 存储规划:备份存储应与生产数据分离,避免单点故障
- 监控告警:建立备份监控机制,及时发现备份失败
生产环境建议:备份是数据安全的最后一道防线,必须重视备份策略的制定和执行。建议至少保留一份离线备份,以防万一。
5.2 DM数据库备份常见问题
DM数据库备份常见问题及解决方案:
#
# 问题1:备份失败,提示归档模式未开启
#
# 原因分析
– 数据库未开启归档模式
#
# 解决方案
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database open;
#
# 问题2:备份集验证失败
#
# 原因分析
– 备份文件损坏
– 备份过程中有其他操作干扰
#
# 解决方案
– 重新执行备份
– 使用操作系统复制方式备份
#
# 问题3:备份空间不足
#
# 原因分析
– 备份存储空间规划不足
– 过期备份未及时清理
#
# 解决方案
– 扩容备份存储
– 定期清理过期备份
– 使用压缩备份减少空间占用
# 问题1:备份失败,提示归档模式未开启
#
# 原因分析
– 数据库未开启归档模式
#
# 解决方案
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database open;
#
# 问题2:备份集验证失败
#
# 原因分析
– 备份文件损坏
– 备份过程中有其他操作干扰
#
# 解决方案
– 重新执行备份
– 使用操作系统复制方式备份
#
# 问题3:备份空间不足
#
# 原因分析
– 备份存储空间规划不足
– 过期备份未及时清理
#
# 解决方案
– 扩容备份存储
– 定期清理过期备份
– 使用压缩备份减少空间占用
5.3 DM数据库备份检查清单
日常备份检查清单:
- 归档模式检查:确认数据库处于归档模式
- 备份执行检查:确认备份任务正常执行
- 备份验证检查:确认备份集验证通过
- 存储空间检查:确认备份存储空间充足
- 过期清理检查:确认过期备份已清理
- 监控告警检查:确认备份告警配置正常
- 恢复演练检查:定期进行恢复演练
风哥提示:备份工作看似简单,但却是数据库安全的最重要保障。建议DBA人员建立完善的备份管理制度,定期检查备份执行情况,确保备份的可靠性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
