一、备份的概念
联机备份和脱机备份
1. 联机备份:数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作。
从V2.0 版本开始,使用 DMRMAN 工具进行脱机备份,并且支持对异常关闭的数据库进 行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。
2. 脱机备份:数据库处于关闭状态时进行的备份操作
联机备份则使用客户端工具连接到服务器实例后,通过执行 SQL 语句进行;也可以通 过配置作业,定时完成自动备份。联机备份不影响数据库正常提供服务,是最常用的备份手 段之一。 联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性, 需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档 的数据库上执行联机备份。
只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行 脱机备份,系统会报错。
数据备份和归档日志备份
按照备份内容不同,可以分为数据备份和归档日志备份
1.数据备份
数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。
(1)库备份
顾名思义就是对整个数据库执行的备份,又称为库级备份。库备份会拷贝数据 库中所有数据文件的有效数据页,如果是联机备份,则还会拷贝备份过程中产生的归档日志, 写入到备份集中。
(2)表空间备份
是针对特定表空间执行的备份,又称为表空间级备份。表空间备份只能在联 机状态下执行。
(3)表备份
则拷贝指定表的所有数据页到备份集中,并会记录各个数据页之间的逻辑关系用 以恢复。表备份只能在联机状态下执行,一次表备份操作只能备份一张用户表,并且不支持增量表备份。
2.归档日志备份
是专门针对归档日志文件进行操作,不涉及任何数据文件内容。归档日 志备份扫描归档目录收集归档日志文件,并将归档日志写入到备份集中。既可以在数据库运行状态下,执行联机归档日志备份;也可以在数据库关闭状态下执行脱机归档日志备份
一致性备份和非一致性备份
按照备份集中的数据是否满足一致性,可以将备份划分为一致性备份和非一致性备份。
1.一致性备份的备份集包含了完整的数据文件内容和归档日志信息;利用一个单独的备份 集可以将数据库恢复到备份时状态。不指定 WITHOUT LOG 选项的联机备份生成的备份集 就是一致性备份。脱机数据库备份会强制将检查点之后的有效 REDO 日志拷贝到备份集中, 因此,脱机备份一定是一致性备份。数据库正常关闭时,会生成完全检查点,脱机备份生成 的备份集中,不包含任何 REDO 日志。
2.非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备 份还原的数据库,无法直接启动,必须借助归档日志来恢复。表空间备份、指定 WITHOUT LOG 选项的联机备份生成的备份集都是非一致性备份集。
完全备份和增量备份按照备份数据完整性,可将备份分为完全备份和增量备份。库备份和表空间备份支持增 量备份,表备份不支持增量备份。 完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。当数据规模比 较大的情况下,生成的完全备份集通常会比较大,而且备份时间也会比较长。 增量备份是在某个特定备份集基础上,收集数据库新修改的数据页进行备份,可以有效 减少备份集的空间占用、提高备份速度。这个特定的、已经存在的备份集称为增量备份的基 备份,根据对基备份的要求不同,DM 的增量备份分为以下两种: 1. 差异增量备份 差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。 利用增量备份进行还原操作时,要求其基备份必须是完整的;如果差异增量备份的基备 份本身也是一个增量备份,那么同样要求其基备份是完整的;任何一个增量备份,最终都是 以一个完全备份作为其基备份。因此,完全备份是增量备份的基础。 2. 累积增量备份 累积增量备份的基备份只能是完全备份集,而不能是增量备份集。 增量备份时,并不关心其基备份集是脱机备份生成的,还是联机备份生成的,脱机增量 备份的基备份集可以是联机备份生成的,联机增量备份的基备份集也可以是脱机备份生成的
还原与恢复
还原是备份的逆过程,就是从备份集中读取数据页,并将数据页写入到目标数据库对应 数据文件相应位置的过程。 由于联机备份时,系统中可能存在一些处于活动状态的事务正在执行,并不能保证备份 集中的所有数据页是处于一致性状态;而脱机备份时,数据页不一定是正常关闭的,也不能 保证备份集中所有数据页是处于一致性状态。因此,还原结束后目标库有可能处于非一致性 状态,不能马上提供数据库服务;必须要进行数据库恢复操作后,才能正常启动。
联机还原和脱机还原
1.联机还原
指数据库处于运行状态时,通过 SQL 语句执行还原操作。表空间还原和表还 原可以在联机状态下执行,并且表空间还原要求目标表空间不是 ONLINE 状态。
2.脱机还原
指数据库处于关闭状态时执行的还原操作,脱机还原通过 DMRMAN 工具进行。 库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭 状态。
数据还原和归档日志还原
根据备份集类型,数据还原可以分为库还原、表空间还原和表还原。库还原的目标库必 须处于关闭状态;表空间还原既可以脱机执行也可以联机执行;表还原操作只能联机执行。 表空间还原的数据来源既可以是表空间备份集,也可以是库备份集。还原的目标表空间 不能是 TEMP 表空间,只能是 MAIN、SYSTEM、ROLL 表空间,或者用户定义的表空间。 表还原从表备份集读取数据,重新恢复目标表数据,还会在目标表上重建索引、约束。 归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。
完全还原和增量还原
完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行 数据还原操作。但是考虑到增量备份集的基础一定是一个完全备份集,因此增量还原过程中 隐含了一个完全还原操作。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。
介质管理层
DM 通过介质管理层 MML,将备份、还原和恢复过程中备份片文件和元数据文件的读取 写入动作进行抽象、隔离,备份还原过程中 MML 层会调用一组 SBT 接口来访问备份存储介 质。SBT 接口是 DM 定义的一组 API 函数,允许第三方厂商定制、管理备份存储介质;DM 系统自带的备份还原功能也遵循了 SBT 规范。
如 果 备份、还原时指定 DEVICE TYPE 为 TAPE , 且使用第三方提供的 dmsbtex.dll(dmsbtex.so) 来完成备份文件的存取功能。DEVICE TYPE 指定 TAPE 时还提供了 PARMS 关键字,用于传递第三方可识别的自定义字符串。使用第三方提供的动 态库时,用户层应用不受影响。默认 DEVICE TYPE 为 DISK,使用达梦自带 SBT 磁盘存储。
版本说明
随着需求的不断增加、技术的不断成熟,DM 备份与还原前后发布了两个版本:V1.0 和 V2.0。因为不同版本策略不同,所以备份文件在各版本间不能混用。本书主要介绍 V2.0 的原理、实现以及使用,需要使用 V1.0 的用户请参考本书第四章。
V1.0
备份还原 V1.0 指 DM 早期的备份还原,不是基于备份集组织的备份。V1.0 版本使用 dmbackup 工具执行脱机备份,使用 dmrestore 工具执行脱机还原
V2.0
引入备份片、元数据文件、备份集等概念,提供第三方备份(TAPE 类型)接口,支持 DSC 备份。使用 DMRMAN 工具进行脱机备份还原。 V2.0 的备份还原实现策略有两种:dmap 辅助进程方式和无辅助进程方式。用户可通 过 DM.INI 参数 bak_use_ap 来选择(dmrman 使用参数 use_ap),bak_use_ap 取值 1、 2。默认为 1。
1:DMAP 辅助进程方式,可支持第三方备份(指定 DEVICE TYPE 为 TAPE)。DMAP
插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特 别是加密、压缩的处理效率。如果选择使用 DMAP 辅助进程,执行备份还原之前就必须启动 DMAP 服务。安装 DM 数据库以后,DMAP 服务会自动启动。如果需要手动启动,有两种途径, 一是启动 DM 服务查看器中的 DmAPService。二是通过手动启动 DMAP 执行码实现,DMAP 执行码位于 DM 安装目录的 bin 子目录下。除此之外,LINUX 下,还可以调用 bin 目录下 的 DmAPService 脚本。
2:无辅助进程方式,不依赖 DMAP,由主进程 dmserver 自身执行备份还原,但不支 持第三方备份(指定 DEVICE TYPE 为 TAPE)。
版本相关参数设置
用户可通过设置 DM 的 INI 参数 BAK_POLICY 选择备份策略。BAK_POLICY 可取值 0、 1 或 2,默认为 0,具体介绍如下:
0:表示同时支持 V1.0 和 V2.0 版本 这里的同时支持表示用户如果使用 V1.0 的语法或者工具,则 DM 服务器按照 V1.0 的 策略执行;若用户使用 V2.0 的语法或者工具,则 DM 服务器按照 V2.0 执行。但是 V1.0 与 V2.0 不能混用,若使用 V1.0 生成的备份不能使用 V2.0 进行还原,也不能在 V1.0 的 基备份上使用 V2.0 进行增量备份,反之亦然,这些操作都会报错。
1:表示只支持 v1.0 版本
2:表示只支持 v2.0 版本
二、备份还原原理
归档切换
通过执行以下 SQL 命令,可以完成归档切换功能。三条语句功能一样,选择 一条执行即可。
alter database archivelog current;
alter system archive log current;
alter system switch logfile;