Welcome 微信登录

首页 / 数据库 / MySQL / 12C CDB模式下RMAN备份与恢复

12C 的RMAN和Oracle Enterprise Manager Cloud Control工具支持多租户环境下的备份和恢复,RMAN可以连接到目标数据库、Data Guard、辅助实例或辅助数据库,通过连接数据库的类型不同,所完成的数据库操作也不相同,在这里我们主要描述CDB和PDB备份恢复操作,在PDB环境中支持备份或恢复单个数据文件或表空间。在从数据丢失恢复能力而言,单独备份根和所有的PDB相当于备份整个CDB。主要的区别是在RMAN命令的数目,您必须输入和恢复时间。恢复整个CDB$ROOT的时间要比所有的PDB的时间少。1.1.  RMAN连接数据库RMAN可通过操作系统认证和密码文件两种方式连接到一个目标数据库,使用RMAN备份恢复工具的用户需要具有SYSDBA或SYSBACKUP系统权限,如果用户需要连接到恢复目录,需要被授予RECOVERY_CATALOG_OWNER对象权限。操作系统认证我们在LINUX环境中使用操作系统认证方式连接到数据库,我们需要满足以下两个条件:设定ORACLE_SID变量,例如数据库的SID为orcl,因此我们在.bash_profile文件或者命令行设置ORACLE_SID变量。ORACLE_SID=orcl; export ORACLE_SID执行rman命令用户需要具有SYSDBA或者SYSBACKUP权限,Linux环境下的OSDBA用户组为dba。具有SYSDBA权限用户连接到RMANrman target ""/ as sysdba""具有SYSBACKUP权限用户连接到RMANrman target ""/ as sysbackup""具有SYSDBA权限用户隐式连接到RMANrman target /密码文件认证数据库使用密码文件认证管理用户,RMAN可以使用密码连接。使用本地或远程访问的密码文件。使用服务名方式连接数据库时,数据库必须使用一个密码文件,同样连接到数据库的用户需要具有SYSDBA或SYSBACKUP权限。密码文件认证具有SYSDBA权限用户连接到RMANrman target ""zlhis@orcl assysdba""target database Password: passwordconnected to target database: orcl(DBID=39525561)密码文件认证具有SYSBACKUP权限用户连接到RMANrman target ""zlhis@orcl as sysbackup""target database Password: passwordconnected to target database: orcl(DBID=39525561)1.2.  只备份CDB
只备份CDB数据库需要具有SYSDBA或SYSBACKUP权限用户连接到CDB的root环境下,执行backupdatabase root命令即可完成对CDB的备份,方法如下:RMAN> backupdatabase root;启动 backup 于 17-3月 -16分配的通道: ORA_DISK_1通道 ORA_DISK_1: SID=50 设备类型=DISK通道 ORA_DISK_1: 正在启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集内的数据文件输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/cdb/system01.dbf输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/cdb/sysaux01.dbf输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/cdb/undotbs01.dbf输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/cdb/users01.dbf通道 ORA_DISK_1: 正在启动段 1 于 17-3月 -16通道 ORA_DISK_1: 已完成段 1 于 17-3月 -16段句柄=/u01/app/oracle/fast_recovery_area/CDB/backupset/2016_03_17/o1_mf_nnndf_TAG20160317T152301_cgnptp1s_.bkp标记=TAG20160317T152301 注释=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:55完成 backup 于 17-3月 -16启动 Control File and SPFILE Autobackup 于 17-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_17/o1_mf_s_906737097_cgnpydod_.bkpcomment=NONE完成 Control File and SPFILE Autobackup 于 17-3月 -16执行backup database root不给数据文件保存位置时,备份文件默认存放在快速恢复区中。1.3.  备份整个CDB及其下面的所有PDB
备份整个CDB数据库及其下面的所有PDB类似于非CDB数据库方法相同,使用具有SYSDBA或SYSBACKUP权限用户连接到CDB的root环境下面,然后执行backupdatabase命令即可完成整个CDB的备份,方法如下:RMAN> backup database;启动 backup 于 17-3月 -16分配的通道: ORA_DISK_1通道 ORA_DISK_1: SID=50 设备类型=DISK通道 ORA_DISK_1: 正在启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集内的数据文件输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/cdb/system01.dbf输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/cdb/sysaux01.dbf输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/cdb/undotbs01.dbf输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/cdb/users01.dbf输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf通道 ORA_DISK_1: 正在启动段 1 于 17-3月 -16通道 ORA_DISK_1: 已完成段 1 于 17-3月 -16段句柄=/u01/app/oracle/fast_recovery_area/CDB/backupset/2016_03_17/o1_mf_nnndf_TAG20160317T152301_cgnptp1s_.bkp标记=TAG20160317T152301注释=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:55完成 backup 于 17-3月 -16启动 Control File andSPFILE Autobackup 于17-3月-16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_17/o1_mf_s_906737097_cgnpydod_.bkpcomment=NONE完成 Control File andSPFILE Autobackup 于17-3月-16 1.4.  备份单个和多个PDB
在CDB中允许备份一个或多少PDB数据库,备份一个PDB数据库可以通过以下两个方式备份:在CDB根(root)使用BACKUP PLUGGABLE DATABASE命令备份一个或多个PDB数据库。[oracle@localhost ~]$ rman target /恢复管理器: Release 12.1.0.2.0 - Production on 星期二 3月 22 17:11:27 2016Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.已连接到目标数据库: CDB (DBID=2023252752)RMAN> backuppluggable database pdb1;启动 backup 于 22-3月 -16使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: SID=57 设备类型=DISK通道 ORA_DISK_1: 正在启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集内的数据文件输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf通道 ORA_DISK_1: 正在启动段 1 于 22-3月 -16通道 ORA_DISK_1: 已完成段 1 于 22-3月 -16段句柄=/u01/app/oracle/fast_recovery_area/CDB/2E26709E68912450E055000000000001/backupset/2016_03_22/o1_mf_nnndf_TAG20160322T171142_ch232hxb_.bkp标记=TAG20160322T171142 注释=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05完成 backup 于 22-3月 -16启动 Control File and SPFILE Autobackup 于 22-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_22/o1_mf_s_907175569_ch234n0h_.bkpcomment=NONE完成 Control File and SPFILE Autobackup 于 22-3月 -16       如果要备份多个pdb,只需在备份命令后面跟上多个你想备份的pdb实例的名称,如下backup pluggable database pdb1,pdb2;在PDB中使用BACKUP DATABASE备份当前连接的PDB数据库,前提条件是需要配置好TNSNAMES.ORA文件。[oracle@localhost admin]$ rman target sys/oracle@pdb1恢复管理器: Release 12.1.0.2.0 - Production on 星期三 3月 23 09:35:16 2016Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.已连接到目标数据库: CDB (DBID=2023252752)RMAN> backup database;启动 backup 于 23-3月 -16使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: SID=69 设备类型=DISK通道 ORA_DISK_1: 正在启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集内的数据文件输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf通道 ORA_DISK_1: 正在启动段 1 于 23-3月 -16通道 ORA_DISK_1: 已完成段 1 于 23-3月 -16段句柄=/u01/app/oracle/fast_recovery_area/CDB/2E26709E68912450E055000000000001/backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp标记=TAG20160323T100113 注释=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05完成 backup 于 23-3月 -16启动 Control File and SPFILE Autobackup 于 23-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_23/o1_mf_s_907236140_ch3y9jyb_.bkpcomment=NONE完成 Control File and SPFILE Autobackup 于 23-3月 -16 1.5.  整体数据库恢复(CDB和所有PDB)
12C数据库加强了RMAN恢复的功能,恢复的方式基本同以前的模式一样,如果是在一个全新的异地进行恢复,同样的也是先手工创建与原库相同的CDB和PDB实例,然后关闭实例,删除所有数据文件,通过RMAN命令或者拷贝原始库的控制文件到新库上,启动CDB数据库到mount状态,如下[oracle@localhostadmin]$rman target /恢复管理器: Release 12.1.0.2.0 -Production on 星期三 7月 13 11:27:33 2016Copyright(c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.已连接到目标数据库 (未启动)RMAN>startup mount;Oracle实例已启动数据库已装载系统全局区域总计    2516582400 字节FixedSize                   3048776 字节VariableSize                671091384 字节DatabaseBuffers            1828716544 字节RedoBuffers                  13725696 字节RMAN>restoredatabase;。。。。。。。(此处省略)通道 ORA_DISK_1: 将数据文件 00098 还原到 ….ORADATA/ORCL/ZL9WZARDDATA.DBF通道 ORA_DISK_1: 将数据文件 00099 还原到 ….ORADATA/ORCL/ZL9IDEXPSS.DBF通道 ORA_DISK_1: 将数据文件 00100 还原到 ….ORADATA/ORCL/ZLBA5.DBF通道 ORA_DISK_1: 将数据文件 00101 还原到 ….ORADATA/ORCL/MGMTAD4J.DBF通道 ORA_DISK_1: 将??据文件 00102 还原到 ….ORADATA/ORCL/MGMTDBF通道 ORA_DISK_1: 将数据文件 00103 还原到 ….ORADATA/ORCL/MGMTDEPOT.DBF通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/fast_recovery_area/CDB/autobackup/01RAH8KJ_1_1通道 ORA_DISK_1: 将数据文件 00002 还原到 ….ORADATA/CDB/PDBSEED/SYSTEM01.DBF通道 ORA_DISK_1:` 将数据文件 00004 还原到 ….ORADATA/CDB/PDBSEED/SYSAUX01.DBF通道 ORA_DISK_1: 正在读取备份片段D:APPRMAN4RAH9B2_1_1。。。。。。。(此处略过)通道 ORA_DISK_1: ORA-19870:还原备份片段 /u01/app/oracle/fast_recovery_area/CDB/autobackup 04RAH9B2_1_1 时出错ORA-19504:无法创建文件"….ORADATA/CDB/PDBSEED/SYSAUX01.DBF"ORA-27040:文件创建错误, 无法创建文件OSD-04002:无法打开文件O/S-Error:(OS 3) 系统找不到指定的路径。故障转移到上一个备份RMAN-00571:===========================================================RMAN-00569:=============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571:===========================================================RMAN-03002:restore 命令 (在 07/13/2016 11:55:19 上) 失败RMAN-06026:有些目标没有找到 - 终止还原RMAN-06023:没有找到数据文件4的副本来还原RMAN-06023:没有找到数据文件2的副本来还原在还原的时候可能遇到RMAN-06023错误,这是由于恢复数据文件路径不存在导致,我只需要手工创建路径,然后重复执行下restore database命令就可以了,之前已经恢复的文件会自动略过,如下。。。。。。。(此处省略)正在略过数据文件111; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCBASE.DBF正在略过数据文件112; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCINDEX.DBF正在略过数据文件113; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCDATA.DBF正在略过数据文件114; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCDATAINDEX.DBF正在略过数据文件115; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCXML.DBF通道 ORA_DISK_1: 正在开始还原数据文件备份集通道 ORA_DISK_1: 正在指定从备份集还原的数据文件通道 ORA_DISK_1: 将数据文件 00002 还原到 ....ORADATA/CDB/PDBSEED/SYSTEM01.DBF通道 ORA_DISK_1: 将数据文件 00004 还原到 ....ORADATA/CDB/PDBSEED/SYSAUX01.DBF通道 ORA_DISK_1: 正在读取备份片段D:APPRMAN4RAH9B2_1_1通道 ORA_DISK_1: 已还原备份片段 1通道 ORA_DISK_1: 还原完成, 用时: 00:00:55完成 restore 于 13-7月 -16RMAN>recoverdatabase;。。。。。。(此处省略)归档日志文件名=…..ARCHIVE/ARC0000000588_0915209064.0001线程=1 序列=588归档日志文件名=…..ARCHIVE/ARC0000000589_0915209064.0001线程=1 序列=589归档日志文件名=…..ARCHIVE/ARC0000000590_0915209064.0001线程=1 序列=590归档日志文件名=…..ARCHIVE/ARC0000000591_0915209064.0001线程=1 序列=591归档日志文件名=…..ARCHIVE/ARC0000000592_0915209064.0001线程=1 序列=592归档日志文件名=…..ARCHIVE/ARC0000000593_0915209064.0001线程=1 序列=593归档日志文件名=…..ARCHIVE/ARC0000000594_0915209064.0001线程=1 序列=594归档日志文件名=…..ARCHIVE/ARC0000000595_0915209064.0001线程=1 序列=595介质恢复完成, 用时: 00:04:32完成 recover 于 13-7月 -16RMAN>alter database open resetlogs;已处理语句1.6.  单个PDB数据库恢复
恢复单个PDB的前提是CDB已经能够正常启动,在CDB启动的情况下在RMAN中采用restore pluggable database pdb名称指定单个PDB数据库进行恢复,如下RMAN>restore pluggable database orcl;启动 restore 于 13-7月 -16使用通道 ORA_DISK_1通道 ORA_DISK_1: 正在开始还原数据文件备份集通道 ORA_DISK_1: 正在指定从备份集还原的数据文件通道 ORA_DISK_1: 将数据文件 00056 还原到 ....ORADATA/ORCL/SYSTEM01.DBF通道 ORA_DISK_1: 将数据文件 00057 还原到 ....ORADATA/ORCL/SYSAUX01.DBF通道 ORA_DISK_1: 将数据文件 00058 还原到 ....ORADATA/ORCL/USERS。。。。。。。(此处省略)通道 ORA_DISK_1: 将数据文件 00102 还原到 ....ORADATA/ORCL/MGMT.DBF通道 ORA_DISK_1: 将数据文件 00103 还原到 ....ORADATA/ORCL/MGMT_DEPOT.DBF通道 ORA_DISK_1: 正在读取备份片段D:APPRMAN1RAH8KJ_1_1通道 ORA_DISK_1: 段句柄 =…..RMAN/01RAH8KJ_1_1 标记 = TAG20160712T160849通道 ORA_DISK_1: 已还原备份片段 1通道 ORA_DISK_1: 还原完成, 用时: 00:07:07完成 restore 于 13-7月 -16RMAN>recover pluggable database orcl;启动 recover 于 13-7月 -16使用通道 ORA_DISK_1正在开始介质的恢复归档日志文件名=…..ARCHIVE/ARC0000000591_0915209064.0001线程=1 序列=591归档日志文件名=…..ARCHIVE/ARC0000000592_0915209064.0001线程=1 序列=592归档日志文件名=…..ARCHIVE/ARC0000000593_0915209064.0001线程=1 序列=593归档日志文件名=…..ARCHIVE/ARC0000000594_0915209064.0001线程=1 序列=594归档日志文件名=…..ARCHIVE/ARC0000000595_0915209064.0001线程=1 序列=595介质恢复完成, 用时: 00:01:10完成 recover 于 13-7月 -16最后,在以restlogs方式,打开pdb实例,如下SQL*Plus:Release 12.1.0.2.0 Production on 星期三 7月 13 15:12:57 2016Copyright(c) 1982, 2014, Oracle.  All rightsreserved.SQL>conn / as sysdba已连接。SQL>show pdbs    CON_ID CON_NAME                     OPEN MODE  RESTRICTED---------------------------------------- ---------- ----------       2 PDB$SEED                     READ ONLY  NO       3 ORCL                         MOUNTED       4 ZLEMR                          MOUNTEDSQL>alter pluggable database pdb1 orcl resetlogs;插接式数据库已变更。SQL>show pdbs    CON_ID CON_NAME                     OPEN MODE  RESTRICTED---------------------------------------- ---------- ----------       2 PDB$SEED                     READ ONLY  NO       3 ORCL                         READ WRITE NO       4 ZLEMR                          MOUNTED1.7.  恢复PDB数据文件
数据库在open的时候,会对当前的数据的所有数据文件进行检查。对于system,sysaux和undo表空间的数据文件,如果有问题,数据库无法open。如果是PDB中某个普通的数据文件出现丢失,我们可以先用offline方式跳过,然后再打数据库,稍后再对数据文件做恢复:例:SQL> startup;ORACLE instance started.Total System Global Area  835104768 bytesFixed Size                  2293880 bytesVariable Size           322965384 bytesDatabase Buffers          503316480 bytesRedo Buffers                6529024 bytesDatabase mounted.ORA-01157: cannot identify/lock data file 6- see DBWR trace fileORA-01110: data file 6:"/u01/app/oracle/oradata/c12/users01.dbf"SQL> alter database datafile 6 offline;Database altered.SQL> alter database open;Database altered.使用rmanRMAN> restore datafile 6;RMAN> recover datafile 6;然后对数据文件进行online处理SQL> alter database datafile 6 online;再看看pdb的数据文件.摸拟pdb数据文件删除[oracle@o12c pdb2]$ mv pdb2_users01.dbfpdb2_users01.dbfold启动数据库实例SQL> startup;ORACLE instance started.Total System Global Area  835104768 bytesFixed Size                  2293880 bytesVariable Size           322965384 bytesDatabase Buffers          503316480 bytesRedo Buffers                6529024 bytesDatabase mounted.Database opened.由此我们可以得出一个结论,当cdb在打开的时候,数据库不会检查pdb中的数据文件。SQL> alter pluggable database pdb2 open;alter pluggable database pdb2 openERROR at line 1:ORA-01157: cannot identify/lock data file 13- see DBWR trace fileORA-01110: data file 13:"/u01/app/oracle/oradata/c12/pdb2/pdb2_users01.dbf"只有在打开pluggabledatabase时,会效验PDB数据库的数据文件,。SQL> alter session set container=pdb2;Session altered.SQL> alter pluggable database datafile 13 offline;Pluggable database altered. 数据文件file#(文件号)是唯一的,但我们在CDB中操作时找不到该文件,必须要进入PDB模式,如果在CDB试图去offline一个数据文件时会报错:SQL> show con_nameCON_NAME------------------------------CDB$ROOTSQL> alter database datafile 10 offline;alter database datafile 10 offline第 1 行出现错误:ORA-01516: 不存在的日志文件, 数据文件或临时文件 "10"*但是在rman中可以直接使用datafile号进行恢复[oracle@localhost admin]$ rman target /恢复管理器: Release 12.1.0.2.0 - Production on 星期三 3月 23 11:04:15 2016Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.已连接到目标数据库: CDB (DBID=2023252752)RMAN> restore datafile 10;启动 restore 于 23-3月 -16使用通道 ORA_DISK_1通道 ORA_DISK_1: 正在开始还原数据文件备份集通道 ORA_DISK_1: 正在指定从备份集还原的数据文件通道 ORA_DISK_1: 将数据文件 00010 还原到 /u01……/backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp通道 ORA_DISK_1: 段句柄 = /u01…….backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp标记 = TAG20160323T100113通道 ORA_DISK_1: 已还原备份片段 1通道 ORA_DISK_1: 还原完成, 用时: 00:00:01完成 restore 于 23-3月 -16RMAN> recover datafile 10;启动 recover 于 23-3月 -16使用通道 ORA_DISK_1正在开始介质的恢复介质恢复完成, 用时: 00:00:00完成 recover 于 23-3月 -16;更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址