(本文部分内容摘自DM产品技术支持培训文档,如需要更详细的文档,请查询官方操作手册,谢谢)
一、原理
1、DM8备份还原简介
1.1、基本概念
(1)表空间与数据文件
▷ DM8表空间类型:
▷ SYSTEM
▷ ROLL
▷ TEMP
▷ MAIN
▷ HMAIN(不支持对HMAIN表空间备份还原)
▷ 用户自定义表空间
(2)重做日志
▷REDO 日志,记录了所有物理页的修改,基本信息包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等。
▷数据库中INSERT、DELETE、UPDATE 等DML操作以及CREATE TABLE等DDL操作最终都会转化为对某些数据文件、某些数据页的修改。
▷DM8默认的两个联机重做日志:DAMENG01.log,DAMENG02.log。
(3)归档日志
▷在归档模式下,联机REDO 日志被连续拷贝到归档日志后就生成了归档日志文件。
▷归档日志文件以归档时间命名。例如: ARCHIVE_LOCAL1_20160217171507968.log。
▷开启归档模式会对系统性能产生一定影响,但更安全。
(4)PWR记录
▷REDO 日志中包含有一种特殊的记录,称为PWR(Page Written Record)日志。
▷PWR 日志包含表空间ID、文件ID、数据在文件中的页号和页的当前LSN信息。
▷每次数据页刷盘时,系统都会生成一条对应的PWR日志。
▷可用来提升系统故障恢复速度。在引入PWR记录之前,数据库故障重启时需要重做所有有效的REDO 日志记录。根据PWR记录可以快速判断数据页是否已刷盘,有效避免无用IO。
(5)检查点与日志序列号
▷检查点的功能是按照数据页第一次被修改的顺序,依次将BUFFER缓冲区中的脏页写入磁盘,并在这个过程中动态调整CKPT_LSN值,释放日志空间。
▷LSN (LOG SEQUENCE NUMBER),即日志序列号,表示REDO 日志产生的顺序,系统为每个REDO 日志分配一个LSN值。
(6)备份集
一个备份集对应一次完整备份,为一个目录,由一个或多个备份片和一个元数据文件组成。
▷备份片(后缀为.bak)是用来存储备份数据的文件。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到这些备份片文件中。
▷元数据文件(后缀为.meta)用来存储备份信息。包括:
备份集本身相关的信息
备份源库的建库参数信息
备份集中备份数据文件信息
备份集中备份片的信息
(7)备份
▷将待备份的数据经过处理如加密、压缩等后,写到备份片文件中,并将相关备份信息写到元数据文件中的过程。
▷DM8中对备份的划分标准有如下几种:
①备份组织形式:物理备份和逻辑备份
②备份时,数据库是否运行:联机备份和脱机备份
③备份的粒度大小:库备份、表空间备份、归档备份和表备份
归档备份支持联机和脱机;
归档备份会把收集到的归档文件,备份到备份集中的每一个备份片。必要的时候可以使用归档备份集,还原归档。
④备份数据的一致性:一致性备份和非一致性备份
⑤备份数据的完整性:完全备份和增量备份
(8)还原
▷把备份集中的备份数据经过处理后,写回到还原目标库中相应的数据文件中的过程。
注:还原回来的数据通常是处于非一致性状态,需要执行恢复操作,使得目标数据库数据一致,才能对外提供服务。
▷分类
与备份的分类类似,还原也可按照以下标准进行划分:
①还原组织形式:物理还原和逻辑还原
②还原时,数据库是否运行:联机还原和脱机还原
③还原的粒度大小:库还原、表空间还原、归档还原和表还原
④还原数据的完整性:完全备份还原和增量备份还原
(9)恢复
▷恢复是重做本地归档日志或者备份集中备份的归档日志的过程。
没有经过恢复的还原数据库是不允许启动的。
表空间和表还原均为联机执行,都不需要再执行恢复操作。此处恢复是指数据库恢复操作。
▷根据恢复过程中是否重做归档,及重做归档日志的来源,可将恢复分三类:
①更新DB_MAGIC
DB_MAGIC记录数据库的变化,当数据库经过备份还原并恢复后,DB_MAGIC就会改变(SELECT DB_MAGIC FROM V$RLOG;)
在不需要重做归档日志恢复数据的情况下,可以直接更新DB_MAGIC 来完成最后的恢复工作。
②从备份集恢复
利用备份集中备份日志的恢复过程。
③从归档恢复
利用重做本地归档日志来恢复数据的过程。
从归档恢复可恢复到最新状态,或指定的时间点、指定的LSN值
2、DM8备份还原原理
2.1、备份
(1)备份过程
▷库级和表空间级备份
属于物理备份
联机库级和表空间备份要求配置归档
都可进行完全备份和增量备份
备份对象:数据文件和归档日志
▷归档备份
是把归档目录下,符合条件的归档文件都备份下来
归档备份对象:包含了元数据信息和REDO 日志的归档文件
▷表级备份
过程包含数据备份和元信息备份
表数据通过表上的聚集索引排序,表级数据备份针对表的聚集索引进行
表级备份元信息包括建表语句、重建约束语句、重建索引语句等
表级备份均为完全备份和一致性备份,不需要配置归档
实现过程采用表的内存逻辑存储结构,所访问的页均为有效页,故无需进行智能抽取
(2)智能抽取
▷仅限备份数据文件过程中使用
▷在遍历各文件中数据页时,根据描述页的标记判断数据页是否被分配、使用,将未使用的数据页剔除,仅保留有效数据页进行备份。
▷相对于直接拷贝数据文件方式,物理备份产生的备份集更小,有效减少IO数量,提升备份还原的效率
(3)加密与压缩
▷压缩和加密均由用户显式指定;
▷压缩级别支持1~9级,级别越高压缩比越高,但同时压缩速度越慢。默认采用压缩级别1;
▷加密:加密密码、加密类型(简单加密or完全加密)和加密算法;
▷若同时指定加密和压缩,则先压缩后加密;
▷增量备份,若指定加密,且基备份也存在加密,则使用的加密算法和加密密码必须与其基备份中一致
(4)PWR优化
▷PWR (Page Written Record)日志会记录每次刷盘时数据在数据页中的编号及所属数据页的LSN信息等。
▷增量备份的常规实现:需要扫描所有的数据文件页,再依次取出LSN >=基备份START_LSN的数据页。
▷采用PWR优化:通过扫描归档日志中PWR 日志,直接比较日志LSN值与基备份的START_LSN,就可确定需备份的数据页。
▷在备份语句中指定USE PWR来启动增量备份的PWR优化,默认不使用。
(5)并行备份
▷DM8支持对库级、归档备份和表空间级的并行备份
▷可通过关键字PARALLEL指定是否执行并行备份,以及并行数.默认并行数为4,指定值为0或1则按非并行处理。
▷并行备份以数据文件为单位,实际可使用的最大并行数就是目标备份数据文件的个数。
▷增量备份是否并行及并行数取决于其基备份
▷并行备份的结果包括一个主备份集目录和几个子备份集目录
▷一个并行数为4的脱机并行备份集(左)和非并行脱机备份集(右)比较
2.2、还原与恢复
2.2.1 还原过程
(1)库还原和表空间还原
▷库还原需要用户准备目标库,目标库建库参数需与备份库匹配(可通过DMRMAN的show功能查看备份信息)
▷表空间还原则不允许跨库还原,只能在源库上执行还原
(2)归档还原
▷过程概述:
1) 读取元数据文件,获取备份信息,校验备份集是否有效;
2) 从用户指定的备份集中,收集归档文件,根据用户指定的过滤条件,过滤需要还原哪些归档;
3) 根据用户指定的OVERWRITE参数,确定如果目标归档文件已经存在的处理策略:
添加一条日志继续还原其他归档文件;
直接终止还原,报错范围;
强制覆盖处理。
4) 执行归档还原,从备份片中把数据去除,必要时经过解压缩&解密处理后回写到新的归档文件中,还原结束。
(3)表还原
1)表结构还原
目标表存在,清除数据、二级索引和约束;
目标表不存在,利用备份集中记录的建表语句重建
2)表数据还原
3)索引和约束的重建
2.2.2 恢复过程
▷备份集恢复有以下几种情况:
如果备份集中备份了归档日志,则只要将备份集中备份的归档日志读出并生成到一个临时归档文件中,然后重做该临时归档文件即可;
如果备份集中没有备份归档日志,则只需要重做本地归档中备份集START_LSN到END_LSN之间的一段归档即可;
如果START_LSN和END_LSN之间无日志,即START_LSN = END_LSN+1,那么只要更新DB_MAGIC即可。
2.2.3 解密和解压缩
▷DM8 还原恢复时的解密过程如下:
首先,通过比对用户输入与从元数据文件得到备份集加密信息来检验加密密码和算法是否正确;
然后,从备份片文件中读取备份数据之后,写到目标文件(包括目标数据文件和临时归档文件)之前执行解密操作。
▷解压缩是自动进行的,不需要用户手动指定什么
▷若备份集同时存在加密和压缩,那么与备份过程处理相反,会先解密再解压缩,然后将处理的最终数据写入到目标文件中。
2.2.4 并行还原
▷对应并行备份集的还原,非并行备份集不能执行并行还原;
▷并行数使用目标并行备份集并行数;
▷并行备份集还支持非并行还原(指定关键字NOT PARALLEL)
2.3、介质管理层
▷介质管理层(MML)
DM8根据自身实现自定义了一套API接口SBT来负责备份数据在存储介质上的实际读写操作。
整个存储介质上的读写操作,由MML调用SBT完成。
目前 DM8 备份还原支持磁盘(DISK)和磁带(TAPE)两种存储介质。
磁盘介质SBT接口实现为dmsbt( WINDOWS 上为 dmsbt.dll,非 WINDOWS 上为 dmsbt.so)
磁带介质实现为dmsbtex(WINDOWS上命名为dmsbtex.dll, Linux上命名为dmsbtex.so)
其他第三方磁带存储实现,仅需将库文件名命名为 dmsbtex.dll(WINDOWS)或dmsbtex.so(非 WINDOWS),并替换掉DM8的相应dmsbtex库文件即可。
2.4、 应用场景分析
2.4.1 选择备份、还原方式
▷库级
理论上无论出现哪种损坏都可以采用库级备份还原修复,建议物理损坏情况下使用;
逻辑损坏导致库数据丢失比较严重或者表空间已经被删除,也可采用库级备份还原;
要求还原的目标库脱机且正常退出。需借助DMRMAN工具完成。
▷表空间级
若逻辑损坏导致某个表空间中多个表数据丢失时,可以考虑采用表空间级备份还原。
DM8支持从库级备份中还原表空间。
▷归档
归档还原仅能恢复归档文件。
很多时候可以利用归档文件修复数据,若条件允许,最好保留尽量多的归档文件。
▷表级
因逻辑损坏导致个别表数据丢失, 可以采用表级备份还原。建议对数据库中频繁操作的重要表进行表级备份。
将指定表数据从一个表迁移到另外一个表中,也可使用表级备份还原。
表级备份还原过程中,其他表可以正常工作。
▷完全,还是增量
当库或表空间的基础数据量很大而数据修改操作不太频繁时,强烈建议使用增量备份(前提是至少有一个完全备份)
建议当进行一定次数的增量备份后,应重新做一个完全备份。
2.4.2 选择恢复方式
▷表空间还原后的恢复操作由DM8自动执行;表还原后已经是一致性状态,不需要进行恢复操作。
▷提供三种库级恢复方式:
若还原时指定备份集为脱机库备份集(LEVEL=1)或者联机库备份集(LEVEL=0), 但过程中无日志(START_LSN = END_LSN+1),且仅需将库恢复到备份时状态,建议选择更新DB_MAGIC恢复方式;
若还原时指定的备份集为联机备份集(LEVEL=0)且备份了日志(备份时不指定 WITHOUT LOG 参数),且仅需要库恢复到备份时状态,可以选择从备份集恢复;
除以上情况外,均可以采用从本地归档恢复。可指定想要恢复到的 LSN(大于备份结束END_LSN)和时间点(大于备份时间BACKUP_TIME)。不指定则恢复到最新状态。
二、应用
1、DM8的备份还原方法
Disql 工具:联机数据备份与还原,包括库备份、表空间备份与还原、表备份与还原;
DMRMAN 工具:脱机数据库备份还原与恢复;
客户端工具 MANAGER和CONSOLE:对应命令行工具DIsql和DMRMAN的功能,分别用于联机和脱机备份还原数据。
1.1 冷备
不需要开启归档,针对整库做备份需要开启dmap服务,需要关闭数据库实例
1.1.1 console工具备份
[dmdba@localhostbin]$./DmServiceDMSERVER stop
[dmdba@localhostbin]$./DmAPService status
DmAPService(pid13623) is running.
1.1.2 用dmrman工作备份,只支持冷备
cd /dm8/bin/
./dmrman
RMAN>backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup'
1.2 热备
需要开启归档,数据库需要联机
可以备份数据库、表空间、表、归档日志文件
查看数据库归档模式:
SQL>select name,arch_mode from v$database;
1.2.1 归档配置
1、使用SQL 进行归档配置
首先使用disql登陆进数据库
进入\dmdbms\bin目录,输入如下命令:
./disql SYSDBA/SYSDBA@localhost:5236 ----第一个SYSDBA指角色,第二个指密码
1)修改数据库为mount状态,SQL如下:
alter database mount;
2)配置本地文档
alter database add archivelog ‘dest=/home/dmdba/dm_arch,type=local,file_size=1024,space_limit=2048';
3)开启归档模式
alter database archivelog;
4)修改数据库为open状态
alter database open;
也可手动配置归档文件
转到/home/dmdba/dmdbms/data/DAMENG路径下,编辑dmarch.ini文件,之后保存到该目录,dmarch.ini内容如下
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
编辑 dm.ini 文件,设置arch_ini=1,保存
启动数据库服务。
1.2.2 联机执行SQL语句进行备份还原
最简单的数据库备份语句:
backup database backupset 'db_bak_01';
指定备份集路径、设置备份名、指定介质类型、添加备份描述、限制备份片大小、备份压缩、并行备份:
backup database to weekly_full_bak backupset '/home/dmdba/dm_bak/db_bak_3_02' device type tape backupinfo '完全备份' maxpiecesize 300 compressed level 5 parallel 8;
注:指定的备份名、加密密码、加密算法名长度限制为128字节;
MOUNT模式下不允许数据库备份。
完全备份语句:
full参数可以省略,默认为完全备份
backup database full backupset '/home/dmdba/dm_bak/db_full_bak_01';
完全备份中,可指定DDL_CLONE(数据库克隆)参数,只备份定义不备份数据。该参数只用于数据库级完全备份中。
增量备份语句:
backup database increment with backupdir '/home/dmdba/dm_bak/' backupset '/home/dmdba/dm_bak/db_increment_bak_02';
表空间备份:
表空间备份只能联机,还原只能脱机
表备份:
backup table "TEST"."TEST_EMP" to "TAB_TEST_TEST_EMP_2020_09_23_15_43_53" backupset 'TAB_TEST_TEST_EMP_2020_09_23_15_43_53';
归档备份:
backup archivelog all to "ARCH_2020_09_23_15_53_34" backupset '/dm8/backup/ARCH_2020_09_23_15_53_34';
1.3 物理还原
检查备份集是否有效
RMAN>check backupset '/dm8/backup';
整库还原:
dmrman还原:
RMAN>restore database '/dm8/data/DAMENG/dm.ini' from backupset'/dm8/backup';
数据库恢复:
RMAN>recover database '/dm8/data/DAMENG/dm.ini' with archivedir'/dm8/arch';
更新数据库魔数
RMAN>recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
表空间还原:
RMAN>restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup' tablespace DMHR;
表空间恢复:
RMAN>recover database '/dm8/data/DAMENG/dm.ini' tablespace dmhr;