Oracle12C多租户架构备份与恢复技术实践

2019-09-29 14:19http://uccamador.com1分pk10_三分快乐十分_三分时时彩网站_幸运七星彩网址-【pc蛋蛋赚官网】

颜廷义,中国农业银行研发中心系统支持部高级工程师,主要从事数据脱敏技术研究、数据库管理与维护等相关工作。

Oracle12C中一个重要特性多租户特性被引入。12C之前,数据库实例(OracleInstance)与数据库之间为多对一或一对一关系,若服务器上同时运行多个Oracle数据库,必须同时运行多个数据库实例,资源耗费非常大。

因此12C之前的版本中业务数据之间的隔离一般通过Schema-Tablespace模式实现;而在12C多租户体系中,一个数据库实例下可以同时运行和管理多个数据库,数据库在更高级别实现了数据的隔离。

本文以实际工作中具体数据申请为背景,对多租户体系下数据库的备份与恢复技术进行研究,形成一套详细、可用的数据备份、恢复方法,该方法既可为生产系统管理员日常备份与恢复提供参考,也值得数据恢复人员借鉴。

CDB容器库是多租户架构下数据与元数据的逻辑容器,每个CDB由一个根容器(CDB$ROOT)、一个种子容器(PDB$SEED)和多个可插拔数据库(PDB)组成,可以在不同的PDB库中存放各个系统的业务数据,实现业务数据的隔离。

RMAN(RecoveryManager)是Oracle软件自带的备份与恢复工具,主要应用于全库或数据库部件(如表空间,数据文件,控制文件等)进行物理级备份与恢复,备份方式一般分为全量备份和增量备份。

RMAN备份主要使用backup命令进行,恢复包括restore和recover两个过程,其中restore主要用于从备份集中将数据文件恢复至数据库中,recover用于在restore基础上使用日志重做事务。

SCN(SystemChangeNumber)系统改变号,Oracle数据库中内置的时间机制,主要用于记录检查点(checkpoint)、事务提交(commit)等重要事件发生的时间及先后顺序,SCN值主要存放在控制文件、数据文件头以及日志文件中,在数据库备份、恢复与管理过程中起重要作用。

Oracle数据库中最重要的物理文件,记录了数据库的物理结构(如数据文件、日志文件的名称与具体存储位置)、检查点等信息,控制文件在数据库启动、运行及恢复时起到很重要的作用。

作者在受理测试数据申请时遇到数据恢复失败问题,当按单租户数据库的恢复方法将生产数据恢复至脱敏环境时遇到大量报错,具体恢复脚本与报错信息如下,由于篇幅问题,在此只列出关键步骤:

在与生产系统管理员多次沟通后得知该项目生产上部署在Oracle12C的多租户架构下,具体生产部署架构如下所示:

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

从多租户架构的定义知道,所有PDB共享一个数据库实例、一份控制文件、一份在线REDO日志文件和一组UNDO撤销数据文件。

在控制文件中记录了所有数据文件的记录和数据库的物理性更改(如新建表空间、数据文件备份、检查点发生的SCN等)。

当执行restoredatabase、recoverdatabase操作进行全库恢复时,由于备份数据只包括ITAPDB数据库的备份文件,那么恢复时自然会报数据文件找不到错误。

从查询结果发现报错信息中找不到的数据文件编号都是其他项目PDB数据库中的数据文件,再查询v$datafile_header动态视图:

可以发现ITAPDB库的相关数据文件的文件头CheckpointSCN值已经变化,而其他库的数据文件头SCN为零,这说明ITAPDB库的相关数据文件已经完成restore操作,SCN值已经恢复到备份时的SCN,而其他PDB库由于缺少数据文件备份,restore时报错,因此SCN值还为0,这进一步验证了分析的正确性。

①前面章节提到,在CDB容器库中包括一个CDB$ROOT、一个PDB$SEED和多个PDB数据库,其中CDB$ROOT库主要用于存储元数据等管理数据,PDB$SEED库是只读种子库,主要作为模板为其他PDB库建立时提供模板。那么CDB$ROOT、PDB$SEED两个库的备份数据是否是数据恢复必需的?

②控制文件中记录了所有多租户架构下的数据文件、表空间等信息,当只恢复ITAPDB数据库时是否可以采用显示跳过方式规避掉其他不需要恢复的数据文件?

带着上面的疑问,经过多次数据恢复测试、问题查找与研究,我们总结出一整套Oracle12C多租户数据库的备份、恢复方法,具体步骤如下:

①首先联系生产管理员对CDB$ROOT、PDB$SEED和ITAPDB三个库重新进行备份,而不再只备份ITAPDB数据库的数据,备份脚本变为:

RMANbackupascompressedbackupsetpluggabledatabase"CDB\$ROOT","PDB\$SEED",itapdbformat'/new/%d_itapdb_%t_%U_%p';

说明:由于生产系统部署在ASM存储 RAC架构下,而脱敏环境为本地磁盘 非RAC架构,生产与恢复环境的数据存放目录不一致,需要将备份文件编目至控制文件中。

在开始restore恢复数据文件之前,可以使用crosscheck命令对备份集有效性进行检查,对于在控制文件中记录而在数据库服务器上没有存储的备份集会被标记为expired状态。

与单租户数据恢复不同,由于控制文件中记录了所有PDB数据库及其表空间信息,如果在恢复时不跳过相应PDB对应的表空间,使用recoverdatabase恢复会报如下错误:

此外在恢复过程中可能会遇到restore或recover过程缓慢甚至停滞的问题,主要表现为在alertSID.log日志文件中报大量ASMB进程错误,该问题主要由Oraclebug导致,触发条件一般为生产上部署架构(ASM RAC)与数据恢复环境(非RAC 本地磁盘)部署架构不一致导致,针对该问题可登录MOS网站(MyOracleSupport)下载相应补丁并进行打补丁操作。

本文就测试数据申请中遇到的具体问题为切入点,对Oracle12C多租户架构下的备份与还原方法进行了研究和总结,从整个过程来看,其备份与恢复方法与单租户架构恢复有较大差异,具体差异主要体现在以下三个方面:

②在restore恢复数据文件阶段,由于多个PDB可插拔数据库共用一份控制文件及存储与计算资源,需在数据恢复时显示指定需恢复的数据库。

③在使用日志文件进行数据恢复的过程中,需要使用recoverdatabaseskipforevertablespace命令显示跳过不需恢复的PDB对应表空间。

Oracle12C多租户体系特性可以在一定程度上解决服务器资源瓶颈的问题,可以考虑将多个数据量较小项目部署在多租户架构下,每个PDB数据库独立存放各自的业务数据,多个PDB数据库共享一个实例。

后期在Oracle多租户逐渐成为主流的情况下,该方法具有较强的前瞻性,对Oracle数据库的管理与维护是一个很好的补充,很值得生产管理员、数据导入与脱敏人员的借鉴。

Fintech技术沙龙-上海各大银行的技术专家于9月21日在上海与大家相聚,探讨金融级数据库与运维实践。数据中台、数据架构与优化-北京沙龙10月26日五位资深技术专家,共同分享新鲜案例,帮助大家提升数据架构与优化能力。

1分pk10_三分快乐十分_三分时时彩网站_幸运七星彩网址-【pc蛋蛋赚官网】 Copyright © 2017-2018 1分pk10 版权所有

1分pk10_三分快乐十分_三分时时彩网站_幸运七星彩网址-【pc蛋蛋赚官网】是国内最具权威的开奖网,项目包括时时彩计划、快三、11选5、快乐十分、排列三、幸运飞艇游戏、福彩3d、六合网开奖结果、七星彩、pc蛋蛋计划预测分析娱乐交流平台。其中还有沙巴体育、ag捕鱼平台、bb电子游戏、ag真人、bb彩票app、开元棋牌、NBA视频、足球视频、CBA视频等直播视频网站。