蝙俚 发表于 2025-8-12 15:03:22

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

达梦数据库产品架构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、创建测试表
$  ./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.

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

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

4、利用之前的全量备份进行还原
$ ./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';            restore successfully.time used: 00:00:03.851

5、还原后恢复
$ ./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';          recover successfully!time used: 00:00:02.826

6、更新数据库魔数
$ ./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、创建测试表
$  ./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.

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

3、插入数据2后执行增量备份
$  ./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.

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

5、还原数据库
$ ./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';          recover successfully!time used: 00:00:02.663

6、恢复数据库
$ ./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';          recover successfully!time used: 00:00:02.663

7、更新数据库魔数
$ ./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、创建测试表
$  ./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.

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

3、插入数据2后执行增量备份
$  ./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.

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

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

6、还原
$ ./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!            restore successfully.time used: 00:00:04.413

7、恢复
$ ./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';          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
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除
页: [1]
查看完整版本: 全文深度剖析国产化数据库达梦之备份恢复体系