Oracle 12C多租户架构备份与恢复技术实践

作者介绍
颜廷义,中国农业银行研发中心系统支持部高级工程师,主要从事数据脱敏技术研究、数据库管理与维护等相关工作 。
Oracle 12C中一个重要特性多租户特性被引入 。12C之前,数据库实例(Oracle Instance)与数据库之间为多对一或一对一关系,若服务器上同时运行多个Oracle数据库,必须同时运行多个数据库实例,资源耗费非常大 。
因此12C之前的版本中业务数据之间的隔离一般通过Schema-Tablespace模式实现;而在12C多租户体系中,一个数据库实例下可以同时运行和管理多个数据库,数据库在更高级别实现了数据的隔离 。
本文以实际工作中具体数据申请为背景,对多租户体系下数据库的备份与恢复技术进行研究,形成一套详细、可用的数据备份、恢复方法,该方法既可为生产系统管理员日常备份与恢复提供参考,也值得数据恢复人员借鉴 。
一、基本概念
1、多租户架构
Oracle 12C引入的新特性,主要包括多租户容器数据库(CDB)和可插拔数据库(PDB) 。
CDB容器库是多租户架构下数据与元数据的逻辑容器,每个CDB由一个根容器(CDB$ROOT)、一个种子容器(PDB$SEED)和多个可插拔数据库(PDB)组成,可以在不同的PDB库中存放各个系统的业务数据,实现业务数据的隔离 。
每个PDB在CDB中是相互独立存在的,在单独使用PDB时,与普通数据库无区别 。
2、RMAN
RMAN(Recovery Manager)是Oracle软件自带的备份与恢复工具,主要应用于全库或数据库部件(如表空间,数据文件,控制文件等)进行物理级备份与恢复,备份方式一般分为全量备份和增量备份 。
RMAN备份主要使用backup命令进行,恢复包括restore和recover两个过程,其中restore主要用于从备份集中将数据文件恢复至数据库中,recover用于在restore基础上使用日志重做事务 。
3、表空间
表空间(TableSpace)是Oracle数据库中的逻辑存储结构,主要用于存放表,索引,视图等数据库对象 。
在Oracle数据库中,表空间由若干segment组成,segment包含若干extent,而一个extent又包含多个连续block 。
数据文件是与表空间对应的物理存储结构,一个表空间一般包括一个或多个数据文件 。
4、SCN
SCN(System Change Number)系统改变号,Oracle数据库中内置的时间机制,主要用于记录检查点(checkpoint)、事务提交(commit)等重要事件发生的时间及先后顺序,SCN值主要存放在控制文件、数据文件头以及日志文件中,在数据库备份、恢复与管理过程中起重要作用 。
5、控制文件(control file)
Oracle数据库中最重要的物理文件,记录了数据库的物理结构(如数据文件、日志文件的名称与具体存储位置)、检查点等信息,控制文件在数据库启动、运行及恢复时起到很重要的作用 。
鉴于其重要性,为防止控制文件损坏或丢失,强烈建议在数据库中存储多份备份 。
二、问题背景与分析
1、问题背景
作者在受理测试数据申请时遇到数据恢复失败问题,当按单租户数据库的恢复方法将生产数据恢复至脱敏环境时遇到大量报错,具体恢复脚本与报错信息如下,由于篇幅问题,在此只列出关键步骤:
RMAN>
run{
startup nomount pfile=/tmp/initPOOL1DB.ora ;(参数文件存放目录为/tmp/initPOOL1DB.ora)
restore controlfile from ‘/data/backup/itapdb.cf’;
alter database mount;
catalog start with ’/data/backup/’;
set newname for database to '/data/itapdb/%U';-------------->指定恢复路径
restore database ;
switch datafile all ;
recover database;
}
RMAN-03002: failure of restore command at 01/25/2018 17:39:54
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 99 found to restore
RMAN-06023: no backup or copy of datafile 98 found to restore
RMAN-06023: no backup or copy of datafile 67 found to restore
从报错信息判断似乎是一些数据文件找不到,在反复确定恢复操作无误后初步判断是备份数据不全导致 。
在与生产系统管理员多次沟通后得知该项目生产上部署在Oracle12C的多租户架构下,具体生产部署架构如下所示:

Oracle 12C多租户架构备份与恢复技术实践

文章插图
生产系统多租户部署架构
从上图中可以看出,项目(图中ITAPDB库)与其他多个项目部署在多租户架构下,每一个系统的业务数据分别存放在各自独立的PDB数据库中,所有PDB由一个容器库(CDB)来管理,共享计算资源,生产管理员只负责备份自己管理的PDB数据,主要备份脚本如下:


推荐阅读