目录

一、概述

二、表空间

三、达梦备份与恢复

四、备份恢复示例

脱机备份与还原数据库

联机备份与还原数据库

表空间备份和恢复


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

一、概述

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

DM8备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。

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

还原与恢复是备份的逆过程。

还原是将备份集中的有效数据页重新写入目标数据文件的过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复到指定时间点和指定LSN。

恢复结束以后,数据库中可能存在处于未提交状态的活动事务,这些活动事务在恢复结束后的第一次数据库系统启动时,会由DM8数据库服务器自动进行回滚。

docker 达梦数据库 备份还原_数据库

二、表空间

DM数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。

数据文件是数据库中最重要的文件类型,是真实数据存储的地方。DM中数据文件的扩展名为.DBF,分为系统默认生成的数据文件和用户自己创建的数据文件两类。

在创建DM数据库时,系统会自动创建5个表空间:SYSTEM表空间、ROLL表空间、MAIN表空间、TEMP表空间和HMAIN表空间。DM自动为这几个自动创建的表空间分别生成默认的数据文件:SYSTEM.DBF、ROLL.DBF、MAIN.DBF和TEMP.DBF,HMAIN表空间没有默认的数据文件。

 DM 中的表空间有以下几类:

SYSTEM

存放了DM数据库全局字典信息和全局系统数据,是DM数据库能够正常运行的必要前提,默认对应数据文件SYSTEM.DBF。CREATE TABLE等DDL操作会修改SYSTEM表空间数据。

ROLL

存放DM数据库运行过程中产生的所有回滚记录。DM中几乎所有的数据库修改操作都会生成回滚记录,并保存在ROLL表空间的数据文件中。ROLL表空间是数据库全局对象,不论修改哪一个表空间,生成的回滚记录都是写入ROLL表空间,该表空间由系统自动维护,默认数据文件为ROLL.DBF。

TEMP

存放临时表数据以及数据库运行过程中产生的临时数据。在数据库运行过程中,SORT、HASH JOIN等操作都可能会生成临时结果集,它们作为临时数据存放在TEMP表空间中。TEMP表空间是数据库全局对象,由系统自动维护。若数据库重启,保存在TEMP表空间中的所有数据都会丢失。TEMP表空间的默认数据文件为TEMP.DBF。

DM的物理备份还原不支持:TEMP表空间。备份与还原

MAIN

在创建用户时,如果没有指定默认表空间,系统自动指定MAIN表空间为用户默认的表空间。

HMAIN

DM的HUGE表空间,用来存放HUGE表数据文件。HMAIN表空间和HUGE表相关知识可参考《DM8系统管理员手册》。

 

三、达梦备份与恢复

任何一个对DM数据库的操作,归根结底都是对某个数据文件页的读写操作。物理备份就是把这些数据文件中的有效数据页备份起来,在出现故障时,用于恢复数据。DM的物理备份一般包括数据备份和日志备份两部分,数据备份是拷贝数据页内容,日志备份则是拷贝备份过程中产生的REDO日志。

docker 达梦数据库 备份还原_docker 达梦数据库 备份还原_02

达梦备份包括有:逻辑备份、物理备份、联机备份、脱机备份、数据备份、归档日志备份、完全备份、增量备份等。

  • 逻辑备份

逻辑备份是指利用dexp导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。

  • 物理备份

物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。

  • 联机备份

联机备份是指数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作。

联机备份可使用客户端工具DISQL连接到服务器实例后,通过执行SQL语句进行;也可以通过配置作业,定时完成自动备份。联机备份不影响数据库正常提供服务,是最常用的备份手段之一。

  • 脱机备份

数据库处于关闭状态时进行的备份操作,被称为脱机备份。

从V2.0版本开始,使用数据库自带的DMRMAN工具进行脱机备份,并且支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。

  • 数据备份

数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。

  • 归档日志备份

归档日志备份,是专门针对归档日志文件进行操作,不涉及任何数据文件内容。归档日志备份扫描归档目录收集归档文件,并将归档日志写入到备份集中。

  • 完全备份

完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。当数据规模比较大的情况下,生成的完全备份集通常会比较大,而且备份时间也会比较长。

  • 增量备份

增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效减少备份集的空间占用、提高备份速度。

根据对基备份的要求不同,DM的增量备份分为以下两种:

1. 差异增量备份

差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。

2. 累积增量备份

累积增量备份的基备份只能是完全备份集,而不能是增量备份集。

 

四、备份恢复示例

以下过程演示DM8在中标麒麟7环境中的脱机备份、联机备份、表空间恢复。

脱机备份与还原数据库

使用DMRMAN脱机备份前,需要关闭数据库:

老的DM版本,需要使用dmdba安装用户在dm安装目录的bin目录下打开dmrman。
否则可能出现管道连接失败等问题;另外保证apserver服务开启。
检查dmap服务的进程:
[dmdba@DCA01 bin]$ ps -ef|grep dmap 
dmdba 48280 1 0 12月22 ? 00:00:03 /dm8/bin/dmap 
dmdba 71289 71172 0 15:11 pts/4 00:00:00 grep --color=auto dmap
[root@DCA01 ~]# su - dmdba 
上一次登录:三12月23 13:18:37 CST 2020pts/2 上
[dmdba@DCA01 ~]$ cd /dm8/bin 
[dmdba@DCA01 bin]$ DmServiceDMSERVER stop 
Stopping DmServiceDMSERVER:

备份数据库:

RMAN> backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/backup/full_20201223_dmrman'; 
backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/backup/full_20201223_dmrman'; 
file dm.key not found, use default license! 
Database mode = 0, oguid = 0 
EP[0]'s cur_lsn[63068] 
Processing backupset /dm8/backup/full_20201223_dmrman 
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] 
backup successfully! 
time used: 00:00:01.223

检验备份集:

RMAN> show backupset '/dm8/backup/full_20201223_dmrman'; 
show backupset '/dm8/backup/full_20201223_dmrman'; 
数据库还原和恢复(基于冷备备份集的还原和恢复):
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/full_20201223_dmrman'; 
restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/full_20201223_dmrman'; 
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] 
restore successfully. 
time used: 312.651(ms) 
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic; 
recover database '/dm8/data/DAMENG/dm.ini' update db_magic; 
Database mode = 0, oguid = 0 
EP[0]'s cur_lsn[63068] 
recover successfully! 
time used: 991.966(ms)

联机备份与还原数据库

联机备份需要开启归档:

docker 达梦数据库 备份还原_docker 达梦数据库 备份还原_03

docker 达梦数据库 备份还原_数据库_04

docker 达梦数据库 备份还原_表空间_05

 

联机全库备份:

SQL> backup database full backupset '/dm8/backup/online_20202023bak';

联机备份表空间(表空间只能联机备份、脱机还原恢复):

SQL> backup tablespace TEST backupset '/dm8/backup/test_20202023bak';

查看联机备份备份集

RMAN> show backupset '/dm8/backup/online_20202023bak';

docker 达梦数据库 备份还原_表空间_06

 

基于联机备份集的还原:
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/online_20202023bak'; 
restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/online_20202023bak'; 
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] 
restore successfully. 
time used: 393.231(ms) 
基于归档恢复到最新的时间点:
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch'; 
recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch'; 
Database mode = 0, oguid = 0 
EP[0]'s cur_lsn[64326] 
EP:0 total 2 pkgs applied, percent: 10% 
EP:0 total 4 pkgs applied, percent: 21% 
EP:0 total 6 pkgs applied, percent: 31% 
EP:0 total 8 pkgs applied, percent: 42% 
EP:0 total 10 pkgs applied, percent: 52% 
EP:0 total 12 pkgs applied, percent: 63% 
EP:0 total 14 pkgs applied, percent: 73% 
EP:0 total 16 pkgs applied, percent: 84% 
EP:0 total 18 pkgs applied, percent: 94% 
EP:0 total 19 pkgs applied, percent: 100% 
recover successfully! 
time used: 312.016(ms) 
更新数据库魔数(全库还原恢复一定要更新数据库魔数)
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic; 
recover database '/dm8/data/DAMENG/dm.ini' update db_magic; 
Database mode = 0, oguid = 0 
EP[0]'s cur_lsn[68644] 
recover successfully! 
time used: 00:00:01.024

RMAN>

docker 达梦数据库 备份还原_docker 达梦数据库 备份还原_07

DM管理工具联机全量备份:

docker 达梦数据库 备份还原_表空间_08

使用DM控制台工具还原:

docker 达梦数据库 备份还原_数据库_09

docker 达梦数据库 备份还原_表空间_10

docker 达梦数据库 备份还原_表空间_11

docker 达梦数据库 备份还原_docker 达梦数据库 备份还原_12

 

表空间备份和恢复

DM8表空间是联机备份、还原恢复时需要脱机还原和恢复。

表空间备份不需要更新数据库魔数。

docker 达梦数据库 备份还原_数据库_13

docker 达梦数据库 备份还原_数据文件_14