操作系统:CentOS Linux 7;
数据库软件:达梦数据库DM8;
主库端口:5238
备库端口:5239
主备集群已配置本地归档和REALTIME实时同步归档,确保联机备份和主备数据同步:
实例 归档类型 归档路径/目标
DWPRIMARY LOCAL /dmdata/dw/DWPRIMARY/arch
DWPRIMARY REALTIME→DWSTANDBY 实时同步到备库
DWSTANDBY LOCAL /dmdata/dw/DWSTANDBY/arch
DWSTANDBY REALTIME→DWPRIMARY 实时同步到主库
表空间 数据文件 大小
SYSTEM /dmdata/dw/DWPRIMARY/DAMENG/SYSTEM.DBF 335 MB
ROLL /dmdata/dw/DWPRIMARY/DAMENG/ROLL.DBF 1 GB
MAIN /dmdata/dw/DWPRIMARY/DAMENG/MAIN.DBF 128 MB
TEMP /dmdata/dw/DWPRIMARY/DAMENG/TEMP.DBF 128 MB
BENCHMARKSQL1 /dmdata/dw/DWPRIMARY/DAMENG/tpcc.dbf 8.9 GB
• 数据库处于OPEN状态
• 归档模式已开启(ARCH_INI = 1)
• DMAP服务已启动(端口 4236)
• 备份目标路径有足够磁盘空间
备份集包含三个文件:元数据文件、主备份片和日志备份片。
$ ls -lh /home/dmdba/dm_bak/db_full_bak_01/
-rw-r–r-- 1 dmdba dinstall 76K Jul 29 14:51 db_full_bak_01_1.bak
-rw-r–r-- 1 dmdba dinstall 1.1G Jul 29 14:51 db_full_bak_01.bak
-rw-r–r-- 1 dmdba dinstall 130K Jul 29 14:51 db_full_bak_01.meta
通过DIsql工具执行联机完全备份,使用压缩级别3以减少备份文件大小:
先创建新备份 SQL 脚本:
cat > /tmp/backup2.sql << ‘EOF’
BACKUP DATABASE FULL BACKUPSET ‘/home/dmdba/dm_bak2/db_full_01’ COMPRESSED LEVEL 3;
exit;
EOF
再执行备份:
su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
SYSDBA/Dameng123@127.0.0.1:5238 `/tmp/backup2.sql’;
使用 DMRMAN 工具对备份集进行脱机校验,确保备份文件完整可用:
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dmrman CTLSTMT=“CHECK BACKUPSET '”’"’/home/dmdba/dm_bak2/db_full_01’"’"’"’
校验过程输出:
校验通过,备份集数据完整。
创建测试库:dminit生成空库→修改端口避免冲突→设置 MAL_INI=0
/home/dmdba/dmdbms/bin/dminit path=/mnt/nas/dm_restore
db_name=DM_RESTORE auto_overwrite=1 SYSDBA_PWD=Dameng@123
SYSAUDITOR_PWD=Dameng@123 page_size=32 log_size=256
RESTORE:从备份集还原所有数据文件
NAS 测试库就绪。执行还原(加 USE_AP=2 绕过 DMAP):
chown -R dmdba:dinstall /mnt/nas/dm_restore
mkdir -p /mnt/nas/dm_restore/DM_RESTORE
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dmrman USE_AP=2
CTLSTMT=“RESTORE DATABASE TO
'”’"’/mnt/nas/dm_restore/DM_RESTORE’"’"’ FROM BACKUPSET
‘"’"’/home/dmdba/dm_bak2/db_full_01’"’"’"’
RECOVER:重做备份集中的 REDO 日志 → 数据一致
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dmrman USE_AP=2
CTLSTMT=“RECOVER DATABASE
'”’"’/mnt/nas/dm_restore/DM_RESTORE/dm.ini’"’"’ FROM BACKUPSET
‘"’"’/home/dmdba/dm_bak2/db_full_01’"’"’"’
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dmrman USE_AP=2
CTLSTMT=“RECOVER DATABASE
'”’"’/mnt/nas/dm_restore/DM_RESTORE/dm.ini’"’"’ UPDATE DB_MAGIC"’
UPDATE DB_MAGIC:更新数据库魔数 → 数据库可用
启动验证:dmserver+ALTER DATABASE NORMAL+OPEN
cat > /tmp/dm_open.sql << ‘EOF’
ALTER DATABASE NORMAL;
ALTER DATABASE OPEN;
SELECT NAME, STATUS,MODE FROM V$INSTANCE;
SELECT * FROM TEST_DW;
exit;
EOF
su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
SYSDBA/Dameng123@127.0.0.1:25238 `/tmp/dm_open.sql’
还原库 (端口25238)与主库(端口5238)对比验证:
验证项 主库 (5238) 还原库 (25238)
状态 OPEN / PRIMARY OPEN / NORMAL
数据文件数 5 5
TEST_DW 表 2行 2行
联机操作,不需停库
不需要配置归档
备份和还原都通过 DIsql 执行
适合小范围数据快速恢复
备份表:
BACKUP TABLE TEST_DW BACKUPSET ‘/home/dmdba/dm_bak2/tab_test_dw’;
查看当前数据
SELECT * FROM TEST_DW;
模拟误删:
DELETE FROM TEST_DW WHERE ID=999;
COMMIT;
SELECT * FROM TEST_DW;
联机还原:
RESTORE TABLE TEST_DW FROM BACKUPSET ‘/home/dmdba/dm_bak2/tab_test_dw’;
SELECT * FROM TEST_DW;
• 联机操作——通过 DIsql 执行
• 必须配置归档——表空间备份属于联机备份
• 备份集包含该表空间中所有数据页
• 适用于按业务模块备份的场景
BACKUP TABLESPACE MAIN BACKUPSET
‘/home/dmdba/dm_bak2/ts_main_bak’ COMPRESSED LEVEL 3;
MAIN表空间仅128MB,压缩后备份集不到10KB。
当主库归档丢失导致主备无法同步时,使用增量备份+MERGE命令修复备库。相比全量还原恢复,MERGE可显著缩短恢复时间。
ALTER DATABASE NORMAL;
ALTER DATABASE OPEN;
SELECT * FROM TEST_DW;
SELECT COUNT(*) FROM TEST_DW;
TEST_DW表成功恢复至3行数据,与主库完全一致。在数据库体积较大的场景下,通过周期性的完全备份配合逐日增量备份+MERGE合并策略,可在分钟级完成备库数据追平,比全量还原恢复节省大量时间。
文章
阅读量
获赞
