写点什么

全文深度剖析国产化数据库达梦之备份恢复体系

作者:袋鼠云数栈
  • 2025-08-12
    浙江
  • 本文字数:3882 字

    阅读完需:约 13 分钟

全文深度剖析国产化数据库达梦之备份恢复体系

达梦数据库产品架构 DM8 采用了独特的双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。 相较于目前主流产品架构——不同特性依靠不同内核去实现,DM8 架构为业界首创,也是未来数据库架构的发展方向。


数据安全的最后防线

备份原理

物理备份就是把这些数据文件中的有效数据页备份起来,在出现故障时,用于恢复数据。一份完整的物理备份包括数据备份和 REDO 日志备份两部分。数据备份是拷贝数据页内容,REDO 日志备份则是拷贝备份过程中产生的 REDO 日志。参考原理图如下:



备份的意义

  • 数据完整性的保障:数据备份的首要目的是确保数据的完整性。在面临非法入侵、断电、病毒感染等可能导致数据丢失的风险时,备份的数据可以作为恢复原始数据的依据。因此,定期进行数据备份是防止数据丢失、维护数据完整性的有效手段。

  • 数据还原的能力:当数据库因错误、崩溃或其他原因无法正常使用时,数据还原成为恢复系统正常运行的关键步骤。通过还原备份的数据,可以迅速恢复数据库到之前的状态,确保业务的连续性。

  • 提高系统可用性和灾难恢复性:备份不仅是为了应对当前的问题,更是为了在未来的某个时刻,当系统面临崩溃或其他灾难性事件时,能够迅速恢复并继续提供服务。这大大提高了系统的可用性和灾难恢复性,确保了业务的持续稳定运行。

  • 最优的数据恢复方案:在数据库系统崩溃或数据丢失的情况下,使用备份数据来还原数据库是成本最低、效果最好的恢复方案。与其他可能的恢复手段相比,数据备份提供了最小代价的数据恢复途径。

  • 防范灾难的强力手段:数据是现代企业和个人最重要的资产之一。没有数据,许多业务将无法继续。因此,数据库备份不仅是对数据的保护,更是对业务连续性的保障。它是一种防范灾难于未然的强力手段,能够确保在遭遇不可预见的风险时,企业和个人能够迅速恢复并继续前行。


备份前准备

确定备份目录并授权

#备份保存目录mkdir -p /data/dm/dmbak/
#授权chown -R dmdba:dinstall /data/dm/
复制代码

联机备份需要开启归档

命令行开启归档方法

#修改数据库为 Mount 状态ALTER  DATABASE  MOUNT;
#开启归档模式ALTER  DATABASE  ARCHIVELOG;
#配置本地归档ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
#修改数据库为 Open 状态ALTER  DATABASE  OPEN;
#查看归档是否开启select arch_mode from v$database;
复制代码


不同情况下联机备份恢复实战

经过上面的准备,我们针对不同情况下的数据备份恢复进行实战模拟。主要包含如下三种情况:

全备还原恢复

此次情况主要模拟存在全量备份的情况,如何恢复数据。

创建测试表[dmdba@test bin]$  ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
假设此时出现故障,数据库宕机
利用之前的全量备份进行还原[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';  restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00]            restore successfully.time used: 00:00:03.851
还原后恢复[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]          recover successfully!time used: 00:00:02.826
更新数据库魔数[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini'  update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码

全备+增备还原恢复

此次情况主要模拟存在全量备份和增量备份的情况,如何恢复数据。例如每周日全备,其余时间增量备份的情形,该情况也是生产上使用最多的备份方案。

创建测试表[dmdba@test bin]$  ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
插入数据2后执行增量备份[dmdba@test bin]$  ./disqlSQL> insert into test values (2);影响行数 1已用时间: 2.945(毫秒). 执行号:110.SQL> commit;操作已执行已用时间: 5.231(毫秒). 执行号:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已执行已用时间: 00:00:10.950. 执行号:112.
假设此时出现故障,数据库宕机
还原数据库[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]          recover successfully!time used: 00:00:02.663
恢复数据库[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]          recover successfully!time used: 00:00:02.663
更新数据库魔数[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini'  update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码

全备+增备+归档还原恢复

创建测试表[dmdba@test bin]$  ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
插入数据2后执行增量备份[dmdba@test bin]$  ./disqlSQL> insert into test values (2);影响行数 1已用时间: 2.945(毫秒). 执行号:110.SQL> commit;操作已执行已用时间: 5.231(毫秒). 执行号:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已执行已用时间: 00:00:10.950. 执行号:112.
插入数据3,并查看时间[dmdba@test bin]$  ./disqlSQL> insert into test values (3);影响行数 1已用时间: 1.990(毫秒). 执行号:115.SQL> commit;操作已执行已用时间: 4.966(毫秒). 执行号:116.
假设此时出现故障,数据库宕机
还原[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1' ; restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';file dm.key not found, use default license![Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]            restore successfully.time used: 00:00:04.413
恢复[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch' ; recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]          recover successfully!time used: 645.327(ms)
更新数据库魔数RMAN> recover database '/data/dm/data/DAMENG/dm.ini'  update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码

用户头像

还未添加个人签名 2021-05-06 加入

还未添加个人简介

评论

发布
暂无评论
全文深度剖析国产化数据库达梦之备份恢复体系_数据库_袋鼠云数栈_InfoQ写作社区