暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

数栈研习社 2025-08-12
241

作者:广大

达梦数据库产品架构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;

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

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

      全备还原恢复

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

        1、创建测试表
        [dmdba@test bin]$  ./disql
        SQL> 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.


        2、执行全量备份
        SQL> backup database full backupset '/data/dm/dmbak/fullbak';
        操作已执行
        已用时间: 00:00:06.271. 执行号:109.


        3、假设此时出现故障,数据库宕机


        4、利用之前的全量备份进行还原
        [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


        5、还原后恢复
        [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


        6、更新数据库魔数
        [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


        7、启动数据库
        /home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start

        全备+增备还原恢复

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

          1、创建测试表
          [dmdba@test bin]$  ./disql
          SQL> 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.


          2、执行全量备份
          SQL> backup database full backupset '/data/dm/dmbak/fullbak';
          操作已执行
          已用时间: 00:00:06.271. 执行号:109.


          3、插入数据2后执行增量备份
          [dmdba@test bin]$  ./disql
          SQL> 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.


          4、假设此时出现故障,数据库宕机


          5、还原数据库
          [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


          6、恢复数据库
          [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


          7、更新数据库魔数
          [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


          8、启动数据库
          /home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start

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

            1、创建测试表
            [dmdba@test bin]$  ./disql
            SQL> 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.


            2、执行全量备份
            SQL> backup database full backupset '/data/dm/dmbak/fullbak';
            操作已执行
            已用时间: 00:00:06.271. 执行号:109.


            3、插入数据2后执行增量备份
            [dmdba@test bin]$  ./disql
            SQL> 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.


            4、插入数据3,并查看时间
            [dmdba@test bin]$  ./disql
            SQL> insert into test values (3);
            影响行数 1
            已用时间: 1.990(毫秒). 执行号:115.
            SQL> commit;
            操作已执行
            已用时间: 4.966(毫秒). 执行号:116.


            5、假设此时出现故障,数据库宕机


            6、还原
            [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


            7、恢复
            [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)


            8、更新数据库魔数
            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


            9、启动数据库
            /home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start

            袋鼠云专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。基于云数据库提供7*24小时保障服务,提供开发支持、数据库体系规范、持续优化、数据库架构支持,保障企业数据库高效稳定运行。全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!

            文章转载自数栈研习社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论