·全库还原就是根据库备份集中记录的文件信息重新创建数据库文件,并将数据页重新拷贝到目标数据库的过程。
·DM既可以将一个已存在的数据库作为还原目标库,也可以指定一个路径作为还原目标库的目录。
·库还原的主要步骤包括:清理目标库环境;重建数据库文件;拷贝数据页;重建联机日志文件;修改配置参数等。
·所以全库还原需要停机处理。
文章目录
脱机备份还原
一般是拷贝数据库所有的数据目录中的文件即可,可以直接使用系统命令拷贝,也可以通过DRMAN方式
使用系统命令拷贝方式备份
-
停止数据库服务,检查数据库已经停止
-
拷贝数据文件目录到备份目录
-
如果数据开启了归档,把最近的归档也拷贝的备份目录
使用DMRAN方式备份
- 检查dmap服务已经启动
- 停止数据
与“使用系统命令拷贝方式备份”这部分一样 - 启动DMRMAN进行备份
//路径按需修改 BACKUP DATABASE '/home/dmdba/dmdbms/DAMENG/dm.ini' full backupset '/home/dmdba/dmdbms/data/dmbak/testfull';
使用系统命令备份数据文件方式备份的还原方式
- 确定数据库已经停止后将备份文件按照原来的目录路径拷贝的原来的目录下,覆盖原来的目录或者文件
- 确定权限正确后可以直接启动数据库(这里用别的图片举例)
可以使用之前的启动脚本启动,也可以重新创建启动脚本
注意:dm.ini文件中配置的目录一定要存在且权限正确;如果源库配置了归档,归档文件也要安装源库的路径存放;如果希望恢复到其他目录,则需要修改dm.ini文件中的目录,使用dmctlcvt命令将dm.ctl控制文件转换成文本文件,修改表空间的文件路径后再转换成控制文件。
使用DMRMAN备份的备份文件进行恢复方式
-
确定dmap服务已经启动,数据库已经停止, dm.ini和dm.ctl(这两个文件可以是从别的库拷贝过来修改的,但是最后是源库的)参数文件存在
-
启动DMRMAN进行还原恢复
//还原(路径按需修改) RESTORE DATABASE '/home/dmdba/dmdbms/data/TEST/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/dmbak/testfull'; //恢复(路径按需修改) recover database '/home/dmdba/dmdbms/data/TEST/dm.ini' from BACKUPSET '/home/dmdba/dmdbms/data/dmbak/testfull'; recover database '/home/dmdba/dmdbms/data/TEST/dm.ini' update db_magic;
-
启动数据库
联机备份
备份V1.0
指 DM7 早期的备份还原,不是基于备份集组织的备份。V1.0 版本使用dmbackup工具执行脱机备份,使用dmrestore工具执行脱机还原。
备份V2.0
引入备份片、元数据文件、备份集等概念,提供第三方备份(TAPE 类型)接口,支持RAC 备份。使用 DMRMAN 工具进行脱机备份还原。V2.0 的备份还原实现策略有两种:dmap 插件方式和无插件方式。用户可通过 DM.INI参数 bak_use_ap 来选择(dmrman 使用参数 use_ap),bak_use_ap 取值 1、2。默认为 1。
- DMAP 插件方式,可支持第三方备份(指定 DEVICE TYPE 为 TAPE)。DMAP 插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。如果选择使用 DMAP 插件,执行备份还原之前就必须启动 DMAP 服务。安装 DM7 数据库以后,DMAP 服务会自动启动。如果需要手动启动,有两种途径,一是启动 DM 服务查看器中的 DmAPService。二是通过手动启动 DMAP 执行码实现,DMAP 执行码位于 DM7 安装目录的 bin 子目录下。除此之外,LINUX下,还可以调用 bin 目录下的 DmAPService 脚本。
- 无插件方式,不依赖 DMAP,由主进程(dmserver、dmrman)自身执行备份还原,但不支持第三方备份(指定 DEVICE TYPE 为 TAPE)。
备份1.0
备份文件有效性查询:
SELECT SF_BAKSET_CHECK(‘DISK’,'备份文件的绝对路径');
执行结果是1说明备份文件有效,如果是0则备份文件无效(版本比较老的DM7有效的备份文件执行结果也可能是0)。
全量备份
- DM7 的物理备份一般包括数据备份和日志备份两部分,数据备份是拷贝数据页内容,日志备份则是拷贝备份过程中产生的 REDO 日志。
- 因为DM7的在线重做日志(REDO LOG)每次被修改以后,都会自动生成一个新的日志序列值 LSN(Log SequenceNumber),所以联机全量备份以开始备份时间点的检查点LSN+1作为START_LSN,备份进程线程会拷贝START_LSN之前的全部有效数据页,当拷贝结束后此时的归档日志的LSN作为END_LSN,如果 START_LSN 大于 END_LSN + 1,说明备份过程中产生了新的数据,备份线程则会将START_LSN和END_LSN之间的归档日志一起拷贝,完成一次联机全量备份。
-
检查数据库已经开启归档
-
使用备份语句进行备份
-
检查备份文件有效性
增量备份
- 差异增量备份
差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。利用增量备份进行还原操作时,要求其基备份必须是完整的;如果差异增量备份的基备份本身也是一个增量备份,那么同样要求其基备份是完整的;任何一个增量备份,最终都是以一个完全备份作为其基备份。因此,完全备份是增量备份的基础。 - 累积增量备份
累积增量备份的基备份只能是完全备份集,而不能是增量备份集
差异增量备份例子
- 确认已存在至少一个有效的全量备份(参考全量备份第三步)
- 使用SQL语句备份,备份目录可以是全量备份目录也可以是增量备份目录
- 检查备份文件有效性
累计增量备份例子
-
确认已存在至少一个有效的全量备份(参考全量备份第三步)
-
使用SQL语句备份,备份目录可以是全量备份目录也可以是增量备份目录
-
检查备份文件有效性
备份2.0
全量备份
- 检查数据库已经开启归档(参考备份1.0全量备份第一步)
- 使用备份语句进行备份
- 校验备份集
增量备份
差异增量备份
-
确认已存在至少一个有效的全量备份(略)
-
使用SQL语句备份集,备份目录可以是全量备份目录也可以是增量备份目录
-
校验备份文件
累计增量备份
-
确认已存在至少一个有效的全量备份(略)
-
使用SQL语句备份,集备份目录必须是全量备份目录
-
校验备份文件
数据库还原和恢复
联机备份2.0产生的备份文件如果要进行还原需要使用DRMAN进行恢复。
1、如果备份之后没有新的归档产生或者只需要恢复到备份时间点,还原方式可以参照之前的使用“DMRMAN备份的备份文件进行恢复方式”进行恢复。
2、如果有新的归档产生但是有没有进行备份
-
确定dmap服务已经启动,数据库已经停止, dm.ini和dm.ctl(这两个文件可以是从别的库拷贝过来修改的,但是最后是源库的)参数文件存在
-
启动DMRMAN进行还原恢复
RESTORE DATABASE '/home/dmdba/dmdbms/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/DAMENG/bak/db_increment_bak_03';
RECOVER DATABASE '/home/dmdba/dmdbms/DAMENG/dm.ini' WITH ARCHIVEDIR '/home/dmdba/dmdbms/DAMENG/arch';
RECOVER DATABASE '/home/dmdba/dmdbms/DAMENG/dm.ini' update db_magic;
- 启动数据库