注册
备份与还原
专栏/技术分享/ 文章详情 /

备份与还原

🌊Amaharashi 2026/08/28 81 0 0
摘要

1 环境信息

操作系统:CentOS Linux 7;
数据库软件:达梦数据库DM8;

1.1 数据库实例

主库端口:5238
备库端口:5239

1.2 归档配置

主备集群已配置本地归档和REALTIME实时同步归档,确保联机备份和主备数据同步:
实例 归档类型 归档路径/目标
DWPRIMARY LOCAL /dmdata/dw/DWPRIMARY/arch
DWPRIMARY REALTIME→DWSTANDBY 实时同步到备库
DWSTANDBY LOCAL /dmdata/dw/DWSTANDBY/arch
DWSTANDBY REALTIME→DWPRIMARY 实时同步到主库

1.3 数据文件概况

表空间 数据文件 大小
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

2 备份

2.1 前置条件

• 数据库处于OPEN状态
• 归档模式已开启(ARCH_INI = 1)
• DMAP服务已启动(端口 4236)
• 备份目标路径有足够磁盘空间

2.2 开启备份

备份集包含三个文件:元数据文件、主备份片和日志备份片。
$ 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
image.png
通过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’;
image.png

2.3 备份集校验

使用 DMRMAN 工具对备份集进行脱机校验,确保备份文件完整可用:
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dmrman CTLSTMT=“CHECK BACKUPSET '”’"’/home/dmdba/dm_bak2/db_full_01’"’"’"’
校验过程输出:
image.png

校验通过,备份集数据完整。

2.4 备份信息

image.png
image.png

2.5 备份集数据库信息

image.png
image.png

3 数据库脱机还原与恢复

3.1 流程概述

创建测试库: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
image.png
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’"’"’"’
image.png

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’"’"’"’
image.png
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:更新数据库魔数 → 数据库可用
image.png
启动验证:dmserver+ALTER DATABASE NORMAL+OPEN
cat > /tmp/dm_open.sql << ‘EOF’
ALTER DATABASE NORMAL;
ALTER DATABASE OPEN;
SELECT NAME, STATUS,MODE, 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’
image.png

3.2 执行结果

还原库 (端口25238)与主库(端口5238)对比验证:
验证项 主库 (5238) 还原库 (25238)
状态 OPEN / PRIMARY OPEN / NORMAL
数据文件数 5 5
TEST_DW 表 2行 2行

4 表级联机备份还原

4.1 特点

联机操作,不需停库
不需要配置归档
备份和还原都通过 DIsql 执行
适合小范围数据快速恢复

4.2 操作步骤

备份表:
BACKUP TABLE TEST_DW BACKUPSET ‘/home/dmdba/dm_bak2/tab_test_dw’;
查看当前数据
SELECT * FROM TEST_DW;
image.png
模拟误删:
DELETE FROM TEST_DW WHERE ID=999;
COMMIT;
SELECT * FROM TEST_DW;
image.png
image.png
联机还原:
RESTORE TABLE TEST_DW FROM BACKUPSET ‘/home/dmdba/dm_bak2/tab_test_dw’;
SELECT * FROM TEST_DW;
image.png

5 表空间备份

5.1 特点

• 联机操作——通过 DIsql 执行
• 必须配置归档——表空间备份属于联机备份
• 备份集包含该表空间中所有数据页
• 适用于按业务模块备份的场景

5.2 备份命令

BACKUP TABLESPACE MAIN BACKUPSET
‘/home/dmdba/dm_bak2/ts_main_bak’ COMPRESSED LEVEL 3;

5.3 结果

MAIN表空间仅128MB,压缩后备份集不到10KB。
image.png
image.png

6 主备集群增量修复

6.1 场景

当主库归档丢失导致主备无法同步时,使用增量备份+MERGE命令修复备库。相比全量还原恢复,MERGE可显著缩短恢复时间。

6.2 操作流程

  1. 查看当前数据:
    SELECT * FROM TEST_DW;
    SELECT COUNT(*) FROM TEST_DW;
    image.png
    2)在主库上插入新数据,产生增量变更:
    INSERT INTO TEST_DW VALUES(3, ‘FOR_MERGE_DEMO’);
    COMMIT;
    SELECT * FROM TEST_DW;
    image.png
    3)生成增量备份:
    BACKUP DATABASE INCREMENT BACKUPSET ‘/home/dmdba/dm_bak2/db_incr_01’ COMPRESSED LEVEL 3;
    image.png
  2. MERGE到测试库:
    MERGE DATABASE ‘/mnt/nas/dm_restore/DM_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dm_bak2/db_incr_01’;
    image.png
  3. RECOVER恢复一致性:
    RECOVER DATABASE ‘/mnt/nas/dm_restore/DM_RESTORE/dm.ini’ WITH ARCHIVEDIR ‘/dmdata/dw/DWPRIMARY/arch’;
    image.png
  4. 更新 DB_MAGIC:
    RECOVER DATABASE ‘/mnt/nas/dm_restore/DM_RESTORE/dm.ini’ UPDATE DB_MAGIC;
    image.png
    7)UPDATE DB_MAGIC 成功。启动并验证新数据是否已合入:
    su - dmdba -c ‘nohup /home/dmdba/dmdbms/bin/dmserver
    /mnt/nas/dm_restore/DM_RESTORE/dm.ini > /tmp/dm_merge_start.log 2>&1 &’
    sleep 10 && ss -tlnp | grep 25238

ALTER DATABASE NORMAL;
ALTER DATABASE OPEN;
SELECT * FROM TEST_DW;
SELECT COUNT(*) FROM TEST_DW;
image.png

6.3 结果

TEST_DW表成功恢复至3行数据,与主库完全一致。在数据库体积较大的场景下,通过周期性的完全备份配合逐日增量备份+MERGE合并策略,可在分钟级完成备库数据追平,比全量还原恢复节省大量时间。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服