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

DM8 数据库备份&恢复

原创 BinGoSTop 2025-05-19
114

DM8 数据库备份&恢复

1 备份还原简介

数据库备份是 DBA 日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。

本章主要介绍 DM 备份与还原的概述和基本概念,为理解归档配置、备份还原的原理与工具使用奠定基础,内容主要包括:

  • 概述
  • 基本概念

1.1 概述

DM 数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对某个数据文件页的读写操作。

因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。

还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定 LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM 数据库自动进行回滚。备份、还原与恢复的关系如图 所示。

备份、还原与恢复

1.2 LSN 介绍

LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。物理事务(Physical Transaction,简称 ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。

DM 数据库中与 LSN 相关的信息,可以通过查询 v$rlog 和 V$RAPPLY_PARALLEL_INFO 表来获取。DM 主要包括以下几种类型的 LSN:

  • CUR_LSN 是系统已经分配的最大 LSN 值。物理事务提交时,系统会为其分配一个唯一的 LSN 值,大小等于 CUR_LSN+1,然后再修改 CUR_LSN=CUR_LSN+1。
  • FLUSH_LSN 是已经发起日志刷盘请求,但还没有真正写入联机 Redo 日志文件的最大 LSN 值。
  • FILE_LSN 是已经写入联机 Redo 日志文件的最大 LSN 值。每次将 Redo 日志包 RLOG_PKG 写入联机 Redo 日志文件后,都要修改 FILE_LSN 值。
  • CKPT_LSN 是检查点 LSN,所有 LSN <= CKPT_LSN 的物理事务修改的数据页,都已经从 Buffer 缓冲区写入磁盘,CKPT_LSN 由检查点线程负责调整。

数据库故障重启时,CKPT_LSN 之前的 REDO 日志不需要重做,只需要从 CKPT_LSN+1 开始重做 REDO 日志,就可以将系统恢复到故障前状态。并且,在联机重做日志文件中,LSN 值<=CKPT_LSN 的 REDO 日志都可以被覆盖。

  • APPLY_LSN 是数据库还原恢复后已经写入联机 Redo 日志文件的日志包的原始最大 LSN 值,APPLY_LSN 取自源库的原始日志包中的最大 LSN 值。DSC 集群的每一个节点独立维护 APPLY_LSN。
  • RPKG_LSN 是数据库还原恢复后已经重演日志的最大 LSN。DSC 集群的每一个节点独立维护 RPKG_LSN。

2 数据库备份

2.1 前提条件:数据库已开启归档日志

SQL> SELECT ARCH_DEST, ARCH_FILE_SIZE, ARCH_SPACE_LIMIT FROM V$DM_ARCH_INI;

未选定行

查询结果为空,则表示数据库没有开启归档日志,执行操作:配置归档日志。

查询结果存在,则表示数据库已经开启归档日志,则可以执行操作:备份数据库。

2.1.1 配置归档日志

编辑 dm.ini 文件,设置参数 ARCH_INI=1,并保存

[root@bingo DMTEST]# vim dmarch.ini ^C

[root@bingo DMTEST]# cat dmarch.ini

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /dmdata/arch/ #本地归档文件存放路径

ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M

/home/dmdba/dmdbms/bin/DmServiceDMTEST stop

/home/dmdba/dmdbms/bin/DmServiceDMTEST start

2.2 备份数据库测试

全备份数据库

SQL> BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_2025051301';

操作已执行

创建一个新表t3

SQL> select count(*) from dba_tables where owner='BINGO';

行号 COUNT(*)

---------- --------------------

1 10

SQL> create table bingo.t3(id number,name varchar2(20));

SQL> insert into bingo.t3 values(1,'bingo');

SQL> commit;

SQL> select count(*) from dba_tables where owner='BINGO';

行号 COUNT(*)

---------- --------------------

1 11

增量备份数据库

SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak' BACKUPSET '/dmdata/dmbak/db_incr_bak_2025051301_01';

创建新表t4

SQL> create table bingo.t4(id number,name varchar2(20));

SQL> insert into bingo.t4 values(1,'bingo');

SQL> commit;

SQL> select count(*) from dba_tables where owner='BINGO';

行号 COUNT(*)

---------- --------------------

1 12

增量备份数据库

SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak' BACKUPSET '/dmdata/dmbak/db_incr_bak_2025051301_02';

[root@bingo dmbak]# pwd

/dmdata/dmbak

[root@bingo dmbak]# ls -lrth

总用量 0

drwxr-xr-x 2 dmdba dinstall 111 5月 13 15:37 db_full_bak_2025051301

drwxr-xr-x 2 dmdba dinstall 120 5月 13 15:41 db_incr_bak_2025051301_01

drwxr-xr-x 2 dmdba dinstall 120 5月 13 15:44 db_incr_bak_2025051301_02

2.3 还原测试

2.3.1 停服务或注册新的服务

/home/dmdba/dmdbms/bin/DmServiceDMTEST stop

2.3.2 检验备份集是否正确

CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_2025051301';

[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]

check backupset successfully.

time used: 218.192(ms)

2.3.3 还原

RESTORE DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_2025051301';

2.3.4 恢复

RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_2025051301';

2.3.5 更新数据

RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' UPDATE DB_MAGIC;

2.3.6 启动服务

/home/dmdba/dmdbms/bin/DmServiceDMTEST start

Starting DmServiceDMTEST: [ OK ]

2.3.7 验证

SQL> select count(*) from dba_tables where owner='BINGO';

行号 COUNT(*)

---------- --------------------

1 10

2.3.8 增量测试

##还原

RESTORE DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_incr_bak_2025051301_02';

##恢复

RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_incr_bak_2025051301_02';

##更新数据库魔数

RECOVER DATABASE '/dmdata/data/DMTEST/dm.ini' UPDATE DB_MAGIC;

[dmdba@bingo DMTEST]$ /home/dmdba/dmdbms/bin/DmServiceDMTEST start

Starting DmServiceDMTEST: [ OK ]

[dmdba@bingo DMTEST]$ disql sysdba/DMdbatest1

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间 : 5.630(ms)

disql V8

SQL> select count(*) from dba_tables where owner='BINGO';

行号 COUNT(*)

---------- --------------------

1 12

……

关于达梦数据库更多的相关问题请浏览达梦云适配技术社区

达梦云适配技术社区

https://eco.dameng.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论